Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Image processing 如何在积分图像上应用盒形滤波器?(冲浪)_Image Processing_Computer Vision_Surf - Fatal编程技术网

Image processing 如何在积分图像上应用盒形滤波器?(冲浪)

Image processing 如何在积分图像上应用盒形滤波器?(冲浪),image-processing,computer-vision,surf,Image Processing,Computer Vision,Surf,假设我有一个灰度(8位)图像,并假设我有一个从同一图像创建的整体图像。 图像分辨率为720x576。根据SURF算法,每个倍频程由4个盒形滤波器组成,这些滤波器由其一侧的像素数定义 第一个倍频程使用具有9x9、15x15、21x21和27x27像素的滤波器 第二个倍频程使用具有15x15、27x27、39x39和51x51像素的滤波器。第三个倍频程使用具有27x27、51x51、75x75和99x99像素的滤波器。如果图像足够大,并且我猜720x576足够大(右???),则会添加第四个倍频程,5

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

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

// so, we have:
//
// 9x9   15x15  21x21   27x27
// 15x15 27x27  39x39   51x51
// 27x27 51x51  75x75   99x99
// 51x51 99x99 147x147 195x195
问题是:
每个过滤器中的值是什么?我应该硬编码这些值,还是计算它们?
将过滤器应用于积分图像的精确程度(数值)

此外,为了计算Hessian行列式,我发现了两种近似:
det(HessianApprox)=dxdyy− (0.9Dxy)^2和
det(HessianApprox)=dxdyy− (0.81Dxy)^2


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

我必须返回到,以找到您问题的精确答案

先了解一些背景

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

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

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

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

使用积分图像

在整型图像中,每个像素值是原始图像中位于其上方和左侧的所有像素的总和。 因此,积分图像中左上角的像素值为0,积分图像最右下角的像素具有所有原始像素值之和

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

如果有一个带角的矩形ABCD(左上角、右上角、左下角、右下角),则长方体过滤器的值由以下公式给出:

boxFilter(ABCD) = A + D - B - C,
其中A,B,C,D是积分图像像素(A)(分别为B,C,D)的快捷方式

冲浪中的整体图像

SURF不直接使用尺寸为9x9等的长方体模糊。 取而代之的是几个阶的高斯导数,或类似哈尔的特征

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

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

黑森行列式

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

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

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

请参阅本文档第17页


如果你做了一个普通高斯二维卷积的代码,只需使用盒子滤波器作为高斯核,输入的图像将是相同的原始图像而不是整数图像。此方法的结果将与您询问的结果相同。

好的,我理解,但有4个八度音阶和4个滤波器。说我蠢吧,但我还是不知道如何在第一个八度音中使用9x9滤波器。如何计算A、B、C和D?或者A是9x9的正方形,B是15x15的正方形,C是21x21的正方形,D是27x27的正方形?积分图像的像素A是从左上角到A的原始图像所有像素的总和。因此A+D-B-C是。。。。(给自己画张图看看你得到了什么)@Francesco,我听到了,但这样的ABCD矩形可以放在整张图像的任何地方。这是否意味着ABCD=9x9平方?如果是,如何定位积分图像上的ABCD平方以计算A+D-B-C?换句话说,顶点“A”应该放在哪里?忽略边界(目前),总和是正方形中心像素的框过滤器的输出。对于边界,你必须选择卷积要遵循的约定:钳制到边缘、钳制到零、镜像、裁剪无效等等。每种都有其优缺点。哼,不,现在我建议你打开任何关于图像处理的教科书(甚至谷歌),读一读线性框过滤(也称为常数核卷积)及其与积分图像的关系。据我所知,S.O.是在同行之间交换技术要点(或几乎如此),而不是免费教授整个学科。