matlab图像频域滤波代码
时间: 2023-08-15 13:03:55 浏览: 91
以下是matlab中进行图像频域滤波的示例代码:
```matlab
% 读入图像,转换为灰度图像
im = imread('lena.png');
if size(im, 3) == 3
im = rgb2gray(im);
end
% 进行二维傅里叶变换
f = fft2(double(im));
% 对频谱进行中心化,将低频部分移到图像中心
fshift = fftshift(f);
% 构造一个低通滤波器
[M, N] = size(im);
D0 = 50; % 滤波器半径
H = zeros(M, N);
for i = 1:M
for j = 1:N
D = sqrt((i-M/2)^2 + (j-N/2)^2);
if D <= D0
H(i, j) = 1;
end
end
end
% 将滤波器应用于频谱
G = H .* fshift;
% 对滤波后的频谱进行反变换,得到滤波后的图像
g = real(ifft2(ifftshift(G)));
% 显示原图和滤波后的图像
figure;
subplot(1, 2, 1);imshow(im);title('原图');
subplot(1, 2, 2);imshow(g, []);title('滤波后的图像');
```
在上述代码中,我们首先读入图像并将其转换为灰度图像,然后利用`fft2`函数对图像进行二维傅里叶变换,得到图像的频谱。接着,我们对频谱进行中心化,将低频部分移到图像中心。然后,我们构造一个低通滤波器,将其应用于频谱。最后,我们对滤波后的频谱进行反变换,得到滤波后的图像,并显示原图和滤波后的图像。
阅读全文