用MATLAB自选一幅灰度图像,分别对其做空域高通滤波和频域高通滤波,滤波器或滤波方法自选。并在此基础上实现图像的锐化
时间: 2024-09-24 22:16:45 浏览: 117
频域滤波器_理想滤波器_高通滤波_高通滤波器_MATLAB下频域滤波器实现_高斯低通滤波_
5星 · 资源好评率100%
在MATLAB中,我们可以选择一幅灰度图像作为输入,并通过空域(Spatial Domain)和频域(Frequency Domain)进行高通滤波,然后进一步实现图像的锐化。这里我们将使用常见的均值滤波(Low Pass Filter,空域高通的一种简单形式)作为低通滤波,再用拉普拉斯算子(Prewitt算子或Sobel算子)作为高通滤波,以及反拉普拉斯算子来进行图像锐化。
首先,我们加载一幅灰度图像,这里假设已经存在名为`image`的变量:
```matlab
img = imread('your_grayscale_image.jpg'); % 替换为你自己的图片路径
```
### 空域高通滤波(低通滤波)
我们用均值滤波器做低通滤波,保留图像细节较慢变化的部分:
```matlab
low_pass_filtered = img;
filter_size = 3; % 可自定义滤波器大小,一般取奇数
low_pass_filtered = medfilt2(low_pass_filtered, filter_size); % 高通效果相当于低通
```
### 频域高通滤波
现在我们转到频域,使用傅里叶变换进行高通滤波。这里我们使用拉普拉斯算子的离散版本在频域进行操作:
```matlab
% 计算原图像的幅度谱
img_spectrum = abs(fft2(img));
% 设定频率域截止点(这里仅保留较高频率部分)
cutoff_freq = floor(size(img_spectrum)/4); % 取四分之一的图像尺寸作为截止点
img_spectrum(cutoff_freq+1:end,:) = 0; % 设置高频部分为零(等效于高通)
% 反变换回空间域
high_pass_filtered = real(ifft2(img_spectrum));
% 结合两个滤波结果
combined_filtered = low_pass_filtered + high_pass_filtered;
```
### 图像锐化
最后,我们使用反拉普拉斯算子对结合的结果进行锐化,这将增强边缘信息:
```matlab
sharp_image = img + sqrt(-log(rand(size(img)))); % 使用随机梯度增强(一种锐化技巧)
```
阅读全文