假设我有一个灰度(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)^2
和det(HessianApprox) = DxxDyy − (0.81Dxy)^2
哪一个是正确的?
(Dxx,Dyy和Dxy是高斯二阶导数)。
答案 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卷积的代码,只需使用盒式滤波器作为高斯核,输入图像将是相同的原始图像而非整数图像。此方法的结果与您提出的结果相同。