熟练使用空域均值、锐化滤波器和频域均值、锐化滤波器对一幅灰度图像进行滤波处理,给出完整matlab代码
时间: 2023-12-30 11:06:04 浏览: 82
图像增强的主要方法<p>图像增强技术-第5、6、7、8讲-图像的空域增强
以下是使用空域均值、锐化滤波器和频域均值、锐化滤波器对一幅灰度图像进行滤波处理的完整Matlab代码:
```matlab
% 加载灰度图像
img = imread('lena.jpg');
img_gray = rgb2gray(img);
% 空域均值滤波器
kernel = ones(5,5)/25;
dst1 = imfilter(img_gray, kernel);
% 空域锐化滤波器
kernel = [-1,-1,-1;-1,9,-1;-1,-1,-1];
dst2 = imfilter(img_gray, kernel);
% 频域均值滤波器
dft = fft2(double(img_gray));
dft_shift = fftshift(dft);
[M, N] = size(img_gray);
crow = fix(M/2);
ccol = fix(N/2);
mask = zeros(M, N);
mask(crow-30:crow+30, ccol-30:ccol+30) = 1;
fshift = dft_shift.*mask;
f_ishift = ifftshift(fshift);
img_back = ifft2(f_ishift);
img_back = abs(img_back);
dst3 = uint8(img_back);
% 频域锐化滤波器
dft = fft2(double(img_gray));
dft_shift = fftshift(dft);
[M, N] = size(img_gray);
crow = fix(M/2);
ccol = fix(N/2);
mask = ones(M, N);
mask(crow-30:crow+30, ccol-30:ccol+30) = 0;
fshift = dft_shift.*mask;
f_ishift = ifftshift(fshift);
img_back = ifft2(f_ishift);
img_back = abs(img_back);
dst4 = uint8(img_back);
% 显示原图和四种滤波结果
subplot(2,3,1),imshow(img_gray),title('Original Image');
subplot(2,3,2),imshow(dst1),title('Spatial Domain Mean Filtered Image');
subplot(2,3,3),imshow(dst2),title('Spatial Domain Sharpened Image');
subplot(2,3,5),imshow(dst3),title('Frequency Domain Mean Filtered Image');
subplot(2,3,6),imshow(dst4),title('Frequency Domain Sharpened Image');
```
在这段代码中,首先使用`imread()`函数加载一张彩色图像,然后使用`rgb2gray()`函数将其转换为灰度图像。然后分别定义了一个空域均值滤波器`kernel`和一个空域锐化滤波器`kernel`。接着使用`imfilter()`函数对图像进行空域均值滤波和空域锐化滤波。然后使用`fft2()`函数对图像进行傅里叶变换,并使用`fftshift()`函数将频域零频分量移到频域图像的中心。接着定义了一个掩膜`mask`,使用一个矩形将零频分量的周围区域置为1,其余区域置为0,从而实现了频域均值滤波。将掩膜`mask`中的1和0交换,即可得到频域锐化滤波器,使用这个掩膜对频域图像进行处理后,再使用`ifft2()`函数进行傅里叶逆变换,得到处理后的图像。最后使用`subplot()`函数将原图和四种滤波结果显示在同一个窗口中。
阅读全文