3

假设我有一个灰度(8 位)图像,并假设我有一个从同一图像创建的积分图像。图像分辨率为720x576。根据 SURF 算法,每个 octave 由 4 个 box 滤波器组成,它们由其边上的像素数定义。

第一个八度使用带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)^2
det(HessianApprox) = DxxDyy − (0.81Dxy)^2

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

4

2 回答 2

5

我必须回到原始论文才能找到您问题的准确答案。

先介绍一下背景

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,因此是固定的音阶/八度音阶。

sigma 是固定的,您将 9x9 窗口集中在感兴趣的像素上。然后,计算每个方向(水平、垂直、对角线)的二阶高斯导数的输出。论文中的图 1 为您提供了垂直和对角滤波器的图示。

黑森行列式

有一个因素需要考虑规模差异。让我们相信行列式等于:

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

最后,行列式由下式给出:Det = DxxDyy - 0.81*Dxy^2

于 2013-10-30T07:21:58.097 回答
0

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

如果您为普通高斯二维卷积编写了代码,只需将框滤波器用作高斯核,输入图像将是相同的原始图像而不是积分图像。此方法的结果将与您询问的结果相同。

于 2016-03-18T07:57:52.453 回答