如何对图片进行高频强调滤波 用matlab实现
时间: 2024-05-22 13:15:16 浏览: 140
Matlab实现图像高通滤波
4星 · 用户满意度95%
可以使用matlab中的fft2函数进行傅里叶变换,然后将低频部分置零,再进行傅里叶反变换得到高频强调滤波后的图像。
具体步骤如下:
1. 读入图片并转换为灰度图像。
2. 对灰度图像进行傅里叶变换,使用fft2函数实现。
3. 将频谱图像的中心移至图像中心,使用fftshift函数实现。
4. 将低频部分置零,只保留高频部分,可以使用一个高斯滤波器或者一个二维的矩形窗口实现。这里以矩形窗口为例,定义一个和原图像大小相同、中心为1、其他为0的矩阵,然后将矩阵的大小缩小一些,以便强调高频分量。最后将窗口和频谱图像相乘,实现高频强调滤波。
5. 将处理后的频谱图像再进行傅里叶反变换,使用ifft2函数实现。
6. 对反变换后的图像进行幅值归一化,使用mat2gray函数实现。
下面是一个完整的matlab代码实现:
% 读入图片并转换为灰度图像
img = imread('lena.jpg');
gray_img = rgb2gray(img);
% 进行傅里叶变换
fft_img = fft2(double(gray_img));
% 将傅里叶频谱移到中心
fft_img = fftshift(fft_img);
% 定义矩形窗口并缩小大小
[M, N] = size(fft_img);
rect = zeros(M, N);
rect(round(M/2-10):round(M/2+10), round(N/2-10):round(N/2+10)) = 1;
% 高频强调滤波
filtered_fft_img = fft_img .* rect;
% 将傅里叶频谱移到左上角
filtered_fft_img = ifftshift(filtered_fft_img);
% 进行傅里叶反变换
filtered_img = ifft2(filtered_fft_img);
% 幅值归一化
filtered_img = mat2gray(abs(filtered_img));
% 显示原图和处理后的图像
subplot(1,2,1), imshow(gray_img), title('原图');
subplot(1,2,2), imshow(filtered_img), title('高频强调滤波后的图像');
阅读全文