一、 引言
从灰度分布的角度看,图像中对象的轮 廓 (边 缘 ) 和线条是图像中灰度的突变部分, 因而包含丰富的空间高频分量。
从频谱分析的角度看, 任何一幅图像都是由决定图像反差的低频信号和决定图像细节的高频 信号组成。 但需要考虑到, 数字化图像中高频信号部分总是掺杂有一定程度的噪声。因此, 在频率域中进行图像的锐化处理实质上是加强需要的高频分量,并必须考虑 到要 在锐 化图像的同时抑制噪声。
频率域中滤波的数学表达式可写为
G
(
u
,
v
)
=
H
(
u
,
v
)
⋅
F
(
u
,
v
)
G(u,v)=H(u,v)·F(u,v)
G(u,v)=H(u,v)⋅F(u,v)
式中,F(u,v)是原始图像的Fouirer频谱,G(u,v)是锐化后图像的Fouirer频谱,H(u,v)是滤波器的转移函数(或称传递函数),它的作用是使高频分量通过,低频分量被抑制。由式(l)可知,只要选择合适的H(u,v),使高频分量通过,则滤波的目的也达到了。由于这种滤波的特点是低频截止、高频通过,故称为高通滤波。
二.典型高通滤波器
1.理想高通滤波器
对理想高通滤波器,当频率平面上某点到原点的距离小于截止频率D0时,转移函数值为0,变换后的频率为0
代码:
img=imread('lenna.bmp');
img=im2double(img);
Fimg=fft2(double(img));%傅里叶变换?
Fimg=fftshift(Fimg);%将变换的原点移到频率矩形的中心?
[M,N]=size(img);
%截止频率为15的理想高通滤波处理
dist=15;
z=zeros(M,N);
for i=1:M
for j=i:N
if(dist<sqrt(((i-M/2)^2+(j-N/2)^2)))
z(i,j)=1;
end
end
end
g=Fimg.*z;
g=ifftshift(g);
img1=real(ifft2(g));
%图像显示
subplot(1,2,1);imshow(img);title('原图');
subplot(1,2,2);imshow(img1);title('半径15的理想高通滤波');
-
巴特沃斯 (Butterworth)高通滤波器
-
指数高通滤波器
-
梯形高通滤波器
三、matlab代码
%高通滤波器对图像进行平滑处理
clc;close all;
img=imread('lenna.bmp');
figure,imshow(img);title('原图');
img=double(img);
Fimg=fft2(img);%傅里叶变换?
Fimg=fftshift(Fimg);%将变换的原点移到频率矩形的中心?
[M,N]=size(img);
distance0 = 50;distance1=100; nn = 2;%截止频率为50的二阶滤波器
m=round(M/2); n=round(N/2);%数据取整
result_Butterworth = zeros(M,N);
result_Exponential = zeros(M,N);
result_Trapezoidal = zeros(M,N);
result_Gaussian = zeros(M,N);
for i = 1:M
for j = 1:N
distance = sqrt( (i - m)^2 + (j - n)^2 );%计算频率平面原点到各点的距离
%巴特沃斯高通滤波
hB = 1 / (1 + (distance0 / distance)^(2*nn));%传递公式(巴特沃斯高通滤波器)
result_Butterworth(i,j) = hB*Fimg(i,j);%滤波公式
%高斯高通滤波器
hG = 1 - exp( (-distance^2)/(2*(distance0^2)) );
result_Gaussian(i,j) = hG * Fimg(i,j);
%指数高通滤波器
hE = exp( - (distance0 / distance )^nn );%传递公式(指数形高通滤波器)
result_Exponential(i,j) = hE*Fimg(i,j);%滤波公式
%梯形高通滤波器
if(distance <= distance0)
hT= 0;
result_Trapezoidal(i,j) = hT * Fimg(i,j);
if(distance > distance1)
hT= 1;
result_Trapezoidal(i,j) = hT * Fimg(i,j);
else
hT = (distance - distance0) / (distance1 - distance0);
result_Trapezoidal(i,j) = hT * Fimg(i,j);
end
end
end
end
result_Butterworth = ifftshift(result_Butterworth);%直流分量移回到左上角
imgB = ifft2(result_Butterworth);%傅里叶反变换
imgB1 = uint8(real(imgB));%取幅值并转换成8位无符号整数
figure;subplot(2,2,1);imshow(imgB1);title('巴特沃斯高通滤波器');
imgG = ifft2(result_Gaussian);%傅里叶反变换
imgG1 = uint8(real(imgG));%取幅值并转换成8位无符号整数
subplot(2,2,2);imshow(imgG1);title('高斯高通滤波器');
imgE = ifft2(result_Exponential);%傅里叶反变换
imgE1 = uint8(real(imgE));%取幅值并转换成8位无符号整数
subplot(2,2,3);imshow(imgE1);title('指数高通滤波器');
imgT = ifft2(result_Trapezoidal);%傅里叶反变换
imgT1 = uint8(real(imgT));%取幅值并转换成8位无符号整数
subplot(2,2,4);imshow(imgT1);title('梯形高通滤波器');