将图片转换到频域在进行高通滤波操作 matlab实现
时间: 2024-03-19 21:45:43 浏览: 63
Matlab实现图像高通滤波
4星 · 用户满意度95%
你可以使用 Matlab 中的 fft2 函数将图像转换到频域,然后使用 ifft2 函数将其转换回空域。接下来,你可以设计一个高通滤波器,例如使用 Butterworth 或 Gaussian 滤波器,来滤除低频信号。最后,将滤波后的频域图像转换回空域即可得到经过高通滤波的图像。具体的实现步骤如下:
1. 读取图像并将其转换为灰度图像。
2. 使用 fft2 函数将灰度图像转换到频域。
3. 构造一个高通滤波器,例如使用 Butterworth 或 Gaussian 滤波器。
4. 将高通滤波器应用到频域图像上。
5. 使用 ifft2 函数将滤波后的频域图像转换回空域。
6. 对于输出结果,你可能需要使用 imadjust 函数进行亮度调整。
下面是一个可能的示例代码:
```
% 读取图像并将其转换为灰度图像
img = imread('example.jpg');
img_gray = rgb2gray(img);
% 将灰度图像转换到频域
img_freq = fft2(double(img_gray));
% 构造高通滤波器
D0 = 50; % 我们设定一个截止频率为50的高通滤波器
[n, m] = size(img_gray);
u = 0:(m-1);
v = 0:(n-1);
idx = find(u > m/2);
u(idx) = u(idx) - m;
idy = find(v > n/2);
v(idy) = v(idy) - n;
[V, U] = meshgrid(v, u);
D = sqrt(U.^2 + V.^2);
H = 1 - exp(-(D.^2)./(2*(D0^2)));
% 将高通滤波器应用到频域图像上
img_freq_filtered = H .* img_freq;
% 将滤波后的频域图像转换回空域
img_filtered = real(ifft2(img_freq_filtered));
% 对输出结果进行亮度调整
img_filtered = imadjust(img_filtered, [0,1], [0,255]);
% 显示滤波前后的图像
figure;
subplot(1,2,1); imshow(img_gray); title('原始图像');
subplot(1,2,2); imshow(uint8(img_filtered)); title('滤波后的图像');
```
希望能对你有所帮助!
阅读全文