对图像使用频域方法去除周期性噪声 matlab代码
时间: 2023-07-29 16:08:18 浏览: 619
matlab去除周期性噪声图片噪声代码,载入图片即可,有注释,方便学习
以下是一个简单的 MATLAB 代码示例,用于对图像使用频域方法去除周期性噪声:
```matlab
% 读取图像
img = imread('example.jpg');
% 进行傅里叶变换
F = fft2(img);
% 将零频分量移动到频谱的中心
F = fftshift(F);
% 计算频率域图像的大小
[M, N] = size(F);
% 计算中心点坐标
center = floor([M, N] / 2) + 1;
% 设置带通滤波器的半径和宽度
r1 = 10;
r2 = 30;
w = 5;
% 创建带通滤波器
H = fspecial('bandpass', 2*r2+1, w) - fspecial('bandpass', 2*r1+1, w);
% 将滤波器移到频域图像的中心
H_shift = zeros(M, N);
H_shift(center(1)-r2:center(1)+r2, center(2)-r2:center(2)+r2) = H;
H_shift = fftshift(H_shift);
% 应用滤波器
G = F .* H_shift;
% 将零频分量移回原位置
G = ifftshift(G);
% 进行反傅里叶变换
filtered_img = uint8(real(ifft2(G)));
% 显示原图和滤波后的图像
figure;
subplot(1, 2, 1);
imshow(img);
title('Original Image');
subplot(1, 2, 2);
imshow(filtered_img);
title('Filtered Image');
```
在这个示例中,我们使用 `fft2` 函数对输入图像进行傅里叶变换,然后使用 `fftshift` 函数将零频分量移动到频谱的中心。接着,我们创建了一个带通滤波器并将其移到频域图像的中心。我们将滤波器应用于频域图像,并使用 `ifftshift` 函数将零频分量移回原位置。最后,使用 `ifft2` 函数进行反傅里叶变换并将结果转换为 uint8 类型的图像数据。
阅读全文