赞
踩
(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)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。