对图像使用频域方法去除周期性噪声的代码
时间: 2023-07-29 14:08:19 浏览: 139
使用频域方法去除周期性噪声的代码主要分为以下几个步骤:
1. 读取图像并转换为灰度图像
```matlab
img = imread('image.jpg');
gray_img = rgb2gray(img);
```
2. 对灰度图像进行傅里叶变换
```matlab
f_img = fft2(gray_img);
```
3. 将傅里叶变换后的图像进行中心化
```matlab
f_img = fftshift(f_img);
```
4. 设计带阻滤波器并对傅里叶变换后的图像进行滤波
```matlab
% 设计带阻滤波器
D0 = 50;
W = 10;
H = size(gray_img, 1);
W1 = floor(W / 2);
W2 = ceil(W / 2);
[X, Y] = meshgrid(-W2:W1-1, -W2:W1-1);
H_filter = 1 - exp(-((X.^2 + Y.^2 - D0^2) / (2 * W^2)));
% 对傅里叶变换后的图像进行滤波
f_img_filtered = f_img .* H_filter;
```
5. 将滤波后的图像进行反傅里叶变换,并取实部
```matlab
img_filtered = real(ifft2(ifftshift(f_img_filtered)));
```
完整代码如下:
```matlab
% 读取图像并转换为灰度图像
img = imread('image.jpg');
gray_img = rgb2gray(img);
% 对灰度图像进行傅里叶变换
f_img = fft2(gray_img);
% 将傅里叶变换后的图像进行中心化
f_img = fftshift(f_img);
% 设计带阻滤波器
D0 = 50;
W = 10;
H = size(gray_img, 1);
W1 = floor(W / 2);
W2 = ceil(W / 2);
[X, Y] = meshgrid(-W2:W1-1, -W2:W1-1);
H_filter = 1 - exp(-((X.^2 + Y.^2 - D0^2) / (2 * W^2)));
% 对傅里叶变换后的图像进行滤波
f_img_filtered = f_img .* H_filter;
% 将滤波后的图像进行反傅里叶变换,并取实部
img_filtered = real(ifft2(ifftshift(f_img_filtered)));
% 显示原始图像和去除噪声后的图像
figure;
subplot(1, 2, 1);
imshow(gray_img);
title('Original Image');
subplot(1, 2, 2);
imshow(img_filtered, []);
title('Filtered Image');
```
阅读全文