算法思想:
最大值滤波器将滤波器获得的值中找到最大值,将最大值存到中心元素位置对应的新矩阵中。
最小值滤波是将滤波器获得的值中找到最小值,将最小值存到中心元素位置对应的新矩阵中。
最大值滤波器
function maxf = maxfil(I,n)
%I为原图,n为滤波器的大小,最大值滤波器
[r,c]=size(I); %图像的行和列
dI=double(I);
dt=n-1; %边缘需要扩充的距离
f=zeros(r+dt,c+dt); %对边缘进行0值处理,根据滤波器的大小把图像扩大
fi=zeros(r+dt,c+dt);
for i=1:r
for j=1:c
f((i+dt/2),(j+dt/2))=dI(i,j);
end
end
for i=1+dt/2:r+dt/2 %对中心元素进行均质化
for j=1+dt/2:c+dt/2
w=f((i-dt/2):(i+dt/2),(j-dt/2):(j+dt/2)); %滤波器选中元素
mw=max(w(:)); %求最大值
fi(i,j)=mw; %将与模板运算后的各元素的均值赋给模板中心位置的元素
end
end
maxf=zeros(r,c); %裁剪
for i=1:r
for j=1:c
maxf(i,j)=fi(i+dt/2,j+dt/2); %将扩大的图像转变为原图大小
end
end
End
最小值滤波器
function minf = minfil(I,n)
%I为原图,n为滤波器的大小,最小值滤波器
[r,c]=size(I); %图像的行和列
dI=double(I);
dt=n-1; %边缘需要扩充的距离
f=zeros(r+dt,c+dt); %对边缘进行0值处理,根据滤波器的大小把图像扩大
fi=zeros(r+dt,c+dt);
for i=1:r
for j=1:c
f((i+dt/2),(j+dt/2))=dI(i,j);
end
end
for i=1+dt/2:r+dt/2 %对中心元素进行均质化
for j=1+dt/2:c+dt/2
w=f((i-dt/2):(i+dt/2),(j-dt/2):(j+dt/2)); %滤波器选中元素
miw=min(w(:)); %求最小值
fi(i,j)=miw; %将与模板运算后的各元素的均值赋给模板中心位置的元素
end
end
minf=zeros(r,c); %裁剪
for i=1:r
for j=1:c
minf(i,j)=fi(i+dt/2,j+dt/2); %将扩大的图像转变为原图大小
end
end
End
最大值滤波器对亮点比较敏感,但对边缘会移走部分的黑色像素,滤波器的尺寸越大,白色条带将变得越宽,当滤波器尺寸大于两个白色条带之间的间距17像素时,间距的黑色条带会被过滤掉。最大值滤波器可以有效去除椒噪声。
最小值滤波器对暗点比较敏感,但会从亮色物体边缘移走一些白色像素,滤波器尺寸越大,白色条带越细,当滤波器尺寸大于白色条带宽度7 时白色条带将会过滤掉。最小值滤波器适合于过滤盐噪声。