matlab 中值滤波_【图像处理】自适应中值滤波

中值滤波器(Median Filter)

中值滤波的思想就是比较一定领域内的像素值的大小,取出其中值作为这个领域的中心像素新的值。假设对一定领域内的所有像素从小到大进行排序,如果存在孤立的噪声点,比如椒盐噪声(椒噪声——较小的灰度值,呈现的效果是小黑点;盐噪声——较大的灰度值,呈现的效果是小白点),那么从小到大排序的这个数组中,那些孤立的噪声一定会分布在两边(要么很小,要么很大),这样子取出的中值点可以很好地保留像素信息,而滤除了噪声点的影响。中值滤波器受滤波窗口大小影响较大,用于消除噪声和保护图像细节,两者会存在冲突。如果窗口较小,则能较好地保护图像中的一些细节信息,但对噪声的过滤效果就会打折扣;反之,如果窗口尺寸较大则会有较好的噪声过滤效果,但也会对图像造成一定的模糊效果,从而丢失一部分细节信息。另外,如果在滤波窗口内的噪声点的个数大于整个窗口内像素的个数,则中值滤波就不能很好的过滤掉噪声。

自适应中值滤波器(Adaptive Median Filter)

在噪声密度不是很大的情况下(根据经验,噪声的出现的概率小于0.2),使用中值滤波的效果不错。但是当噪声出现的概率比较高时,原来的中值滤波算法就不是很有效了。只有增大滤波器窗口尺寸,尽管会使图像变得模糊。

使用自适应中值滤波器的目的就是,根据预设好的条件,动态地改变中值滤波器的窗口尺寸,以同时兼顾去噪声作用和保护细节的效果。

下面是自适应中值滤波器算法的详细描述:

预先定义好以下符号:

SxySxy:滤波器的作用区域,滤波器窗口所覆盖的区域,该区域中心点为图像中第y行第x列个像素点;

ZminZmin:SxySxy中最小的灰度值;

ZmaxZmax:SxySxy中最大的灰度值;

ZmedZmed:SxySxy中所有灰度值的中值;

ZxyZxy:表示图像中第y行第x列个像素点的灰度值;

SmaxSmax:SxySxy所允许的最大窗口尺寸;

自适应中值滤波器分为以下两个过程,A和B:

A:

1. A1 = ZmedZmed - ZminZmin

2. A2 = ZmedZmed - ZmaxZmax

3. 如果A1>0A1>0 且 A2<0A2<0,则跳转到B

4. 否则,增大窗口的尺寸

5. 如果增大后的尺寸≤≤SmaxSmax,则重复A

6. 否则,直接输出ZmedZmed

B:

1. B1 = ZxyZxy - ZminZmin

2. B2 = ZxyZxy - ZmaxZmax

3. 如果B1>0B1>0 且 B2<0B2<0,则输出ZxyZxy

4. 否则输出ZmedZmed

直观解释

在自适应中值滤波算法中,A步骤里面会先判断是否满足Zmin

接下来考虑跳转到B之后的情况:判断中心点的像素值是否是噪声点,判断条件为Zmin

%*******************************************%———自适应中值滤波法去除大密度椒盐噪声———%  主要思想%  判断当前像素是否为噪声点%   1) NO ->不处理%   2) YES->自适应中值滤波  %   3) 边缘处理%                             04/01/2018%******************************************close all;clc;clear allset(0,'defaultfigurecolor','w')%读取图像I=imread('rice.png');%变为灰度图% I=rgb2gray(I);%加椒盐噪声In=imnoise(I,'salt & pepper',0.7);%求图像最大最小值max=max(max(In));min=min(min(In));%创建一幅图像size=size(In);J=zeros(size);%自适应中值滤波for i=2:size(1)-1    for j=2:size(2)-1        if(In(i,j)In(i,j)>min)           J(i,j)=I(i,j);        else            for k=1              A=In(i-k:i+k,j-k:j+k);              B=median(median(A));                if(Bmin)                   J(i,j)=B;                   break;                end            end        end    endend%边缘处理%第一行for i=2:size(2)-1    a=round((In(1,i-1)+In(1,i)+In(1,i+1))/3);    J(1,i)=a;end%最后一行for i=2:size(2)-1    a=round((In(size(1),i-1)+In(size(1),i)+In(size(1),i+1))/3);    J(size(1),i)=a;end%第一列for i=2:size(1)-1    a=round((In(i-1,1)+In(i,1)+In(i+1,1))/3);    J(i,1)=a;end%最后一列for i=2:size(1)-1    a=round((In(i-1,size(2))+In(i,size(2))+In(i+1,size(2)))/3);    J(i,size(2))=a;end%左上角J(1,1)=round((J(1,2)+J(2,1))/2);%左下角J(size(1),1)=round((J(size(1),2)+J(size(1)-1,1))/2);%右上角J(1,size(2))=round((J(1,size(2)-1)+J(2,size(2)))/2);%右下角J(size(1),size(2))=round((J(size(1),size(2)-1)+J(size(1)-1,size(2)))/2);J=uint8(J);%figure,imshow(I);%用评价函数评价SMF处理结果K=medfilt2(In);snr_1=snr(I,K);%用评价函数评价本算法处理结果snr_2=snr(I,J);%显示处理结果subplot(121),imshow(In);subplot(122),imshow(J);

往期回顾>>>>>>

【模式识别】Matlab指纹识别【图像处理】LSB水印技术matlab自动识别银行卡号【基础教程】MATLAB导出高清晰图片无参考图像质量评价之基于多特征的增强图像质量评价

matlab 中值滤波_【图像处理】自适应中值滤波_第1张图片

你可能感兴趣的:(matlab,中值滤波,matlab中值滤波,matlab中值滤波函数,matlab改变图像尺寸,swing,窗口自适应大小)