用幅度谱对数字图像进行重建的matlab代码
时间: 2024-02-13 11:07:48 浏览: 59
数字图像的重建通常是通过频域滤波实现的,其中一种方法是通过幅度谱对原始图像进行重建。以下是使用幅度谱对数字图像进行重建的Matlab代码示例:
```matlab
% 读入原始图像
img = imread('lena.jpg');
% 将图像转换为灰度图像
gray_img = rgb2gray(img);
% 进行二维离散傅里叶变换
dft_img = fft2(double(gray_img));
% 计算幅度谱
amplitude = abs(dft_img);
% 计算相位谱
phase = angle(dft_img);
% 将幅度谱进行滤波
% 这里使用一个高斯滤波器作为例子
filter_size = 30;
sigma = 5;
h = fspecial('gaussian', [filter_size filter_size], sigma);
filtered_amplitude = imfilter(amplitude, h, 'symmetric');
% 将滤波后的幅度谱和原始相位谱组合成新的频域图像
filtered_dft_img = filtered_amplitude .* exp(1i * phase);
% 对新的频域图像进行反变换
filtered_img = ifft2(filtered_dft_img);
% 取实部并将像素值限制在0-255之间
filtered_img = real(filtered_img);
filtered_img(filtered_img < 0) = 0;
filtered_img(filtered_img > 255) = 255;
% 显示重建后的图像
imshow(filtered_img, []);
```
上述代码中的滤波器可以根据需要进行修改。最后的`imshow`函数用于显示重建后的图像。
阅读全文