概念
图像是平滑、锐化都是利用掩模操作完成,通过掩模操作实现领域计算。掩模运算的数学含义是卷积(互相关)运算,掩模子图像中的值是系数值而不是灰度值。
空间滤波器:由一个领域对领域包围的图像执行预定义的像素操作。
要建立新的存储空间存储滤波后的像素值,不改变原图像,否则会影响后面的滤波结果。
对于边界的像素值无法进行滤波,要考虑边界像素值的处理。
相关:滤波器模板移过图像并计算每个位置乘积之和的处理。
卷积:机理相似,但滤波器先要旋转180度。
实际上卷积用得很少,基本都是相关的应用,所谓卷积**很多只是借用了这个名字。不需要区分卷积和相关的差别。
平滑空间滤波器
用于模糊处理和降低噪声。
平滑线性滤波器(盒式滤波器)
统计排序滤波器(中值滤波器)
主要用于处理椒盐噪声,窗口尺寸和形状对效果影响较大,如果图像中有比较尖锐的细节,不适合用中值滤波器。
低通高斯滤波器
盒式滤波器往往会沿着垂直方向模糊图像,对于更精细的图像,选择高斯核,圆对称,各向同性。
由均值和标准差完全定义一个高斯函数,大于六个标准差的时候没有意义,数据基本已经集中到3个标准差以内了。
1.建立n*n模板,确立标准差(标准差越大,平滑效果明显), 以模板的中心位置为坐标原点代入高斯函数取样。注意高斯函数是高度对称的,只要计算部分的点即可。
2.取整,归一化处理。
clear;
image=imread("sample.jpeg");
image=im2double(image);
image_pol=imnoise(image,'gaussian',0.3); %加噪声
image_new=gauss_bulr(5,7,image_pol);
%matlab函数
w=fspecial('gaussian',[5,5],7);
image_matlab=imfilter(image_pol,w,'replicate');
%%
%图像显示
figure(1);
subplot(221);
imshow(image);
title('原始图像')
subplot(222);
imshow(image_pol);
title('污染图像0.3')
subplot(223);
imshow(image_new);
title('手写函数图像')
subplot(224);
imshow(image_matlab);
title('matlab自带函数图像')
%%
%size应该为3|5|7
function f=gauss_bulr(fsize,var,image)
conv=zeros(fsize,fsize);
center=(fsize-1)/2+1;
for i=1:fsize %高斯核
for j=1:fsize
temp=exp(-((i-center)^2+(j-center)^2)/(2*var^2));
temp=temp/2*3.14*var^2;
conv(i,j)=temp;
end
end
c=sum(conv,'all');
conv=conv/c;%归一化
%边缘处理,方案一:保留原值不处理,当窗口比较小的时候3.5.效果还行,当窗口大7会有毛边
%方案二:扩充图像形成一个中心图像,根据N增加边缘行和列,使得原图像中所有的点都可以处于算子的中心
%%
%方案一:
[rows,cols]=size(image);
image_new=image;
for m=center:rows-center
for n=center:cols-center
I1=image(m-center+1:m+center-1,n-center+1:n+center-1);
I2=I1.*conv;
image_new(m,n)=sum(I2,'all');
end
end
f=image_new;
end