一.图像增强的处理方法介绍
在空间域里,是对图像直接位置上的操作。对坐标位置的处理。
在频率域里,是将图像从空域变到频率域进行处理,处理完后再返回空域显示。
在图像的变换域上进行处理,比如把图像进行复列变换。在频率域上提取感兴趣的频率分量,然后进行反变换,即得到了图像的增强。
空间域滤波增强技术-空域滤波:基于像素的点处理和基于模板的空域滤波
图像平滑和图像锐化两者的区别:
图像平滑:是去除噪声的,围绕模板的处理方法
图像锐化:是怎样提取目标物体的轮廓,为后续的工作和识别打下基础
二.平滑处理的基本概念
1.定义
- 什么是平滑处理
图像在获取、传输过程中,受干扰的影响,会产生噪声。
噪声是一种错误的信号,会干扰正常信号,造成图像毛糙。所以我们要对噪声进行消除。
这样的技术叫平滑处理技术。
图像去噪是一种信号滤波处理方法,目的是保留有用信号,去掉噪音信号。
所以这一节围绕怎样去掉噪声而保留有用的信号。
因为我们在去噪声的同时可能对有用信号也产生一些副作用,所以我们要逐步分析那种方法的优缺点,去噪之后产生的效果是什么,多种方法作比较。
在工作中可以试验,选择一种比较适用的。
- 什么是噪声
下图在产生过程中有很多小白点,它是随机的噪声,这个随机噪声是不规则的,位置也不知哪里产生的。
所以就要有一种算法或方法把这个噪声去掉,这个噪声的特点是灰度是空间不相关的,在哪个位置都是随机的,灰度值也是随机的,亮度随机,位置随机,分布随机。
惟一的特点是与我们所想要的基本的图像的主要数据是有区别的。
利用它和图像有很多差异性这个原理来处理这个噪声,消除掉。
- 平滑的目的
为什么产生模糊?
因为在拍摄图像当中,一些面积大的物体中间有一些小细缝或小窟窿,小孔,我们希望这个小孔去掉,跟周围的物体同一个颜色。
这样,我们用平滑的方法在提取较大物体前,去除太小的细节,
削弱高频分量,相当于一个低通滤波器了。
因为噪声是随机产生的,一小块一小块的。
2.平滑处理方法
- 图像平滑处理技术-邻域处理
邻域就是用某一个模板在图像中移动,逐一地移动,它移动的位置就照在这个图像里了,照应对象后,对应的像素要和模板上的系数相乘,乘完之后求和,然后取平均值,将求和平均值作为当前像素的值。
模板多大尺寸?模板和像元如何计算?
模板要对着图像对上去,与所对的像元进行数学运算,这里的数学运算有乘,乘完了取加还是取减,得到像元新的灰度值,它的新的灰度值取决于它自己的灰度值而且与它的邻域有关系。
下面例子:
是一个3*3模板。
左边模板特点:系数都是正的,系数之和再平均都为1.
右边模板:中间是正值,最大值是4,离他最近的是2,离他远的是1,属于一种高斯型模板,它的模板系数的权重不一样,它的平均值也是1。
模板大小是人指定的,可以做成5*5/3*2/7*7..任意大小,
邻域平均法在减少噪声的同时使边界也模糊了。
我们可以采用加权平均法,
也可以采用自适应的选择式掩膜平均法:不同方向取平滑,看哪个方向更适合
模板如何选择邻域大小?
中值滤波:不带来边缘的模糊,保持边缘信息
- 平滑处理基本方法
线性平滑:模板系数都为1,它取邻域里面3*3/n*n的平均值,它的灰度值用它的邻域值代替,或者用刚才那种加减系数的不同的系数的模板把它对应成累加取和。
非线性平滑:线性平滑的改进。
自适应平滑:取很多方向的模板,不同的大小不同系数,看哪个方向能取出噪声
3.空域卷积滤波–卷积
- 模板
- 模板如何移动/计算–卷积运算/模板操作
中间黑的是我们要求的平滑处理的像素。
对他平滑处理:将模板移动到这里,模板中心和像素对应上,模板是3*3,像素也取3*3的邻域
将p5像素从邻域中取出来,取出来的小块放到这个矩阵里面,这个矩阵中心就是p5,p5就是需要计算的值,模板是事先人为指定好的矩阵,矩阵中都有系数,系数对于平滑滤波来说系数都为正数,且多有系数之和除以平均值应该和模板平均值为1,
那么把这个模板照到p上,k要往p上照,相应的照的过程就是两个矩阵相乘。
乘积加起来取和,就是当前这个像素经过平滑处理后的值,
平滑和锐化一样,两个运算:
1,对应乘的运算,2,把乘积取和作为当前中心像素
进行模板计算一定要有人为指定的模板,然后让模板在图像上不断漫游/依次移动,每个像素都要做这种修改,最后就完成了图像的卷积--平滑处理。
给定不同模板,同样一幅图会有不同效果。
把模板和图像的这种计算用公式表示,如下:
模板权重乘以对应位置上的像素,然后把所有的对应累加取和,除以模板总体的和,就是取平均,得到新的x,y位置。
新的像素中心位置的值是一个由它这个系数与它邻域相乘以后决定的,模板所取系数的下标从-a到a,如果模板大小是3*3,那就是从-1到1,所以如果x-1到x+1,把这个序号如果是3*3的话a就取1,如果高度也是3*3,那就是从-1到1,所以使得当前这个像素,比如iz这个像素,就从i-1,z-1到i+1,z+1这样的过程。
注意在这个累加求和的当中a的取值,b的取值等于模板的大小,比如说3-1除以2=-1,那么宽都为奇数,模板的长度和宽度都是奇数。
把这个式子再写成累加和式子,那就对应它的像素取和,3*3的话就是1-9.
模板运算就是信号里的卷积,
- 卷积运算的边界问题
举例
边界问题的解决
- 卷积步骤
三.平滑处理方法-噪声消除法(二值图像)
1.二值图像的黑白点噪声滤波
- 原理
3*3模板系数都是1,它的中心值系数取0,四周8个都为1.把8个像素平均值算出来,相当于这样一个模板:111101111。
这个模板罩上去时,和对应像素相乘就是正好把8个邻域给计算一下取平均值。
取完平均值后,看我这个图像刚才这个位置和平均值的关系,如果超出平均值就是异常的,比如8个都是白的,唯独我是黑的,那就肯定是噪声。四周都是白,只有我是黑,白的是255,黑的是0,四周取平均就是127.5,这时把平均值取代过来,
- 实现步骤
效果
2.二值图像-消除孤立黑像素点
- 原理
- 步骤
图像编程中注意去掉边界,对边界点我们无法判断,因为边界点最上面和最下边这行没有四邻域也没有八邻域。四邻域,
效果图*
同一幅图,4连接的效果比8连接的更好,因为8连接的条件更苛刻,
四.平滑处理方法-邻域平均法
1.邻域平均法(均值滤波)-原理
一幅图像在采集和传输过程中受到干扰,产生一些孤立的像素点,这些孤立的像素叠加到图像上产生噪声,这些噪声像雪花一样,因为它一叠加颜色就更白了,所以像雪花一样被污染了。而图像的灰度是相对连续变化的,有一定面积的,而噪声是孤立的,或者随机面积大小的。图像物体不会突变是连续变化的。
因为把邻域加起来的平均就把孤立的像素值给改了。
邻域的模板
邻域平均法存在的问题
你把每一个像素用周围的平均值取出来赋予当前像素点,那一定会造成模糊,使得边界不清晰.
这种方法,如果它是一个孤立的像素,只是一点的话,经过平滑后信噪比会提高,但是模板的大小不能太大,因为越大越模糊,那就没有细节了。
它这孤立点用平均法滤一遍,它的像素值会改变,但是在整个图像中产生了边界变化,产生了模糊,不清晰了。
邻域平均法的改进
这个模板的尺寸、形状、方向、参数、系数都需要改,后面的课程都是围绕着模板的改进,来看它的效果。
比如下面:
模板的大小、方向、形状都不同,那么根据物体的边界情况来取。
邻域加权平均法
如果模板的系数大小不为1,而是有某个总值的话,这样的模板是加权模板。加权模板也属于空域的滤波增强算法,他可以对图像进行卷积元算。
比如下面;就算完一次后就把模板平移一下,一个像素一个像素移,过程是模板漫游,模板中心与图像中的点重合,将模板上的系数与模板下对应的像素灰度值相乘,累积求和,并除以系数之和。
加权系数区分邻域和中心像素的关系,对中心像素影响越大,权数越大,说明他这个对最后的计算结果影响越大。权数为0,中心取决于周围与自身无关,权数为2,比邻域的值大,那么自身的影响比邻域要大。
下面为著名的高斯模板,高斯平均加权模板,高斯模板自身(中心店)占的权重最大,距离中心店越近权数越大,距离越远,权数越小,在整个平均以后的输出值占的比重较大,而靠近中心店的稍逊一些。但比远离中心点的像素高。
这个模板说明自身在滤波之中所起的作用对输出的结果影响是不同的,
2 3*3均值滤波
实现步骤
3 超限邻域平均法
输出值不仅与自己有关,主要当前值与平均值是不是差别太大了,如果当前值和平均值差别太大,超出了一定范围,一定阈值,就用平均值取代,如果没超过阈值,我就用自身的值。
4 M*N均值滤波器
M和N是用户随机指定的,它也一样开辟窗口,求窗口的平均灰度,然后因为它是均值处理直接把平均值给取过来,但是它的代价是N越大越模糊,它用周围的平均值来取代了,所以取得M*N的窗口,这个窗口不一定是3*3,也可能是5*5,
实现步骤
5选择式掩膜平滑
我们要进行滤波,不想把图像的边界给模糊化。
什么是边界:就是一个物体到另一个物体过度的区域就是边界。
边界的像素的变化率最大。
如何统计边界的变化率的大小?用方差公式
对一个区域来说,如何求方差,比如这个模板,我把它对应的平均值取到,像素减去平均值,像素减去平均值的平方的累加取和就是方差,
如果在边界的话,方差是很大的,边界是有方向的,如果垂直与边界方向上的,那么方差最大,如果本身平行于边界,那么方差是最小的,所以掩膜式平滑法是找方差最小的,找不到边界的地方进行平滑。
下面这几组都是带有方向性质的模板,叫做自适应平滑方法
自适应平滑方法
所谓的自适应就是有好几种模板,我通过计算自动的选择其中的一个模板,看哪一种更适合更好。
一个物体,如果在物体内方差最小,因为平均值,每个像素减去平均值,在边缘区域里方差比较大,这里面不知道物体什么形状,如果
如下所示:
采用选择式掩膜去掉的噪声的边界比7*7均值滤波得到的边界好多了。这个边界保留住了,而且还去掉噪声。
五.平滑处理方法-中值滤波
1.原理
- 邻域平均法和中值滤波对比
中值滤波是将窗口开奇数个大小,把这数据从小到大给排序,取中间的值作为当前的像素值。
也是要有个窗口,比如3*3窗口,要将窗口内数据排序,排出序来要取中间的这个数作为当前的像素值。
电线尖顶细节多的图像不宜采用,因为电线都给去掉了,就断了,所以它对脉冲性的干扰,脉冲性的噪声比较好。
信号的处理方法可以用到图像中,图像的方法也可以用到信号里面。
信号是一维的数据,按时间来的顺序,在计算机中属于一维矩阵。
图像是二维数据,二维数据有行宽,数据量比信号的大,在信号处理中用的手段就可以拿到图像中,所以中值滤波就是非常好的借鉴。
在信号中,中值滤波是怎么用的?如下
- 信号中中值滤波是如何用的
对这个采集的序列做中值滤波,就是为了去除这个序列中的异常点、噪声点、干扰点,因为信号在采集中会出现异常特别大的值或特别小的值,跟整个值的平均值有很大的差距的这样的点。
对于这个序列如何做中值滤波?也要取个窗口,这个窗口的长度,假如说为M。
- 举例如下
- 中值滤波的应用
中值滤波对阶跃性的信号和斜坡信号,滤波的时候输入和输出是相同的,就是它对这种信号不产生滤波效果,不影响这种阶跃函数和斜坡函数。
对周期小于m/2的M函数受到抑制。
中值滤波的几种常用窗口
这些窗口所对应的相当于是一个模板,但是它不做卷积运算,但是窗口照上去以后窗口所对应的这个数据要进行排序,
模板的大小和尺寸是不同的,这几个窗口的选择对不同的噪声也有不同的效果。
窗口型就是方形的的对这个线性的噪声,方形的噪声,圆形的噪声比较有效。
- 中值滤波的特性
- 复合型中值滤波
几种中值滤波线性窗口
怎么组合?
一般有n个中值滤波器,对这n个滤波器里面我取一个最大值,滤波输出的结果,比如说水平的输出一个中值滤波值,垂直的滤波又输出一个值,那么这两者取一个最大值,
或者把它们每一个中值滤波的值有个加权的,按照加权累加取和。
这里就要对各种窗口大小方向都要中值滤波,所以要设计几种形状的模板,滤波的形式不同,相同就没意义了。要这种窗口形状大小不同,只要各窗口都与中心对称就可以。
如果是复合型中值滤波,要选择不同的窗口大小,不同的方向进行复合,只要每个窗口的中心对着当前的数据量就可以,那么组合的公式如下:
中值滤波线性组合
加权组合
- 中值滤波实现步骤
- 均值滤波和中值滤波的效果比较
如下图:
可看到,中值滤波的效果比均值滤波的效果好。
加高斯噪声后,中值滤波的效果和均值滤波的效果差不多,均值比中值好一些。
2.N*N中值滤波器
原理
实现步骤
3.十字型中值滤波器
4.N*N最大值滤波器
在N*N窗口,我取一个最大值放过来,在窗口里面不取中值了,取最大值。也可以取最小值。
5.产生噪声
六.基于MATLAB的图像的平滑处理
例1函数infilter()对图像进行平滑处理
%通过函数infilter()对图像进行平滑处理
clear all;
close all;
clc;
I=imread('灰度图.bmp');
%adds zero-mean,Gaussian white noise with variance of 0.01 to grayscale
%image I.J=imnoise(I,'salt & pepper',d)adds salt and pepper noise, where
%d is the noise density.This affects approximately d*numel(I) pixels.
J=imnoise(I,'salt & pepper',0.02);%添加椒盐噪声,0.02是噪声密度
h=ones(3,3)/5; %设置模版 3*3都为1,ones矩阵,都为1
h(1,1)=0; h(1,3)=0; %默认是都置1,用矩阵索引设置矩阵的参数
h(3,1)=0; h(3,3)=0;
% 0 1 0
% 1 1 1 *1/5
% 0 1 0
%有了这个模板后,还要做平移、对应乘累加求和,进行卷积,imfilter很省事,一步实
%现卷积操作,进行平滑处理...K=imfilter(J,h),filters the multidimensional array A with the
%multidimensional filter h and returns the result in B.B = imfilter(A,h)
%filters the multidimensional array A with the multidimensional filter h and
%returns the result in B.
K=imfilter(J,h); % 进行卷积运算 图像平滑滤波
figure;
subplot(131),imshow(I);
subplot(132),imshow(J);
subplot(133),imshow(K);
%进行线性平滑滤波,常用的模版是3*3的
%常用模版I=[0 1/5 0 1/5 1/5 1/5 01/5 0]
例2函数conv2()做卷积,对图像做平滑
%用函数conv2()做卷积,对图像做平滑
clear all;
close all;
clc;
I=imread('灰度图.bmp');%图像数组unit8型
I=im2double(I); %转换为double型
%J = imnoise(I,'gaussian',m,var_gauss) adds Gaussian white noise with mean
%m and variance var_gauss.
J=imnoise(I,'gaussian',0,0.01); %添加高斯噪声,参数分别是均值和方差
h=ones(3,3)/9; %设置模板(均值滤波)
%C=conv2(A,B)返回矩阵A和B的二维卷积。
K=conv2(J,h); %进行卷积运算,图像平滑滤波,跟imfilter效果一样都是进行卷积运算
G=imfilter(J,h); % 进行卷积运算 图像平滑滤波
figure;
subplot(141);imshow(I);
subplot(142);imshow(J);
subplot(143);imshow(K);
subplot(144);imshow(G);
%进行线性平滑滤波,常用的模版是3*3的
%常用模版I=[0 1/5 0 1/5 1/5 1/5 01/5 0]
例3函数filter2对图像进行二维线性数字滤波
%通过函数filter2对图像进行二维线性数字滤波
clear all;
close all;
clc;
I=imread('灰度图.bmp');
I=im2double(I);
J=imnoise(I,'salt & pepper',0.02);%添加椒盐噪声,噪声密度为0.02
%h=fspecial('average',hsize) returns an averaging filter h of size hsize.
h1=fspecial('average',3); %3*3的模版,用fspecial()建立模版
h2=fspecial('average',5);
%Y=filter2(H,X)根据矩阵H中的系数,对数据矩阵X应用有限脉冲响应滤波器。
K1=filter2(h1,I); % 进行卷积运算,图像平滑滤波
K2=filter2(h2,I); % 进行卷积运算,图像平滑滤波
figure;
subplot(131);imshow(I);
subplot(132);imshow(K1);
subplot(133);imshow(K2);
%进行线性平滑滤波,常用的模版是3*3的
%常用模版I=[0 1/5 0 1/5 1/5 1/5 01/5 0]
例4函数medfilt2()对图像进行中值滤波
%通过函数medfilt2()对图像进行中值滤波
clear all;
close all;
clc;
I=imread('lena.bmp');
I=im2double(I);
J=imnoise(I,'salt & pepper',0.02); %添加椒盐噪声,噪声密度为0.02.
K=medfilt2(J); %中值滤波
figure;
subplot(131);imshow(I);
subplot(132);imshow(J);
subplot(133);imshow(K);
例5函数ordfilt2()对图像做排序滤波
%函数ordfilt2()对图像做排序滤波
clear all;
close all;
clc;
I=imread('lena.bmp');
I=im2double(I);
J=imnoise(I,'salt & pepper',0.02);%添加椒盐噪声,噪声密度为0.02
%B = ordfilt2(A,order,domain) replaces each element in A by the orderth
%element in the sorted set of neighbors specified by the nonzero elements
%in domain.
K1=ordfilt2(I,1,true(5)); %排序滤波,采用的模版大小是5*5,排序后采用最小值滤波
K2=ordfilt2(I,25,true(5)); %排序滤波,排序后采用最大值滤波
figure;
subplot(131),imshow(I);
%subplot(142),imshow(J);
subplot(132),imshow(K1);
subplot(133),imshow(K2);
%中值滤波是取中间值,排序滤波是排完需取最小或最大
例6用拉普拉斯算子对图像做锐化
%用拉普拉斯算子对图像做锐化
clear all;
close all;
clc;
%通过拉普拉斯算子对图像进行锐化
I=imread('cameraman.tif');
I=im2double(I);
%J=imnoise(I,'salt & pepper',0.02); %添加椒盐噪声,噪声密度为0.02
%C=conv2(___,shape)根据shape返回卷积的子区.例如,C=conv2(A,B,'same')返回卷积中
%大小与A相同的中心部分。
h=[0,1,0;1,-1,1;0,1,0]; %设置拉普拉斯算子,求的是边界
Q=conv2(I,h,'same'); %卷积进行优化滤波,same表示返回与I同样大小的卷积中心部分
K=I+Q; %原图加上边界,表示对边界的增强
figure;
subplot(131),imshow(I);
subplot(132),imshow(Q);
subplot(133),imshow(K);
转载:https://blog.csdn.net/LIWEI940638093/article/details/105870674
查看评论