实验截图:
- 低通滤波实现图像模糊
实验代码:
img = imread('erciyuan.jpg');
img = rgb2gray(img);
d0 = 80;%我们设定的阈值
img_noise = imnoise(img,'gaussian');%加入高斯噪声
img_fft = fftshift(fft2(double(img_noise))); %傅里叶变换得到频谱
[m,n] = size(img_fft);
m_mid = floor(m/2);%原图像高的一半 用于得到中心点坐标
n_mid = floor(n/2);%原图像宽的一半 用于得到中心点坐标
distance = zeros(m,n);
h = zeros(m,n);
img1 = zeros(m,n);
for i = 1 : m
for j = 1 : n
%对得到的频谱进行理想低通滤波
distance(i,j) = sqrt((i - m_mid) ^ 2+(j - n_mid) ^ 2);
h(i,j) = exp(-(distance(i,j) ^ 2) / (2 * d0 ^ 2));
img1(i,j) = img_fft(i,j) * h(i,j);
end
end
img1 = ifftshift(img1);%反傅里叶变换
img1 = uint8(real(ifft2(img1)));
subplot(1,2,1);imshow(img_noise);title('加上高斯噪声后的原图');
subplot(1,2,2);imshow(img1);title('通过高斯低通滤波处理后的原图');
结果分析:
-
频域滤波是在频率域对图像做处理的一种方法。步骤如下:
-
实现高斯低通滤波,首先我们要求出原图像的频谱,这一步我们根据之前的实验可以通过快速傅里叶变换求得,然后我们就要对得到的频谱进行理想低通滤波,这一步首先需要我们计算符合条件的点与中心的距离,公式为:
-
distance(i,j) = sqrt((i - m_mid) ^ 2+(j - n_mid) ^ 2)
-
然后还需要我们根据滤波器变换公式求出h参数,公式为:
-
h(i,j) = exp(-(distance(i,j) ^ 2) / (2 * d0 ^ 2))
-
最后我们,将h与噪声图像的傅里叶变换相乘后进行反傅里叶变换,就能实现高斯低通滤波。