matlab中二维傅里叶变换去除图像条纹噪声程序
时间: 2023-08-21 22:08:02 浏览: 36
以下是使用二维傅里叶变换去除图像条纹噪声的 MATLAB 程序:
```matlab
% 读取图像
img = imread('image.png');
% 转换为灰度图像
grayImg = rgb2gray(img);
% 显示原始图像
subplot(2,2,1);
imshow(grayImg);
title('Original Image');
% 对图像进行傅里叶变换
f = fft2(double(grayImg));
% 将频谱中心化
fshift = fftshift(f);
% 取绝对值
absFshift = abs(fshift);
% 显示频谱图像
subplot(2,2,2);
imshow(log(1+absFshift),[]);
title('Spectrum');
% 设置滤波器
[x,y] = meshgrid(-128:127,-128:127);
D = sqrt(x.^2 + y.^2);
H = double(D>10);
% 进行频域滤波
G = H.*fshift;
% 将频谱反变换为时域
g = real(ifft2(ifftshift(G)));
% 显示滤波后的图像
subplot(2,2,3);
imshow(g,[]);
title('Filtered Image');
% 比较原始图像和滤波后图像的 PSNR
psnrValue = psnr(grayImg, g);
disp(['PSNR = ', num2str(psnrValue)]);
```
解释一下程序的实现过程:
1. 读取图像并转换为灰度图像。
2. 对图像进行二维傅里叶变换,并将频谱中心化。
3. 取频谱的绝对值并显示频谱图像。
4. 设置一个低通滤波器并进行频域滤波。
5. 将滤波后的频谱反变换为时域。
6. 显示滤波后的图像,并计算原始图像和滤波后图像的 PSNR 值。
PS:PSNR 值越高,表示滤波后的图像与原始图像越接近,滤波效果越好。