如何在积分图像上应用盒式滤镜? (冲浪)

时间:2013-10-30 01:37:36

标签: image-processing computer-vision surf

假设我有一个灰度(8位)图像,并假设我有一个从同一图像创建的整体图像。 图像分辨率为720x576。根据SURF算法,每个八度音阶由4个盒式滤波器组成,这些滤波器由其侧面的像素数定义。

的     第一个八度音阶使用9x9, 15x15, 21x21 and 27x27像素的滤镜     第二个八度音阶使用15x15, 27x27, 39x39 and 51x51像素的滤镜。
第三个八度音阶使用27x27, 51x51, 75x75 and 99x99像素的滤镜。如果图像足够大并且我猜 720x576足够大(正确?? !!),则添加第四个八度音阶51x51, 99x99, 147x147 and 195x195。这些     八度音程彼此部分重叠,以提高插值结果的质量。

// so, we have:
//
// 9x9   15x15  21x21   27x27
// 15x15 27x27  39x39   51x51
// 27x27 51x51  75x75   99x99
// 51x51 99x99 147x147 195x195

问题是:
每个过滤器的值是什么?我应该对这些值进行硬编码,还是应该对它们进行计算?如何将滤镜应用于整数图像的确切(数字)?

另外,为了计算Hessian行列式,我发现了两个近似值:
det(HessianApprox) = DxxDyy − (0.9Dxy)^2det(HessianApprox) = DxxDyy − (0.81Dxy)^2

哪一个是正确的? (Dxx,Dyy和Dxy是高斯二阶导数)。

2 个答案:

答案 0 :(得分:3)

我必须回到original paper才能找到问题的准确答案。

首先背景

SURF利用常见的图像分析方法进行感兴趣区域检测,称为斑点检测。 斑点检测的典型方法是高斯差异。 这有几个原因,第一个是模仿人脑视觉皮层中发生的事情。

高斯差异(DoG)的缺点是计算时间太大而无法应用于大图像区域。

为了绕过这个问题,SURF采用了一种简单的方法。 DoG只是计算两个高斯平均值(或等效地,应用高斯模糊),然后取其差异。 快速而肮脏的近似(对于小区域来说不那么脏)是通过盒子模糊来近似高斯模糊。

框模糊是给定矩形中所有图像值的平均值。它可以通过积分图像有效地计算。

使用整体图像

在整数图像中,每个像素值是高于的所有像素和原始的总和图片。 因此,积分图像中的左上角像素值为0,因此积分图像的最右下像素具有所有原始像素值的总和。

然后,你只需要注意盒子模糊等于给定矩形内所有像素的总和(不是源自图像的最顶层像素),并应用以下简单的几何推理。

如果你有一个带有ABCD角的矩形(左上角,右上角,左下角,右下角),那么盒式滤镜的值由下式给出:

boxFilter(ABCD) = A + D - B - C,

其中A,B,C,D是IntegralImagePixelAt(A)的快捷方式(分别为B,C,D)。

SURF中的整体图像

SURF不直接使用尺寸为9x9等的盒子模糊。 相反,它使用了几个高斯导数或类Haar特征。

让我们举个例子。假设您要计算9x9过滤器输出。这对应于给定的西格玛,因此是固定的刻度/八度。

sigma被修复,你将9x9窗口置于感兴趣的像素上。然后,计算每个方向(水平,垂直,对角线)的二阶高斯导数的输出。本文中的图1给出了垂直和对角滤波器的图示。

Hessian决定因素

有一个因素需要考虑尺度差异。让我们相信决定因素等于的论文:

Det = DxxDyy - (0.9 * Dxy)^2. 

最后,决定因素由:Det = DxxDyy - 0.81*Dxy^2给出。

答案 1 :(得分:0)

请查看本文档的第17页 http://www.sci.utah.edu/~fletcher/CS7960/slides/Scott.pdf

如果你制作了普通高斯2D卷积的代码,只需使用盒式滤波器作为高斯核,输入图像将是相同的原始图像而非整数图像。此方法的结果与您提出的结果相同。