以下是用频率域平滑滤波器处理图像的MATLAB代码:
% 读入图像
img = imread('example.jpg');
% 转换为灰度图像
grayImg = rgb2gray(img);
% 对灰度图像进行傅里叶变换
f = fft2(double(grayImg));
% 将频谱中心移到图像中央
shifted_f = fftshift(f);
% 设置滤波器半径为100
H = ones(size(grayImg));
cy = ceil(size(grayImg,1)/2);
cx = ceil(size(grayImg,2)/2);
radius = 100;
for i=1:size(grayImg,1)
for j=1:size(grayImg,2)
if sqrt((i-cy)^2 + (j-cx)^2) > radius
H(i,j) = 0;
end
end
end
% 进行频域滤波
filtered_f = shifted_f.*H;
% 将频谱中心还原到原始位置
filtered_unshifted_f = ifftshift(filtered_f);
% 对滤波后的频谱进行逆变换
filtered_img = real(ifft2(filtered_unshifted_f));
% 显示原始图像和滤波后的图像
subplot(1,2,1), imshow(grayImg)
title('原始图像')
subplot(1,2,2), imshow(uint8(filtered_img))
title('平滑后的图像')
其中,我们通过 fft2 函数对灰度图像进行傅里叶变换。然后,我们将频谱中心移到图像中央,这样可以方便地对频域滤波器进行处理。接着,我们设置了一个半径为100的圆形滤波器。最后,我们将频谱中心还原到原始位置,并对滤波后的频谱进行逆变换,得到滤波后的图像。最后,我们用 imshow 函数显示原始图像和滤波后的图像。