matlabfft高通滤波器
时间: 2023-12-08 07:04:49 浏览: 32
以下是MATLAB中使用FFT实现高通滤波器的代码和解释:
```matlab
% 读取图像
img = imread('example.jpg');
% 转换为灰度图像
gray_img = rgb2gray(img);
% 对图像进行FFT变换
fft_img = fft2(gray_img);
% 将零频率分量移到频谱的中心
fft_img_shift = fftshift(fft_img);
% 设置高通滤波器
[M, N] = size(fft_img);
D0 = 50; % 我们可以根据需要调整截止频率D0的大小
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
% 对频谱进行滤波
fft_img_filtered = H .* fft_img_shift;
% 将频谱移到原来的位置
fft_img_filtered_shift = ifftshift(fft_img_filtered);
% 对滤波后的频谱进行反FFT变换
img_filtered = ifft2(fft_img_filtered_shift);
% 显示原图和滤波后的图像
subplot(1, 2, 1), imshow(gray_img), title('Original Image');
subplot(1, 2, 2), imshow(abs(img_filtered), []), title('Filtered Image');
```
代码解释:
1. 读取图像并转换为灰度图像。
2. 对灰度图像进行FFT变换。
3. 将零频率分量移到频谱的中心,方便后续处理。
4. 设置高通滤波器。这里我们使用理想高通滤波器,即在截止频率D0之外的所有频率都通过,而在截止频率D0之内的所有频率都被阻止。我们可以根据需要调整截止频率D0的大小。
5. 对频谱进行滤波,即将频谱与滤波器相乘。
6. 将频谱移到原来的位置。
7. 对滤波后的频谱进行反FFT变换,得到滤波后的图像。
8. 显示原图和滤波后的图像。