高斯边缘检测的尺度拉普拉斯算子

时间:2013-05-15 05:59:54

标签: algorithm image-processing gaussian edge-detection

我使用高斯拉普拉斯算子进行边缘检测,结合使用http://homepages.inf.ed.ac.uk/rbf/HIPR2/log.htmhttp://wwwmath.tau.ac.il/~turkel/notes/Maini.pdf

中描述的内容

简单地说,我正在使用这个等式:

for(int i = -(kernelSize/2); i<=(kernelSize/2); i++)
    {

        for(int j = -(kernelSize/2); j<=(kernelSize/2); j++)
        {

            double L_xy = -1/(Math.PI * Math.pow(sigma,4))*(1 - ((Math.pow(i,2) + Math.pow(j,2))/(2*Math.pow(sigma,2))))*Math.exp(-((Math.pow(i,2) + Math.pow(j,2))/(2*Math.pow(sigma,2))));
            L_xy*=426.3;
        }

    }

并使用L_xy变量来构建LoG内核。

问题是,当图像尺寸较大时,应用相同的内核会使滤波器对噪声更敏感。边缘清晰度也不一样。

让我举个例子......

假设我们有这张图片:Original image

在此图像的480×264像素版本上使用sigma = 0.9的值和5 x 5矩阵的内核大小,我们得到以下输出:

Small Image

但是,如果我们在此图像的1920×1080像素版本上使用相同的值(相同的sigma值和内核大小),我们会得到如下内容:enter image description here

[两个图像都缩小了更大图像的版本。缩小是使用照片编辑器完成的,这意味着图像中包含的数据并不完全相似。但是,至少,他们应该非常接近。]

鉴于较大的图像大约是较小图像的4倍...我还尝试将sigma缩放4倍(sigma * = 4),输出是......你猜对了,黑色画布。

请您帮我理解如何实现一个LoG边缘检测器,它可以从输入信号中找到相同的特征,即使输入信号按比例放大或缩小(将给出比例因子)。

1 个答案:

答案 0 :(得分:2)

查看您的图像,我想您正在使用24位RGB。当你增加sigma时,你的滤波器的响应会相应地减弱,因此你在较大的内核中得到的值是接近于零的值,这些值要么被截断,要么接近于零而你的显示器无法区分。

为了使不同尺度的差异具有可比性,你应该使用尺度空间微分算子(Lindeberg等人):

Scale-space differential

本质上,微分算子应用于高斯核函数(G_{\sigma}),结果(或者卷积核;它只是一个标量乘数)通过\sigma^{\gamma}缩放。这里L是输入图像,LoG是高斯图像的拉普拉斯算子。

当差异的顺序为2时,\gamma通常设置为2。

然后你应该在两张图片中得到非常相似的幅度。

来源:

[1]林德伯格:“计算机视觉中的尺度空间理论”1993年

[2] Frangi等人。 “多尺度血管增强过滤”1998年