MATLAB编程实现图像的理想低通和高通滤波;巴特沃斯低通和高通滤波;高斯低通和高通滤波;同态滤波的代码要求显示滤波前后的图像和频谱
时间: 2023-06-07 21:10:26 浏览: 46
很高兴为您解答这个问题。
以下是MATLAB编程实现图像的理想低通和高通滤波、巴特沃斯低通和高通滤波、高斯低通和高通滤波、同态滤波的代码要求显示滤波前后的图像和频谱的步骤:
1. 加载图像
2. 将图像转换为灰度图像
3. 对灰度图像进行傅里叶变换
4. 构造滤波器
5. 用滤波器对傅里叶变换后的图像进行滤波
6. 对滤波后的图像进行傅里叶逆变换,得到滤波后的图像
7. 显示滤波前后的图像和频谱
以下是代码:
%% 加载图像
img = imread('lena.png');
%% 转换为灰度图像
gray_img = rgb2gray(img);
%% 对灰度图像进行傅里叶变换
F = fft2(double(gray_img));
F_shift = fftshift(F);
F_abs = abs(F_shift);
F_abs_log = log(F_abs+1);
%% 构造滤波器
[M,N] = size(gray_img);
[U,V] = meshgrid(1:N,1:M);
D = sqrt((U-N/2).^2 + (V-M/2).^2);
%% 理想低通滤波
D0 = 50;
H = double(D<=D0);
F_filtered = H.*F_shift;
%% 理想高通滤波
D0 = 50;
H = double(D>=D0);
F_filtered = H.*F_shift;
%% 巴特沃斯低通滤波
D0 = 50;
n = 5;
H = 1./(1+(D./D0).^(2*n));
F_filtered = H.*F_shift;
%% 巴特沃斯高通滤波
D0 = 50;
n = 5;
H = 1./(1+(D0./D).^(2*n));
F_filtered = H.*F_shift;
%% 高斯低通滤波
D0 = 50;
H = exp(-(D.^2)./(2*D0^2));
F_filtered = H.*F_shift;
%% 高斯高通滤波
D0 = 50;
H = 1 - exp(-(D.^2)./(2*D0^2));
F_filtered = H.*F_shift;
%% 同态滤波
c = 1;
d0 = 50;
d1 = 150;
H = (d1-d0).*(1-exp(-c*(D.^2-d0^2)))./(c*(D.^2-d0^2))+d0;
H(D<1e-6) = 1;
F_filtered = H.*F_shift;
%% 对滤波后的图像进行傅里叶逆变换,得到滤波后的图像
F_filtered_shift = ifftshift(F_filtered);
img_filtered = ifft2(F_filtered_shift);
img_filtered = abs(img_filtered);
%% 显示滤波前后的图像和频谱
subplot(2,2,1);
imshow(gray_img);
title('Original image');
subplot(2,2,2);
imshow(img_filtered,[]);
title('Filtered image');
subplot(2,2,3);
imshow(F_abs_log,[]);
title('Original spectrum');
subplot(2,2,4);
F_filtered_abs = abs(F_filtered_shift);
F_filtered_abs_log = log(F_filtered_abs+1);
imshow(F_filtered_abs_log,[]);
title('Filtered spectrum');
请注意,此代码仅用于教育和研究目的。在实际应用中,请根据实际需求进行修改和优化。