matlab选择任意一副图像,对其进行傅里叶变换,在频率域中实现两种不同半径(截止频率)的高斯高通滤波的锐化效果,显示原始图像和滤波图像,及与原图像叠加的高频增强图像。
时间: 2023-09-19 12:09:03 浏览: 44
好的,以下是 Matlab 的代码实现:
```matlab
% 读入图像
img = imread('test.jpg');
% 转为灰度图像
gray_img = rgb2gray(img);
% 傅里叶变换
f = fft2(double(gray_img));
fshift = fftshift(f);
% 设置截止频率
D0_1 = 50;
D0_2 = 100;
% 构造高斯高通滤波器
[M, N] = size(gray_img);
u = 0:(M-1);
v = 0:(N-1);
idx = find(u > M/2);
u(idx) = u(idx) - M;
idy = find(v > N/2);
v(idy) = v(idy) - N;
[V, U] = meshgrid(v, u);
D = sqrt(U.^2 + V.^2);
H1 = exp(-(D.^2)./(2*(D0_1^2)));
H2 = exp(-(D.^2)./(2*(D0_2^2)));
% 滤波
g1 = fshift .* H1;
g2 = fshift .* H2;
% 傅里叶逆变换
ifshift1 = ifftshift(g1);
ifshift2 = ifftshift(g2);
img1 = real(ifft2(ifshift1));
img2 = real(ifft2(ifshift2));
% 高频增强
high_freq = gray_img - img2 + img1;
% 显示原始图像和滤波图像
subplot(2, 2, 1), imshow(gray_img), title('原图');
subplot(2, 2, 2), imshow(img1, []), title('半径50高通滤波');
subplot(2, 2, 3), imshow(img2, []), title('半径100高通滤波');
% 显示高频增强图像
subplot(2, 2, 4), imshow(high_freq, []), title('高频增强');
```
其中,`test.jpg` 是需要处理的图像文件。运行后,会显示出原始图像、两种不同半径的高斯高通滤波后的图像以及高频增强后的图像。可以根据需要调整截止频率的大小来达到不同程度的锐化效果。