假设我有一个灰度(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是高斯二阶导数)。
发布于 2013-10-30 07:21:58
我不得不回到原纸去找出你问题的准确答案。
一些背景第一
SURF利用一种常用的图像分析方法进行感兴趣区域的检测,即blob检测.典型的blob检测方法是高斯法的不同。这有几个原因,第一个原因是模仿人类大脑视觉皮层发生的事情。
高斯(DoG)差分的缺点是计算时间太长,不适用于大面积图像。
为了绕过这个问题,冲浪采用了一个简单的方法。DoG只是计算两个高斯平均值(或等效地,应用一个高斯模糊),然后取它们的差值。一种快速和肮脏的近似(对于小区域不那么脏)是用一个方框模糊来近似高斯模糊。
方框模糊是给定矩形中所有图像值的平均值。它可以通过积分图像进行有效的计算。
利用积分图像的
在一个完整的图像中,每个像素值是所有像素的总和,所有像素在它上面和它左边的原始图像。积分图像中的左上角像素值因此为0,而积分图像的右下角像素有所有原始像素的值之和。
然后,您只需注意,方框模糊等于给定矩形内所有像素的总和(而不是来自图像的最左上方像素),并应用以下简单的几何推理。
如果您有一个带有角ABCD (左上角、右上角、左下角、右下角)的矩形,则框过滤器的值由以下方法提供:
boxFilter(ABCD) = A + D - B - C,其中A,B,C,D分别是IntegralImagePixelAt(A) (B,C,D)的捷径。
积分图像在冲浪中的应用
冲浪不直接使用大小为9x9的方框模糊等。相反,它使用的是几个阶高斯导数,或类似Haar的特征。
让我们举个例子。假设要计算9x9过滤器的输出。这对应于给定的西格玛,因此是一个固定的尺度/八度。
西格玛被修复后,你在感兴趣的像素上对你的9x9窗口进行居中。然后,计算二阶高斯导数在每个方向(水平、垂直、对角线)的输出。图1给出了垂直和对角线滤波器的图解。
Hessian行列式
有一个因素需要考虑到规模差异。让我们相信行列式等于:
Det = DxxDyy - (0.9 * Dxy)^2. 最后,由:Det = DxxDyy - 0.81*Dxy^2给出行列式。
https://stackoverflow.com/questions/19672315
复制相似问题