前言

卷积:函数空间域的卷积的傅里叶变换是函数傅里叶变换的乘积。对应地,频率域的卷积与空间域的乘积存在对应关系。


给定频率域滤波器,可对其进行傅里叶逆变换得到对应的空域滤波器;滤波在频域更为直观,但空域适合使用更小的滤波模板以提高滤波速度。因为相同尺寸下,频域滤波器效率高于空域滤波器,故空域滤波需要一个更小尺寸的模板近似得到需要的滤波结果。

一、空域卷积

将模板在图像中逐像素移动,将卷积核的每个元素分别和图像矩阵对应位置元素相乘并将结果累加,累加和作为

模板中心对应像素点的卷积结果。通俗的讲,卷积就是对整幅图像进行加权平均的过程,每一个像素点的值,都

由其本身和邻域内的其他像素值经过加权平均后得到。

二、频域滤波

频率域是由傅里叶变换和频率变量 (u,v)定义的空间,频域滤波处理过程:先对图像进行傅里叶变换,转换至频率

域,在频域使用滤波函数进行滤波,最后将结果反变换至空间域。即:
(1)计算原始图像f(x,y)的DFT,得到F(u,v)。
(2)将频谱F(u,v)的零频点移动到频谱图的中心位置。
(3)计算滤波器函数H(u,v)与F(u,v)的乘积G(u,v)。
(4)将频谱G(u,v)的零频点移回到频谱图的左上角位置。
(5)计算第(4)步计算结果的傅里叶反变换g(x,y)。
(6)取g(x,y)的实部作为最终滤波后的结果图像。
按照该步骤,在MATLAB中很容易编程实现频域滤波。滤波能否取得理想结果的关键取决于频域滤波函数H(u,v),常常称之为滤波器,或滤波器传递函数。因为它在滤波中抑制或滤除了频谱中某些频率的分量,而保留其他一些频率不受影响。
在这里插入图片描述

三,高斯函数

公式:在这里插入图片描述


高斯函数的特殊性:高斯函数傅里叶变换仍是高斯函数,但标准差已经变化,频域标准差越大(高斯函数越宽),变换后空域标准差越小(高斯函数越窄)。

四,matlab代码

高斯函数空域卷积

首先,加载图片并添加高斯噪声

t=imread('E:\matlab DMP\lenaG.bmp');
[m,n,z]=size(t);
y1=0+10*randn(m,n);%二维高斯分布矩阵 0是均值 20是标准差
y2=0+20*randn(m,n);%二维高斯分布矩阵 0是均值 20是标准差
y1=uint8(y1);
y2=uint8(y2);
%加上噪声
t1=t+y1;
t2=t+y2;
figure;
subplot(2,2,1),imshow(t),title('原图');
subplot(2,2,3),imshow(t1),title('加入均值为0,标准差为10的高斯噪声后');
subplot(2,2,4),imshow(t2),title('加入均值为0,标准差为20的高斯噪声后');

在这里插入图片描述
然后,fspecial函数建立高斯核,与噪声图片卷积

在这里插入代码片
fi = fspecial('gaussian',[m,n],10);
x=1:m;
y=1:n;
[X,Y] = meshgrid(x,y);
figure 
mesh(X',Y',fi)
title('低通高斯滤波器')
xlabel('x')
ylabel('y')
zlabel('z')

K1=conv2(fi,t1,'same')/255;

K2=conv2(fspecial('gaussian',[m,n],20),t1,'same')/255;
K3=conv2(fspecial('gaussian',[m,n],30),t1,'same')/255;
K4=conv2(fspecial('gaussian',[m,n],5),t1,'same')/255;
K5=conv2(fspecial('gaussian',[m,n],3),t1,'same')/255;
K6=conv2(fspecial('gaussian',[m,n],1),t1,'same')/255;

figure;
subplot(3,3,1),imshow(t1),title('高斯噪声');
subplot(3,3,4),imshow(K1),title('高斯过滤,标准差10');
subplot(3,3,5),imshow(K2),title('高斯过滤,标准差20');
subplot(3,3,6),imshow(K3),title('高斯过滤,标准差30');
subplot(3,3,7),imshow(K4),title('高斯过滤,标准差5');
subplot(3,3,8),imshow(K5),title('高斯过滤,标准差3');
subplot(3,3,9),imshow(K6),title('高斯过滤,标准差1');

结果:在这里插入图片描述
如下图,标准差越大,过滤后的图片越模糊,当标准差为1时,噪声的过滤效果较好。
在这里插入图片描述

高斯函数频域卷积

F = fft2(t1)/(m*n);
Fc = fftshift(F);
 

H1 = fspecial('gaussian',[m,n],10  );
H2 = fspecial('gaussian',[m,n],20  );
H3 = fspecial('gaussian',[m,n],30  );
H4 = fspecial('gaussian',[m,n],5  );
H5 = fspecial('gaussian',[m,n],3  );
H6 = fspecial('gaussian',[m,n],1  );

 
G1 = H1.*Fc;
G2 = H2.*Fc;
G3 = H3.*Fc;
G4 = H4.*Fc;
G5 = H5.*Fc;
G6 = H6.*Fc;

g1 = ifft2(G1);
g1 = im2uint8(mat2gray(abs(g1)));

g2 = ifft2(G2);
g2 = im2uint8(mat2gray(abs(g2)));

g3 = ifft2(G3);
g3 = im2uint8(mat2gray(abs(g3)));

g4 = ifft2(G4);
g4 = im2uint8(mat2gray(abs(g4)));

g5 = ifft2(G5);
g5 = im2uint8(mat2gray(abs(g5)));

g6 = ifft2(G6);
g6 = im2uint8(mat2gray(abs(g6)));

figure('name','频域高斯滤波');
subplot(3,3,1),imshow(t1),title('高斯噪声');
subplot(3,3,4),imshow(g1),title('高斯过滤,标准差10');
subplot(3,3,5),imshow(g2),title('高斯过滤,标准差20');
subplot(3,3,6),imshow(g3),title('高斯过滤,标准差30');
subplot(3,3,7),imshow(g4),title('高斯过滤,标准差5');
subplot(3,3,8),imshow(g5),title('高斯过滤,标准差3');
subplot(3,3,9),imshow(g6),title('高斯过滤,标准差1');

在这里插入图片描述

总结

在空域里进行高斯滤波时,标准差sigma越大,滤波后的图片越模糊;
在频域里进行高斯滤波时,标准差sigma越小,滤波后的图片越模糊。