首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在积分图像上应用盒子滤波器?(冲浪)

如何在积分图像上应用盒子滤波器?(冲浪)
EN

Stack Overflow用户
提问于 2013-10-30 01:37:36
回答 1查看 7.1K关注 0票数 3

假设我有一个灰度(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。为了提高插值结果的质量,这些八度部分重叠在一起。

代码语言:javascript
复制
// 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是高斯二阶导数)。

EN

回答 1

Stack Overflow用户

发布于 2013-10-30 07:21:58

我不得不回到原纸去找出你问题的准确答案。

一些背景第一

SURF利用一种常用的图像分析方法进行感兴趣区域的检测,即blob检测.典型的blob检测方法是高斯法的不同。这有几个原因,第一个原因是模仿人类大脑视觉皮层发生的事情。

高斯(DoG)差分的缺点是计算时间太长,不适用于大面积图像。

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

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

利用积分图像的

在一个完整的图像中,每个像素值是所有像素的总和,所有像素在它上面和它左边的原始图像。积分图像中的左上角像素值因此为0,而积分图像的右下角像素有所有原始像素的值之和。

然后,您只需注意,方框模糊等于给定矩形内所有像素的总和(而不是来自图像的最左上方像素),并应用以下简单的几何推理。

如果您有一个带有角ABCD (左上角、右上角、左下角、右下角)的矩形,则框过滤器的值由以下方法提供:

代码语言:javascript
复制
boxFilter(ABCD) = A + D - B - C,

其中A,B,C,D分别是IntegralImagePixelAt(A) (B,C,D)的捷径。

积分图像在冲浪中的应用

冲浪不直接使用大小为9x9的方框模糊等。相反,它使用的是几个阶高斯导数,或类似Haar的特征。

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

西格玛被修复后,你在感兴趣的像素上对你的9x9窗口进行居中。然后,计算二阶高斯导数在每个方向(水平、垂直、对角线)的输出。图1给出了垂直和对角线滤波器的图解。

Hessian行列式

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

代码语言:javascript
复制
Det = DxxDyy - (0.9 * Dxy)^2. 

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

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19672315

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档