2

在有关数字图像处理的文献中,您可以找到相对低阶的拉普拉斯核的示例,通常为 3 或 5。我想知道,有没有一般的方法来构建拉普拉斯核或任意阶?链接或/和参考将不胜感激。

4

1 回答 1

2

拉普拉斯算子定义为沿图像每个轴的二阶导数之和。(即是Hessian矩阵的迹):

  • Δ I = ( ∂<sup>2/∂<em>x 2 + ∂<sup>2/∂<em>y 2 ) I

有两种常用的离散化方法:

  1. 使用有限差分。导数算子是[1,-1]或的卷积[0.5,0,-0.5],二阶导数算子应用[1,-1]卷积两次,导致与 的卷积[1,-2,1]

  2. 与正则化核的导数卷积。最佳正则化核是高斯,导致高斯拉普拉斯算子。结果是由高斯核平滑的图像的精确拉普拉斯。


另一种方法是用插值内核替换正则化内核。我的一位前同事发表了一篇关于这种方法的论文:

A. Hast,“通过双重滤波方法对一阶和二阶导数进行简单滤波器设计”,模式识别快报 42(1):65-71,2014 年

他使用了“双滤波器”,但线性滤波器总是可以简化为单个卷积。

这个想法很简单,采用一个插值内核,并在整数位置计算它的导数。插值内核在原点处始终为 1,在其他整数位置处始终为 0,但它通过这些“结点”波动,这意味着它的导数在这些整数位置处不为零。

在极端情况下,采用理想的插值器,即sinc 函数

  • sinc( x ) = sin(π x ) / π x

它的二阶导数是

  • d 2 /d x 2 (sinc(π x )) = [ (2 - π 2 x 2 ) sin(π x ) - 2π x cos(π x ) ] / (π x 3 )

在 11 个整数位置采样导致:

[ 0.08 -0.125 0.222 -0.5 2 -3 2 -0.5 0.222 -0.125 0.08 ]

但请注意,这里的归一化是不正确的,因为我们要切断无限长的内核。因此,最好选择较短的内核,例如三次样条内核


第二种选择是通过傅立叶域计算拉普拉斯算子。这只需要乘以 -π u 2v 2,同时uv是频率。

这是一些 MATLAB 代码,将此滤波器应用于单位脉冲图像,从而生成大小为 256x256 的内核图像:

[u,v] = meshgrid((-128:127)/256,(-128:127)/256);
Dxx = -4*(pi*u).^2;
Dyy = -4*(pi*v).^2;
L = Dxx + Dyy;
l = fftshift(ifft2(ifftshift(L)));
l = real(l);        % discard insignificant imaginary component (probably not necessary in MATLAB, but Octave leaves these values there)
l(abs(l)<1e-6) = 0; % set near-zero values to zero

l这与上面理想插值器的结果相同,将垂直和水平插值相加,并归一化长度为 256。


最后,我想提一下,拉普拉斯算子对噪声非常敏感(高频显着增强)。这里讨论的方法只对没有鼻子的数据有意义(大概是合成数据?)。对于任何真实世界的数据,我强烈建议您使用 Laplace of Gaussian。这将为您提供平滑图像的精确拉普拉斯。为了防止噪声的影响,需要进行平滑处理。在噪声很小的情况下,您可以使用小的高斯西格玛(例如 σ=0.8)。这将为您提供比任何其他方法更有用的结果。

于 2018-06-11T15:56:07.210 回答