使用中值滤波对图像处理_均值滤波、中值滤波、高斯滤波 图像处理函数的适用图像 - CSDN
  • 基于MATLAB图像处理中值滤波、均值滤波以及高斯滤波的实现与对比 1.背景知识 中值滤波法是一种非线性平滑技术,它将每一像素点的灰度值设置为该点某邻域窗口内的所有像素点灰度值的中值. 中值滤波是基于排序...

    基于MATLAB图像处理的中值滤波、均值滤波以及高斯滤波的实现与对比

    1.  背景知识

    中值滤波法是一种非线性平滑技术,它将每一像素点的灰度值设置为该点某邻域窗口内的所有像素点灰度值的中值.

    中值滤波是基于排序统计理论的一种能有效抑制噪声的非线性信号处理技术,中值滤波的基本原理是把数字图像或数字序列中一点的值用该点的一个邻域中各点值的中值代替,让周围的像素值接近的真实值,从而消除孤立的噪声点。

    方法是用某种结构的二维滑动模板,将板内像素按照像素值的大小进行排序,生成单调上升(或下降)的为二维数据序列。二维中值滤波输出为g(x,y)=med{f(x-k,y-l),(k,l∈W)} ,其中,f(x,y),g(x,y)分别为原始图像和处理后图像。W为二维模板,通常为3*3,5*5区域,也可以是不同的的形状,如线状,圆形,十字形,圆环形等。

             
     

    2

    4

    8

     
     

    1

    3

    9

     
     

    5

    7

    6

     
             

    g(x,y)=med{f(x-k,y-l),(k,l∈W)}

    g =med[2,4,8;1,3,9;5,7,6] = 5

    中值滤波后的结果:

             
             
       

    5

       
             
             

    均值滤波是典型的线性滤波算法,它是指在图像上对目标像素给一个模板,该模板包括了其周围的临近像素(以目标像素为中心的周围8个像素,构成一个滤波模板,即去掉目标像素本身),再用模板中的全体像素的平均值来代替原来像素值。

    均值滤波也称为线性滤波,其采用的主要方法为邻域平均法。线性滤波的基本原理是用均值代替原图像中的各个像素值,即对待处理的当前像素点(x,y),选择一个模板,该模板由其近邻的若干像素组成,求模板中所有像素的均值,再把该均值赋予当前像素点(x,y),作为处理后图像在该点上的灰度g(x,y),即g(x,y)=1/m ∑f(x,y) m为该模板中包含当前像素在内的像素总个数。

    均值滤波本身存在着固有的缺陷,即它不能很好地保护图像细节,在图像去噪的同时也破坏了图像的细节部分,从而使图像变得模糊,不能很好地去除噪声点。

             
     

    2

    4

    8

     
     

    1

    3

    9

     
     

    5

    7

    6

     
             

    gxy=1/m ∑fxy

    g = (1/8)*(2+4+8+1+9+5+7+6)= 5

    均值滤波后的结果

             
             
       

    5

       
             
             

     

    高斯滤波是一种线性平滑滤波,适用于消除高斯噪声,广泛应用于图像处理的减噪过程。通俗的讲,高斯滤波就是对整幅图像进行加权平均的过程,每一个像素点的值,都由其本身和邻域内的其他像素值经过加权平均后得到。高斯滤波的具体操作是:用一个模板(或称卷积、掩模)扫描图像中的每一个像素,用模板确定的邻域内像素的加权平均灰度值去替代模板中心像素点的值。

    2.  MATLAB实现

    源码:

    %%-------------------------------------------------------------------------------------------

    %% 2018/01/03

    %% lee

    %% 137194782@qq.com

    %% 微信公众号:FPGA开源工作室

    %%--------------------------------------------------------------------------------------------

    clear all;

    clc;

    M = imread('timg.jpg');         %读取MATLAB中的名为timg的图像   

    figure,imshow(M);                %显示原始图像

    title('original');

    gray = rgb2gray(M);

    figure,imshow(gray);                         %显示灰度图像

    title('gray');

    P1 = imnoise(gray,'gaussian',0.02);     %加入高斯躁声 

    figure,imshow(P1);                        %加入高斯躁声后显示图像

    title('gaussiannoise');

    P2 = imnoise(gray,'salt& pepper',0.02); %加入椒盐躁声

    figure,imshow(P2);                        %加入椒盐躁声后显示图像  

    title('salt& pepper noise');

    g = medfilt2(P1);                       %对高斯躁声中值滤波

    figure,imshow(g);

    title('medfiltergaussian');

    h = medfilt2(P2);                       %对椒盐躁声中值滤波

    figure,imshow(h);

    title('medfiltersalt & pepper noise');

    a=[1 1 1                               %对高斯躁声算术均值滤波

       1 11

       1 11];

    l=1/9*a;                          

    k = conv2(double(P1),double(l));                        

    figure,imshow(k,[]);

    title('arithmeticfiltergaussian');                                          

    d = conv2(double(P2),double(l));           %对椒盐躁声算术均值滤波              

    figure,imshow(d,[]);

    title('arithmeticfiltersalt & pepper noise');

    sigma=8;%标准差大小  

    window=double(uint8(3*sigma)*2+1);%窗口大小一半为3*sigma  

    H=fspecial('gaussian',window, sigma);%fspecial('gaussian',hsize, sigma)产生滤波模板   

    img_gauss=imfilter(P1,H,'replicate'); %为了不出现黑边,使用参数'replicate'(输入图像的外部边界通过复制内部边界的值来扩展)  

    figure, imshow(img_gauss);

    title('gaussianfilting gauss noise');

    img_salt=imfilter(P2,H,'replicate'); 

    figure, imshow(img_salt);

    title('gaussianfilting salt pepper noise');

     

    结果展示:

     

     

     

    原始图像

     

     

     

    灰度图像

     

     

     

    加入高斯噪声的灰度图像

     

     

     

    加入椒盐噪声的灰度图像

     

     

     

    经过中值滤波后的高斯噪声灰度图像

     

     

    经过中值滤波后的椒盐噪声灰度图像

     

     

    经过均值滤波的高斯噪声灰度图像

     

     

    经过均值滤波的椒盐噪声灰度图像

     

     

    经过高斯滤波的高斯噪声灰度图像

    经过高斯滤波的椒盐噪声的灰度图像

    结果分析:图像经过中值滤波后,高斯噪声没有被完全去除,椒盐噪声几乎被完全去除效果较好。经过均值滤波后不管是高斯噪声还是椒盐噪声大部分都没有被去除,只是稍微模糊化。经过高斯滤波后,高斯噪声和椒盐噪声几乎被很大程度的模糊化,原图好像被加上了一层蒙版。

     

    欢迎大家关注我的微信公众号FPGA开源工作室

    FPGA自习学院将不断更新和总结FPGA相关学习资料,书籍,实例工程和视频。

    欢迎大家加入FPGA自习学院,一起学习一起成长。

     

     

     

     

    展开全文
  • 中值滤波图像锐化

    2016-12-24 15:47:39
    本文主要包括以下内容 中值滤波及其改进算法 图像锐化, 包括梯度算子、拉普拉斯... 对于原图像中某点(i,j), 中值滤波以该点为中 心的邻域内的所有像素的统计排序中值作为(i, j) 点的响应. 中值不同于均值,

    本文主要包括以下内容

    • 中值滤波及其改进算法
    • 图像锐化, 包括梯度算子、拉普拉斯算子、高提升滤波和高斯-拉普拉斯变换
    • 本章的典型囊例分析
      • 对椒盐噪声的平滑效果比较
      • Laplacian与LoG算子的锐化效果比较

    中值滤波

    中值滤波本质上是一种统计排序滤波器. 对于原图像中某点(i,j), 中值滤波以该点为中
    心的邻域内的所有像素的统计排序中值作为(i, j) 点的响应.
    中值不同于均值, 是指排序队列中位于中间位置的元素的值,例如=采用3x3 中值滤披
    器, 某点。(i,j) 的8 个邻域的一系列像素值为: 12, 18, 18, 11, 23, 22, 13, 25, 118,
    统计排序结果为: 1l, 12, 13, 18, 18, 22, 23, 25, 118. 排在中间位置〈第5 位〉的18
    即作为(i, j)点中值滤波的响应g(i, j). 显然, 中值滤波并非线性滤披器.

    中值滤波对于某些类型的随机噪声具有非常理想的降噪能力, 对于线性平滑滤波而言,
    在处理像萦邻壤之内的噪声点时, 噪声的存在总会或多或少影响该点的像素值的计算(高斯
    平滑影响的程度与噪声点到中心点的距离成正比〉,但在中值滤被中噪声点则常常直接忽略掉的:而且与线性平滑滤波器相比, 中值滤波在降噪同时引起的模糊效应较低。中值滤波的一种典型应用是清除椒盐噪声.

    下面首先简单介绍一下常见的噪声模型,接着给出中值滤波的Matlab实现:

    Matlab提供了medfilt2函数实现中值滤波, 原型为:
    I2 = medfilt2(I1,[m,n])

    参数说明
    • I1是原因矩阵.
    • m和n是中值滤波处理的模板大小,默认3x3.

    输出结果
    输出I2是中值滤波后的图像矩阵.

    下面的程序分别给出了一幅受椒盐噪声污染的图像经过平均平滑、高斯平滑和中值撼泼
    的处理效果.

    I = imread('lena_salt.bmp');
    J = imnoise(I,'salt & pepper');
    w = [1,2,1;2,4,2;1,2,1]/16;
    J1 = imfilter(J,w,'corr','replicate');
    
    w = [1,1,1;1,1,1;1,1,1]/9;
    J2 = imfilter(J,w,'corr','replicate');
    
    J3 = medfilt2(J,[3,3]);
    figure;
    subplot(2,3,1);
    imshow(I),title('原图像');
    subplot(2,3,2);
    imshow(J),title('椒盐噪声');  
    subplot(2,3,4);
    imshow(J1),title('高斯平滑');
    subplot(2,3,5);
    imshow(J2),title('平均平滑');
    subplot(2,3,6);
    imshow(J3),title('中值平滑');

    如图从中可见线性平滑滤波在降噪的同时不可避免地造成了模糊,而中值滤波在有效抑制椒盐噪声的同时模糊效应明显低得多,因而对于椒盐噪声污染的图像,中值滤波要远远优于线性平滑滤波.

    一种改进的中值滤波策略
    中值滤波效果依赖于滤波窗口的大小, 太大会使边缘模糊, 太小了则去噪效果不佳。 因为噪声点和边缘点同样是灰度变化较为剧烈的像素, 普通中值滤波在改变噪声点灰度值时,会一定程度地改变边缘像素灰度值。但是噪声点几乎都是邻域像素的极值,而边缘往往不是,因此可以利用这个特性来限制中值滤波。

    具体的改进方法如下: 逐行扫描图像, 当处理每一个像素时, 判断该像素是否是滤披窗口覆盖下邻域像素的极大或者极小值。 如果是, 则采用正常的中值滤波处理该像素:如果不是, 则不予处理。 在实践中这种方法能够非常有效地去除突发噪声点, 尤其是椒盐噪声, 且几乎不影响边缘。
    由于算法可以根据局部邻域的具体情况而自行选择执行不同的操作, 因此改进的中值滤波也称为自适应中值滤波.

    自适应中值滤波对边缘进行了更好的保留。

    中值滤波的工作原理
    与线性平滑滤波考虑邻域中每个像素的作用不同,中值滤波在每个n×n邻域内都会忽略那些相对于邻域内大部分像素更亮或更睛,并且所占区域小于像素总数一半(n2/2的那些像素的影响,而实际上满足这样条件被忽略掉的像素往往就是噪声。

    注意:作为一种非线性滤波,中值滤波有可能会改变图像的性质,因而一般不适用于像军事图像处理、医学图像处理等领域.

    图像锐化

    图像锐化的目的是使模糊的图像变得更加清晰. 其应用广泛, 包括从医学成像到工业检
    测和军事系统的制导等。

    图像锐化主要用于增强图像的灰度跳变部分,这一点与图像平滑对灰度跳变的抑制正好 相反,事实上从平滑与锐化的两种运算算子上也能说明这一点,线性平滑都是基于对图像邻域的加权求和或积分运算,而锐化则通过其逆运算导数(梯度〉或有限差分来实现。

    在讨论平滑的时候曾提到噪声和边缘都会使图像产生灰度跳变,为了在平滑时能够将噪声和边缘区别对待,5.3.5节中给出了一种自适应滤波的解决方案。同样,在锐化处理中如何区分噪声和边缘仍然是我们面临的一个课题,即在平滑处理中平滑的对象是噪声而不涉及边缘,在锐化中锐化的对象是边缘而不涉及噪声。

    基于一阶导数的图像增强一一梯度算子

    回忆一下高等数学中梯度的定义,对于连续2 维函数.f(x, y),其在点(x,y)处的梯度
    是下面的二维列向量:


    其中,w1对接近正45 度边缘有较强响应: w2 对接近负45 度边缘有较强响应.

    基于Robert交叉梯度的图像锐化
    通过前面学习的滤波知识可知,只要分别以w1和w2为模板,对原图像进行滤波就可得到GI和G2.而根据公式5-9,最终的Robert交叉梯度图像(b)为:G = |G1| + |G2|.
    在进行锐化滤波之前,我们要将图像类型从uint8转换为double.因为锐化模板计算时常常使输出产生负值, 如果采用无符号的 uint8 型, 则负位会被截断.

    在调用函数 imfilter 时,还要注意不要使用默认的填充方式. 因为 Matlab 默认会在滤波时进行 “0” 填充,这会导致图像在边界处产生一个人为的灰度跳变,从而在梯度图像中产生高响应, 而这些人为高响应值的存在将导致图像中真正的边缘和其他我们关心的细节的响应在输出梯度图像中被压缩在一个很窄的灰度范围, 同时也影响显示的效果. 我们这里采用了 ’replicate’的重复填充方式, 也可采用’symmetric’的对称填充方式.

    程序实现如下:

    I = imread('bacteria.BMP');
    temp = I;
    I = double(I);
    w1 = [-1 0; 0 1];
    w2 = [0 -1;1 0];
    
    G1 = imfilter(I,w1,'corr','replicate');
    G2 = imfilter(I,w2,'corr','replicate');
    G = abs(G1)+abs(G2);
    figure;
    subplot(2,2,1);
    imshow(temp),title('原图像');
    subplot(2,2,2);
    imshow(abs(G1),[]),title('w1滤波'); 
    subplot(2,2,3);
    imshow(abs(G2),[]),title('w2滤波'); 
    subplot(2,2,4);
    imshow(G,[]),title('Robert梯度'); 

    如图可知,w1模板对正45度左右显示较好,w2模板对-45度左右显示较好。
    注意,为便于观察效果,做了显示时的重新标定, 即将图像的灰度范围线性变换到 0-255 之内, 并使图像的最小灰度值为 0,最大灰度值为255.
    imshow(K,[])显示K,并将K的最大值和最小值分别作为纯白(255)和纯黑(0),中间的K值映射为0到255之间的标准灰度值。

    Sobel梯度

    由于滤波时我们总是喜欢奇数尺寸的模板, 因而一种计算Sobel 梯度的Sobel 模板更加常用:

    下面的Matlab 程序计算了一幅图像的竖直和水平梯度, 它们的和可以作为完整的Sobel梯度。

    I = imread('bacteria.BMP');
    w1 = fspecial('sobel');
    w2 = w1';
    G1 = imfilter(I,w1);
    G2 = imfilter(I,w2);
    G = abs(G1)+abs(G2);
    figure;
    subplot(2,2,1);
    imshow(I),title('原图像');
    subplot(2,2,2);
    imshow(G1,[]),title('水平sobel');  
    subplot(2,2,3);
    imshow(G2,[]),title('竖直sobel');
    subplot(2,2,4);
    imshow(G,[]),title('sobel');

    基于二阶微分的图像增强拉普拉斯算子

    下面介绍一种对于图像锐化而言应用更为广泛的基于二阶微分的拉普拉斯(Laplacian)算子.

    分析拉普拉斯模板的结构,可知这种模板对于90度的旋转是各向同性的。所谓对于某角
    度各向同性是指把原图像旋转该角度后再进行滤波与先对原图像滤波再旋转该角度的结果相
    同。这说明拉普拉斯算子对于接近水平和接近坚直方向的边缘都有很好的增强,从而也就避
    免我们在使用梯度算子时要进行两次滤波的麻烦。更进一步,我们还可以得到如下对于45°
    旋转各向同性的滤波器:

    分别使用上述3种拉普拉斯滤波的Matlab滤波程序如下

    I = imread('bacteria.BMP');
    temp = I;
    I = double(I);
    w1 = [0 -1 0;-1 4 -1;0 -1 0];
    L1 = imfilter(I,w1,'corr','replicate');
    w2 = [-1 -1 -1;-1 8 -1 ;-1 -1 -1];
    L2 = imfilter(I,w2,'corr','replicate');
    w3 = [1 4 1;4 -20 4;1 4 1];
    L3 = imfilter(I,w3,'corr','replicate');
    figure;
    subplot(2,2,1);
    imshow(temp),title('原图像');
    subplot(2,2,2);
    imshow(abs(L1),[]);
    subplot(2,2,3);
    imshow(abs(L2),[]);
    subplot(2,2,4);
    imshow(abs(L3),[]);

    上述程序运行结果如图5.9 所示.对于细菌图像,拉普拉斯锐化效果与之前Robert 与
    Sobel梯度锐化明显不同的一点是输出图像中的双边缘。此外,我们还注意到拉普拉斯锐化似乎
    对一些离散点有较强的响应,当然由于噪声也是离散点,因此这个性质有时是我们所不希望的.

    基于一阶与二阶导数的锐化算子的比较

    设图5.10最上面部分的灰度剖面图对应于图像中的一条具有代表性的水平像素线,其中
    包括了灰度较缓变化的斜坡〈软边缘〉、孤立点〈很可能为噪声〉、细线〈细节〉, 以及灰度跳
    变的阶梯(硬边缘〉。简单起见, 只考虑图像中8个灰度级的情况. 图5.10 中给出了这条像
    素线中各个像素的灰度值, 由此计算出的一阶微分和二阶微分在图中的第三行和第四行中给
    出. 由于这里的像素线在图像中是水平分布的, 因此式5-9和式5-10可简化为一维的形式,
    即一维情况下的一阶微分:

    通过分析这个典型的灰度变化模型, 我们就可以很好地比较噪声点、细节以及边缘的一
    阶和二阶微分结果.
    首先注意到沿着整个斜坡(软边缘), 一阶微分都具有非0响应, 并且当这种斜坡的灰
    度过渡近似线时, 对应于变化率的一阶微分的响应为恒定值〈这里为-1):而二阶微分的非0
    响应则只出现在斜坡的起始和终点处, 在灰度变化率恒定的斜面上二阶微分值为0, 这就是
    图5.9中的拉普拉斯锐化图像细菌周围出现双边缘的原因. 由此得出结论, 对于图像中的软
    边缘, 一阶微分通常产生较粗的边缘, 而二阶微分则细得多.
    再来看孤立噪声点, 我们注意到二阶微分对噪声点的响应较一阶微分要强很多, 这也就
    是图5.9中的拉曾拉斯锐化图像中出现一些零星的高响应的原因, 当然二阶微分的这一性质
    是我们所不希望的.
    细线常常对应于图像中的细节, 二阶微分对细线的较强响应说明了二阶微分对于细节增
    强的优越性.
    最后, 一、二阶微分对灰度阶梯有着相同的响应, 只是在二阶微分中有一个从正到负的
    过攘, 这一性质将在第9.1在 “ 边缘检测与图像分割” 中用于边缘检测.

    我们将这些比较的结论总结如下:

    • 一阶导数通常会产生较宽的边缘.
    • 二阶导数对于阶跃性边缘中心产生零交叉,而对于屋顶状边缘(细线),二阶导数取极值.
    • 二阶导数对细节有较强的响应, 如细线和孤立噪声点

    对图像增强而言,基于二阶导数的算子应用更广泛,因为它对细节响应更强,增强效果也就更明显。而在本书第9章讨论边缘检测的时候,基于一阶导数的算子则会发挥更多的作用。尽管如此,一阶算子在图像增强中依然不可或缺,它们常常同二阶算子结合在一起古以达到更好的锐化增强效果。

    5.5节的最后我们提到了平滑滤波器又可以称为低通滤波器,相应的,上面介绍的几种锐化滤波器也可以称为高通滤波器,得名的具体原因将在下一章“频域滤波”中说明.

    高提升滤波及其实现

    无论是基于一阶微分的Robert、Sobel模板还是基于二阶微分的拉普拉斯模板,其中各系数和均为0。这说明算子在灰度恒定区域的响应为0, 即在锐化处理后的图像中,原图像的平滑区域近乎于黑色,而原图中所有的边缘、细节和灰度跳变点都作为黑背景中的高灰度部分突出显示.
    在基于锐化的图像增强中,我们常常希望在增强边缘和细节的同时仍然保留原图像中的信息,而不是将平滑区域的灰度信息丢失。因此可以把原图像加上锐化后的图像以得到比较理想的结果。


    形如式5-14这样的滤波处理就称为高提升滤波.
    一般来说,权重系数A应为一个大于等于1的实数,A越大原图像所占比重越大,锐化效果越不明显。相对于A=1的情况,当A分别
    为1.8和3时,图中细节得到了有效增强,对比度也有了一定的改善。

    实现
    高提升谴披可由以下3个步骤完成:
    (1)图像锐化。
    (2)原图像与锐化图像的按比例混合.
    (3)混合后的灰度调整〈归一化至[0,255]。
    在实现中应注意, 高提升施加才锐化图像的响应是正还是负非常敏感。以拉普拉斯模板为例,当模板中心系数为正时,对于邻域中的相对高灰度值像素,其滤波响应为正值,叠加 到原图像中将使输出比原来更亮:而对于邻壤中的相对暗点,其滤波响应显然为负值,叠加到原图像中则使该点在输出图像中更暗。当模板中心系数为负时,由于原图像与滤波响应图 像之间变成了相减的关系,高提升的效果与正中心系数的模板完全相同.这样就达到了亮者愈亮,暗者愈暗的增强效果。

    高斯·拉普拉斯交换

    锐化在增强边缘和细节的同时往往也增强了噪声, 因此如何区分开噪声和边缘是锐化过程中要解决的一个核心问题。
    基于二阶微分的拉普拉斯算子对于细节〈细线和孤立点〉能产生更强的相应, 并且各
    向同性, 因此在图像增强中较一阶的梯度算子更受到我们的青睐。然而, 它对于噪声点的
    响应也更强, 我们看到图像baby_noise.bmp经拉普拉斯锐化后噪声更明显。
    为了在取得更好锐化效果的同时把噪声干扰降到最低, 可以先对带有噪声的原始图像进图像进行平滑滤波, 再进行锐化增强边缘和细节. 本着“强强联合” 的原则, 将在平滑领域工作得更好的高斯平滑算子同镜化界表现突出的拉普拉斯锐化结合起来, 得到高斯一拉普拉斯算子(Marr和Hildh也提出)。

    Laplacian与LoG算子的锐化效果比较

    I = imread('baby.bmp');
    Id = double(I);
    h_lap = [ -1 -1 -1;-1 8 -1;-1 -1 -1];
    I_lap = imfilter(Id,h_lap,'corr','replicate');
    
    h_log = fspecial('log',5,0.5);
    I_log = imfilter(Id,h_log,'corr','replicate');
    h_log2 = fspecial('log',5,2);
    I_log2 = imfilter(Id,h_log2,'corr','replicate');
    
    figure;
    subplot(2,2,1);
    imshow(I),title('原图');
    subplot(2,2,2);
    imshow(uint8(abs(I_lap)),[]),title('laplacian');
    
    subplot(2,2,3);
    imshow(uint8(abs(I_log)),[]),title('LoG');
    subplot(2,2,4);
    imshow(uint8(abs(I_log2)),[]),title('LoG2');

    上述程序的运行结果如图所示,分别给出了对于图像baby.bmp,当σ=0.5和σ=2时的LoG增强效果。与laplacian相比, 噪声得到了有效的抑制,且σ越小细节增强效果更好, σ 越大则平滑效果越好.

    展开全文
  • 图像滤波:即在尽量保留图像细节特征的条件下目标图像的噪声进行抑制,是图像预处理中不可缺少的操作,其处理效果的好坏将直接影响到后续图像处理和分析的有效性和可靠性。 消除图像中的噪声...

    1.什么是滤波?

    图像滤波:即在尽量保留图像细节特征的条件下对目标图像的噪声进行抑制,是图像预处理中不可缺少的操作,其处理效果的好坏将直接影响到后续图像处理和分析的有效性和可靠性。

    消除图像中的噪声成分叫作图像的平滑化或滤波操作。信号或图像的能量大部分集中在幅度谱的低频和中频段是很常见的,而在较高频段,感兴趣的信息经常被噪声淹没。因此一个能降低高频成分幅度的滤波器就能够减弱噪声的影响。

    2.平滑处理的目的

    图像滤波的目的有两个:

    一是抽出对象的特征作为图像识别的特征模式;
    另一个是为适应图像处理的要求,消除图像数字化时所混入的噪声。

    而对滤波处理的要求也有两条:

    一是不能损坏图像的轮廓及边缘等重要信息;
    二是使图像清晰视觉效果好。

    3.平滑处理的应用

    关于滤波器,一种形象的比喻法是:
    我们可以把滤波器想象成一个包含加权系数的窗口,当使用这个滤波器平滑处理图像时,就把这个窗口放到图像之上,透过这个窗口来看我们得到的图像。

    举一个滤波在我们生活中的应用:
    美颜的磨皮功能。如果将我们脸上坑坑洼洼比作是噪声的话,那么滤波算法就是来取出这些噪声,使我们自拍的皮肤看起来很光滑。

    4.中值滤波的处理方法

    中值滤波是一种典型的非线性滤波,是基于排序统计理论的一种能够有效抑制噪声的非线性信号处理技术,基本思想是用像素点邻域灰度值的中值来代替该像素点的灰度值,让周围的像素值接近真实的值从而消除孤立的噪声点。该方法在取出脉冲噪声、椒盐噪声的同时能保留图像的边缘细节。这些优良特性是线性滤波所不具备的。

    中值滤波首先也得生成一个滤波模板,将该模板内的各像素值进行排序,生成单调上升或单调下降的二维数据序列,二维中值滤波输出为

    g(x, y)=medf{f(x-k, y-1),(k, l∈w)}

    	其中f(x,y)和g(x,y)分别是原图像和处理后图像, w为输入的二维模板,能够在整幅图像上滑动,通常尺寸为3*3或5*5区域,也可以是不同的形状如线状、圆形、十字形、圆环形等。通过从图像中的二维模板取出奇数个数据进行排序,用排序后的中值取代要处理的数据即可。 
    

    5.中值滤波的示意图

    首先,我们复习中值。在一连串数字{1,4,6,8,9}中,数字6就是这串数字的中值。由此我们可以应用到图像处理中。依然我们在图像中去3*3的矩阵,里面有9个像素点,我们将9个像素进行排序,最后将这个矩阵的中心点赋值为这九个像素的中值。

    引用

    中值滤波示意图

    椒盐噪声

    椒盐噪声(salt-and-pepper noise)是由图像传感器,传输信道,解码处理等产生的黑白相间的亮暗点噪声。
      所谓椒盐,椒就是黑,盐就是白,椒盐噪声就是在图像上随机出现黑色白色的像素。椒盐噪声是一种因为信号脉冲强度引起的噪声,产生该噪声的算法也比较简单。
      椒盐噪声往往由图像切割引起,去除脉冲干扰及椒盐噪声最常用的算法是中值滤波。大量的实验研究发现,由摄像机拍摄得到的图像受离散的脉冲、椒盐噪声和零均值的高斯噪声的影响较严重。噪声给图像处理带来很多困难,对图像分割、特征提取、图像识别等具有直接影响。因此,实时采集的图像需进行滤波处理。消除图像中的噪声成份叫做图像的平滑化或滤波操作。滤波的目的有两个:一是抽出对象的特征作为图像识别的特征模式;二是为适应计算机处理的要求,消除图像数字化时所混入的噪声。对滤波处理的要求有两条:一是不能损坏图像轮廓及边缘等重要信息;二是使图像清晰,视觉效果好。

    我们使用信噪比(Signal NoiseRate)衡量图像噪声,图象的信噪比应该等于信号与噪声的功率谱之比,但通常功率谱难以计算,有一种方法可以近似估计图象信噪比,即信号与噪声的方差之比(其实在均值为零的情况下,功率就是方差)。首先计算图象所有像素的局部方差,将局部方差的最大值认为是信号方差,最小值是噪声方差,求出它们的比值,再转成dB数,最后用经验公式修正。

    6.椒盐处理和中值滤波的效果展示

    在这里插入图片描述

    7.代码(面向过程)

    #%matplotlib inline
    from matplotlib import pyplot as plt
    import cv2
    import numpy as np
    from copy import deepcopy
    
    
    filename = input("请输入图像名称:")
    winname = "figure"
    img = cv2.imread(filename)
    
    def add_salt_noise(img, snr=0.5):
        # 指定信噪比
        SNR = snr
        # 获取总共像素个数
        size = img.size
        print(size)
        # 因为信噪比是 SNR ,所以噪声占据百分之10,所以需要对这百分之10加噪声
        noiseSize = int(size * (1 - SNR))
        # 对这些点加噪声
        for k in range(0, noiseSize):
            # 随机获取 某个点
            xi = int(np.random.uniform(0, img.shape[1]))
            xj = int(np.random.uniform(0, img.shape[0]))
            # 增加噪声
            if img.ndim == 2:
                img[xj, xi] = 255
            elif img.ndim == 3:
                img[xj, xi] = 0
        return img
    
    img_demo = deepcopy(img)
    snr = float(input("请输入一个信噪比(小数表示):"))
    img_salt = add_salt_noise(img_demo, snr)
    img_medianblur = cv2.medianBlur(img, 11)
    
    img_all = np.hstack([
        img, img_salt, img_medianblur
    ])
    
    plt.figure(figsize=(20,10))
    plt.imshow(img_all[:,:,::-1])
    plt.show()
    
    

    8.程序演示(面向对象)

    用tkinter 做的界面化处理操作

    面向对象制作的界面程序处理中值滤波

    完整代码(码云):码云分享
    完整代码(github):github分享

    觉得不错的朋友,可以与我交流关注,以及去码云和github点星,真的感谢!~

    有问题可以联系

    展开全文
  • 一. 中值滤波: 中值滤波器是一种可以使图像平滑的滤波器。... python实现中值滤波和均值滤波,并用两种滤波器受到椒盐噪声污染的图像进行去噪 import cv2 import numpy as np # Median fil...

    一. 中值滤波:

        中值滤波器是一种可以使图像平滑的滤波器。它使用滤波器范围内的像素的中值去代表该范围内所有的像素。中值滤波是消除图像噪声最常见的手段之一,特别是消除椒盐噪声,中值滤波的效果要比均值滤波更好。


    二. python实现中值滤波和均值滤波,并用两种滤波器对受到椒盐噪声污染的图像进行去噪

    import cv2
    
    import numpy as np
    
    # Median filter
    
    def median_filter(img, K_size=3):
    
        H, W, C = img.shape
    
        ## Zero padding
    
        pad = K_size // 2
    
        out = np.zeros((H + pad*2, W + pad*2, C), dtype=np.float)
    
        out[pad:pad+H, pad:pad+W] = img.copy().astype(np.float)
    
        tmp = out.copy()
    
        # filtering
    
        for y in range(H):
    
            for x in range(W):
    
                for c in range(C):
    
                    out[pad+y, pad+x, c] = np.median(tmp[y:y+K_size, x:x+K_size, c])
    
        out = out[pad:pad+H, pad:pad+W].astype(np.uint8)
    
        return out
    
    # Average filter
    
    def average_filter(img, G=3):
    
        out = img.copy()
    
        H, W, C = img.shape
    
        Nh = int(H / G)
    
        Nw = int(W / G)
    
        for y in range(Nh):
    
            for x in range(Nw):
    
                for c in range(C):
    
                    out[G*y:G*(y+1), G*x:G*(x+1), c] = np.mean(out[G*y:G*(y+1), G*x:G*(x+1), c]).astype(np.int)
    
    
    
        return out
    
    # Read image
    
    img = cv2.imread("../paojie_sp.jpg")
    
    # Median Filter and Average Filter
    
    out1 = median_filter(img, K_size=3)
    
    out2 = average_filter(img,G=3)
    
    # Save result
    
    cv2.imwrite("out1.jpg", out1)
    
    cv2.imwrite("out2.jpg", out2)
    
    cv2.waitKey(0)
    
    cv2.destroyAllWindows()
    
    

    三. 实验结果

              

                        受到椒盐噪声污染的图像 ↑

              

                        中值滤波后的图像 ↑

              

                        均值滤波后的图像 ↑

            可以明显看出,对于受到椒盐噪声污染的图像,中值滤波往往比均值滤波的去噪效果要好!


    四. 参考内容:

            https://www.cnblogs.com/wojianxin/p/12500348.html

            https://www.jianshu.com/p/53b4a8b15c28

    展开全文
  • 中值滤波matlab

    2016-04-07 09:17:00
    摘 要 中值滤波技术是一种在去除噪声的同时能较好保护图像边缘细节的非线性技术,在图像增强和恢复等领域中得到了广泛的应用...中值滤波图像处理,MATLAB 1. 引言 数字图像是建立在人眼的感光特性和大
  • 原理:使用中值滤波对图像进行处理是选定一部分区域(一般3X3,5X5)像素灰度值求取其中值,用求得的中值代替区域内的像素灰度值,以此来达到平滑滤波的效果,因为我们要求中值,所以在选定区域范围是需要注意选择...
  • 图像滤波大多数用于图像的模糊处理和减小噪声(个人理解)。常见的滤波有:均值滤波,中值滤波,... 一副图像上的某个点进行中值滤波处理,先将掩模内欲求的像素及其邻域的像素值排序,确定出中值,然后将这个中值赋
  • 均值滤波和中值滤波

    2018-02-05 20:19:58
    均值滤波及中值滤波的区别 均值滤波和和中值滤波都可以起到平滑图像,虑去噪声的功能。均值滤波采用线性的方法,平均整个窗口范围内的像素值,均值滤波本身存在着固有的缺陷,即它不能很好地保护图像细节,在...
  • 中值滤波是基于排序统计理论的一种能有效抑制噪声的非线性信号处理技术,中值滤波的基本原理是把数字图像或数字序列中一点的值用该点的一个邻域中各点值的中值代替,让周围的像素值接近的真实值,从而消除孤立的噪声...
  • 中值滤波是基于排序统计理论的一种能有效抑制噪声的非线性信号处理技术,中值滤波的基本原理是把数字图像或数字序列中一点的值用该点的一个邻域中各点值的中值代替,让周围的像素值接近的真实值,从而消除孤立的...
  • 中值滤波在一维数据处理中的应用   滤波操作是单片机接受数据完之后的常用操作之一,中值滤波是用来处理椒盐噪声的常用操作。...  中值滤波是一种常用的图像处理算法,但它也可以用在一维数据...
  • 转自:openCV之中值滤波&均值滤波(及代码实现):https://blog.csdn.net/weixin_37720172/article/details/72627543 ...图像滤波,即在尽量保留图像细节特征的条件下目标图像的噪声进行抑...
  • 中值滤波一个滑动窗口内的诸像素灰度值排序,用其中值代替窗口中心象素的原来灰度值,它是一种非线性的图像平滑法,它脉冲干扰级椒盐噪声的抑制效果好,在抑制随机噪声的同时能有效保护边缘少受模糊。...
  • 中值滤波更接近于灰度图像的腐蚀和膨胀,是在一定区域内比较大小,找出中值,也就是排序后中间那个数,也就是中学的中位数,平均数用于均值滤波,中位数用于中值滤波,要是专家就可以写本书:统计学在图像处理中的二...
  • 浅谈中值滤波

    2020-05-22 12:55:03
    1.中值滤波概念 2.中值滤波模板选择 2.1 一维数列中值滤波 2.2 二维数列中值滤波 3.中值滤波类型 4.中值滤波主要特性 5.附加 1.中值滤波概念 中值滤波法是一种非线性平滑技术,它将每一象素点的灰度值设置...
  • 自己编写的中值滤波算法和库函数调用的中值滤波算法 psnr值一样,因此不必多虑,放心调用. 以下文件: 1:自己编写的中值滤波 2:库函数中值滤 3:极值中值算法:中心像素等于窗口最大值或者最小值,即该点为噪声...
  • 对于原图像中某点(i,j),中值滤波以该点为中心的邻域内的所有像素的统计排序中值作为(i,j)点的响应。   中值不同于均值,是指排序队列中位于中间位置的元素的值,例如,采用3x3中值滤波器,某点(i,j)的8...
  • 中值滤波 中值滤波的原理: 中值滤波,其原理在于使用卷积核内的中值来代替中心点的值。例如,当一个点值为255时,而周围其他点全都低于120,这时候它就是一个明显的噪点。使用中值滤波时,就会用其他的点代替该点...
  • 常规的中值滤波在噪声密度不是很大的情况下(噪声出现的概率小于0.2时),性能很好,但是当概率较大时,常规的中值滤波处理完之后仍然存在噪声并且丢失了细节。自适应中值滤波器在进行滤波处理时,会根据某些条件来...
1 2 3 4 5 ... 20
收藏数 8,229
精华内容 3,291
关键字:

使用中值滤波对图像处理