(1)拉普拉斯在频率域的滤波器可以表示为:
H ( u , v ) = − 4 π 2 D 2 ( u , v ) H(u,v)=-4π^2D^2(u,v) H(u,v)=−4π2D2(u,v)
(2)
∇ 2 f ( x , y ) = F − 1 [ H ( u , v ) ∗ F ( u , v ) ] \nabla^2f(x,y)=F^{-1}[H(u,v)*F(u,v)] ∇2f(x,y)=F−1[H(u,v)∗F(u,v)]
(3)
g ( x , y ) = f ( x , y ) − ∇ 2 f ( x , y ) = F − 1 [ ( 1 − H ( u , v ) ) ∗ F ( u , v ) ] g(x,y)=f(x,y)-\nabla^2f(x,y)=F^{-1}[(1-H(u,v))*F(u,v)] g(x,y)=f(x,y)−∇2f(x,y)=F−1[(1−H(u,v))∗F(u,v)]
若直接使用上述公式进行编程,会导致图像大部分像素为白色,因为在计算 ∇ 2 f ( x , y ) \nabla^2f(x,y) ∇2f(x,y)时,会引入已标定系数的傅里叶变换,这些系数比f的最大值要大几个量级。因此具体编程步骤为:
(1)将原图f(x,y)的值变为[0,1]范围内后进行傅里叶变换得到F(u,v);
(2)计算F(u,v)的最大值,计算 ∇ 2 F ( u , v ) \nabla^2F(u,v) ∇2F(u,v)后除以最大值,使 ∇ 2 F ( u , v ) \nabla^2F(u,v) ∇2F(u,v)在[-1,1]的范围内;
(3)利用原理中第三式计算增强图像。
代码如下(示例):
im1=imread('1.jpg');
im1=rgb2gray(im1);
figure
imshow(im1)
img_f=fftshift(fft2(im2double(im1))); %傅里叶变换得到频谱,im2double将原图的值域变为[0,1]
[m,n]=size(img_f);
O_x=fix(m/2);
O_y=fix(n/2); %获取圆心坐标
a=max(max(img_f)); %求img_f得最大值
img=zeros(m,n); %提前定义滤波后的频谱,提高运行速度
for j=1:n
for i=1:m
d=sqrt((i-O_x)^2+(j-O_y)^2); %计算两点之间的距离
H(i,j)=-4*pi^2*d^2/a; %拉普拉斯滤波器,除以img_f的最大值a是为了将H(i,j)标定到[-1,1]的范围内
img(i,j)=(1-H(i,j))*img_f(i,j);
end
end
img=ifftshift(img); %傅里叶反变换
img=im2uint8(real(ifft2(img))); %取实数部分
figure
imshow(img)