基于Matlab编程,首先将彩色图像“desert.jpg” 转换为灰度图像,然后对其 进行2DFT变换和两种图像滤波操作(高通滤波、低通滤波),结果如图3所示。 其中,中心大小为60*60的窗口。
时间: 2024-05-26 10:12:35 浏览: 55
下面是基于Matlab编程的代码实现:
% 读取彩色图像
im = imread('desert.jpg');
% 转换为灰度图像
im_gray = rgb2gray(im);
% 进行2DFT变换
im_f = fft2(im_gray);
im_f_shift = fftshift(im_f);
% 定义高通滤波器
H_high = ones(size(im_gray));
H_high(ceil(size(im_gray,1)/2)-30:ceil(size(im_gray,1)/2)+30, ceil(size(im_gray,2)/2)-30:ceil(size(im_gray,2)/2)+30) = 0;
% 定义低通滤波器
H_low = zeros(size(im_gray));
H_low(ceil(size(im_gray,1)/2)-30:ceil(size(im_gray,1)/2)+30, ceil(size(im_gray,2)/2)-30:ceil(size(im_gray,2)/2)+30) = 1;
% 对图像进行高通滤波操作
im_f_high = im_f_shift .* H_high;
im_high = abs(ifft2(ifftshift(im_f_high)));
% 对图像进行低通滤波操作
im_f_low = im_f_shift .* H_low;
im_low = abs(ifft2(ifftshift(im_f_low)));
% 显示结果
figure;
subplot(2,2,1);imshow(im_gray);title('原始灰度图像');
subplot(2,2,2);imshow(log(1+abs(im_f_shift)),[]);title('2DFT变换');
subplot(2,2,3);imshow(im_high,[]);title('高通滤波');
subplot(2,2,4);imshow(im_low,[]);title('低通滤波');