传统正余弦滤波matlab程序
时间: 2023-09-08 14:03:31 浏览: 106
MatLab环境下的正余弦算法
传统正余弦滤波是一种常用的频域滤波方法,其原理是将图像转换到频域,利用正余弦函数对频域图像进行滤波处理,然后再将滤波后的频域图像转换回空域图像。下面是一个用MATLAB实现传统正余弦滤波的程序:
```matlab
% 读入待滤波的图像
I = imread('image.jpg');
% 将图像转换到频域
F = fftshift(fft2(I));
% 设置频域滤波器
[m, n] = size(I);
D0 = 50; % 截止频率
H = zeros(m, n);
for i = 1:m
for j = 1:n
D = sqrt((i-m/2)^2 + (j-n/2)^2); % 计算频率距离
H(i, j) = exp(-D^2 / (2*D0^2)); % 高斯低通滤波器
end
end
% 滤波
G = H .* F;
% 将滤波后的频域图像转换回空域图像
g = real(ifft2(ifftshift(G)));
% 显示原图像和滤波后的图像
figure;
subplot(1, 2, 1);
imshow(I);
title('原图像');
subplot(1, 2, 2);
imshow(g, []);
title('滤波后的图像');
```
在这个程序中,首先读入待滤波的图像,并将其转换到频域。然后,根据设定的截止频率D0,构造一个高斯低通滤波器H。将滤波器与频域图像F相乘得到滤波后的频域图像G。最后,将滤波后的频域图像转换回空域图像,并将原图像和滤波后的图像显示出来。
通过调整截止频率D0的大小,可以控制滤波后的图像的清晰度和平滑程度。较大的D0可以实现高频部分的抑制,从而达到图像平滑的效果。而较小的D0则会保留较多的高频部分,保持图像的细节信息。
阅读全文