matlab频域图像增强
时间: 2024-12-27 12:29:04 浏览: 17
### Matlab 中的频域图像增强
#### 一、频域中的基本概念
在Matlab中,频域图像增强涉及将空间域中的图像转换到频率域进行处理。通过傅里叶变换可以完成这一过程。边缘和其他尖锐变化(如噪声)在图像的灰度级中主要处于傅里叶变换后的高频部分;因此,平滑(模糊)可以通过衰减指定图像傅里叶变换中高频成分的范围来实现[^3]。
#### 二、Butterworth低通滤波器的应用实例
对于给定的一幅图像,先将其读入并转化为双精度浮点数形式以便后续操作:
```matlab
img = imread('your_image.jpg'); % 替换为实际图片路径
I = im2double(rgb2gray(img));
```
接着执行快速傅里叶变换以及中心化处理:
```matlab
F = fftshift(fft2(I));
% 显示原始频谱图
figure; imshow(log(abs(F)), []); title('Original Spectrum');
```
定义一个函数用于创建Butterworth低通滤波器掩模,并应用此掩膜于已变换过的数据上:
```matlab
function H = butterworth_lowpass(D0, n, M, N)
u = 0:(M-1);
v = 0:(N-1);
[V,U] = meshgrid(v,u);
D = sqrt((U-M/2).^2+(V-N/2).^2);
H = 1 ./ (1 + (D./D0).^(2*n));
end
```
调用上述自定义函数生成特定参数下的LPF模板并对输入信号施加影响:
```matlab
[M,N] = size(I);
n = 2;
D0 = 30; % 可调整截止频率
H = butterworth_lowpass(D0,n,M,N);
G = F .* H;
g = real(ifft2(ifftshift(G)));
imshow(g),title(['Low-pass filtered image with cutoff ',num2str(D0)]);
```
#### 三、高斯高通滤波器示例
同样地,这里也给出了一种简单的方式去构建两个具有不同半径设置的GGHF模型来进行对比分析:
```matlab
function G = gaussian_highpass(sigma, M, N)
[X,Y]=meshgrid(-floor(N/2):ceil(N/2)-1,-floor(M/2):ceil(M/2)-1);
R=sqrt(X.^2+Y.^2);
G=exp(-(R.^2)/(2*sigma^2));
G=~logical(G<eps);
end
sigmas=[10,50]; % 不同的标准差值代表不同的“带宽”
for i=1:length(sigmas)
sigma = sigmas(i);
GH = gaussian_highpass(sigma,size(I,1),size(I,2));
GF = F.*GH;
gi = abs(real(ifft2(ifftshift(GF))));
subplot(length(sigmas),2,i*2-1);
imshow(mat2gray(GH)); axis off; title([sprintf('Sigma=%d',sigma),' High-Pass Filter']);
subplot(length(sigmas),2,i*2);
imshow(mat2gray(gi));axis off; title([sprintf('Sigma=%d',sigma),' Enhanced Image']);
end
```
#### 四、拉普拉斯滤波器实现在频域内的图像锐化
为了展示如何利用Laplacian算子在频域中实施图像锐化,下面提供了一个简单的例子。需要注意的是,在实践中通常会结合其他类型的预处理步骤以获得更好的视觉效果。
```matlab
laplacianKernel = [-1 -1 -1 ;...
-1 8 -1 ; ...
-1 -1 -1];
FLP = freqz2(laplacianKernel,'same');
GLP = F .* FLP;
glp = uint8(imadjust(real(ifft2(ifftshift(GLP)))));
imshowpair(I, glp, 'montage'), colormap gray;
title({'Original vs Laplacian sharpened';'images'});
```
阅读全文