数字图像处理学习笔记8:频率域滤波4(拉普拉斯算子)

文章目录

  • 一、频率域的拉普拉斯算子
    • 1.原理
    • 2.编程步骤
  • 二、MATLAB代码
    • 1.代码
    • 2.结果


一、频率域的拉普拉斯算子

1.原理

(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)=F1[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)=F1[(1H(u,v))F(u,v)]


2.编程步骤

若直接使用上述公式进行编程,会导致图像大部分像素为白色,因为在计算 ∇ 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)利用原理中第三式计算增强图像。


二、MATLAB代码

1.代码

代码如下(示例):

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)

2.结果

数字图像处理学习笔记8:频率域滤波4(拉普拉斯算子)_第1张图片

你可能感兴趣的:(计算机视觉,matlab,图像处理)