MATLAB编程实现图像的理想低通和高通滤波;巴特沃斯低通和高通滤波;高斯低通和高通滤波;同态滤波的代码要求显示滤波前后的图像和频谱
时间: 2023-06-07 07:09:06 浏览: 121
你的问题涉及到 MATLAB 编程实现图像滤波,我可以为你提供代码实现。以下是代码示例:
% 加载图像
img = imread('image.jpg');
% 理想低通滤波
D0 = 20; % 截止频率
h1 = lpfilter('ideal', size(img, 1), size(img, 2), D0);
out1 = dftfilt(img, h1); % 滤波后的图像
% 理想高通滤波
D0 = 20; % 截止频率
h2 = hpfilter('ideal', size(img, 1), size(img, 2), D0);
out2 = dftfilt(img, h2); % 滤波后的图像
% 巴特沃斯低通滤波
D0 = 20; % 截止频率
n = 2; % 阶数
h3 = lpfilter('btw', size(img, 1), size(img, 2), D0, n);
out3 = dftfilt(img, h3); % 滤波后的图像
% 巴特沃斯高通滤波
D0 = 20; % 截止频率
n = 2; % 阶数
h4 = hpfilter('btw', size(img, 1), size(img, 2), D0, n);
out4 = dftfilt(img, h4); % 滤波后的图像
% 高斯低通滤波
D0 = 20; % 截止频率
h5 = lpfilter('gaussian', size(img, 1), size(img, 2), D0);
out5 = dftfilt(img, h5); % 滤波后的图像
% 高斯高通滤波
D0 = 20; % 截止频率
h6 = hpfilter('gaussian', size(img, 1), size(img, 2), D0);
out6 = dftfilt(img, h6); % 滤波后的图像
% 同态滤波
c=1;
D0=50;
n=2;
img=im2double(img);
H=homoFilter(size(img),D0,n,c);
out7=(double(I).*H);
out7=uint8(out7);
% 显示滤波前后的图像和频谱
figure;
subplot(2,3,1),imshow(img),title('原图');
subplot(2,3,2),imshow(out1),title('理想低通滤波');
subplot(2,3,3),imshow(out2),title('理想高通滤波');
subplot(2,3,4),imshow(out3),title('巴特沃斯低通滤波');
subplot(2,3,5),imshow(out4),title('巴特沃斯高通滤波');
subplot(2,3,6),imshow(out5),title('高斯低通滤波');
% 显示滤波前后的频谱
figure;
subplot(2,3,1),imshow(log(1+abs(fft2(img))),[]),title('原图的频谱');
subplot(2,3,2),imshow(log(1+abs(fft2(out1))),[]),title('理想低通滤波后的频谱');
subplot(2,3,3),imshow(log(1+abs(fft2(out2))),[]),title('理想高通滤波后的频谱');
subplot(2,3,4),imshow(log(1+abs(fft2(out3))),[]),title('巴特沃斯低通滤波后的频谱');
subplot(2,3,5),imshow(log(1+abs(fft2(out4))),[]),title('巴特沃斯高通滤波后的频谱');
subplot(2,3,6),imshow(log(1+abs(fft2(out5))),[]),title('高斯低通滤波后的频谱');
阅读全文