matlab,频域滤波法滤除图片中的频率为4hz的周期噪声,代码
时间: 2024-03-21 09:41:17 浏览: 87
可以使用Matlab中的FFT函数实现频域滤波法。以下是一个简单的代码示例:
```matlab
% 读取图片
img = imread('image.jpg');
% 转换为灰度图像
img_gray = rgb2gray(img);
% 对灰度图像进行傅里叶变换
img_fft = fft2(img_gray);
% 将零频率移到傅里叶变换的中心
img_fft_shift = fftshift(img_fft);
% 计算图像频率域的坐标
[M, N] = size(img_gray);
u = (-M/2 : M/2-1) / M;
v = (-N/2 : N/2-1) / N;
[U, V] = meshgrid(v, u);
% 计算频率域的频率
f = sqrt(U.^2 + V.^2);
% 定义频率域中需要滤除的频率范围
f_cutoff = 4;
% 构造理想带阻滤波器
H = double(f > f_cutoff & f < f_cutoff+1);
% 对频域数据进行滤波
img_fft_filtered = img_fft_shift .* H;
% 将滤波后的频域数据转换回空间域
img_filtered = real(ifft2(ifftshift(img_fft_filtered)));
% 显示原图和滤波后的图像
figure;
subplot(1,2,1);
imshow(img_gray);
title('Original Image');
subplot(1,2,2);
imshow(uint8(img_filtered));
title('Filtered Image');
```
在上述代码中,我们首先读取了一张彩色图片,并将其转换为灰度图像。然后使用Matlab中的fft2函数对灰度图像进行傅里叶变换,得到频域数据。接着使用fftshift函数将零频率移到频域数据的中心,方便后续处理。然后计算出图像频率域的坐标和频率,并定义需要滤除的频率范围。在这里,我们定义了一个4Hz的周期噪声需要被滤除。接着构造一个理想带阻滤波器,对频域数据进行滤波。最后使用ifft2函数将滤波后的频域数据转换回空间域,得到滤波后的图像,并将其显示出来。
阅读全文