组装类Haar滤波器进行边缘检测

时间:2014-12-05 13:45:00

标签: image-processing computer-vision convolution edge-detection

在位于此link处的“B.使用类Haar特征检测垂直边缘”的论文中,它提到使用类似Haar的内核以获得结果图像 它以Sobel算子的方式强调输入图像中的垂直或水平边缘。我理解Haar特征的方式是它们输出白色矩形的像素总和与灰色/黑色矩形的像素之和的差异。我无法确定生成的Haar内核的锚点(因为文中提到的尺寸是6 x 6)。我目前的理解是,如果我采用纸张中提到的垂直边缘遮罩,得到的6 x 6遮罩将是
  1,1,1,-1,-1,-1
  1,1,1,-1,-1,-1
  1,1,1,-1,-1,-1
  1,1,1,-1,-1,-1
  1,1,1,-1,-1,-1
  1,1,1,-1,-1,-1
Vertical edge mask

如果对此有更多了解的人可以帮助我解决这个问题(内核的样子以及如何进行卷积以获得边缘图imap)我将非常感激。
感谢信。

2 个答案:

答案 0 :(得分:2)

根据论文Vehicle Detection Method using Haar-like Feature on Real Time System中提供的信息,我无法说明小组是如何完成的。但是我可以就如何实现这一点提出建议。

类似于haar的特征与卷积内核之间的主要区别在于类似haar的特征具有“固定位置”'在将内核应用于每个像素时,在图像内。

卷积核通常将像素的局部邻域映射到0-255之间的值。然而,类Haar特征定义了从整个图像到单个值的映射。即将每个像素的总和偏置为-1,0,1。这种偏差取决于图像中像素的位置。

将卷积内核转换为一组要素

也就是说,我们可以为单个像素X扩展卷积内核,并使其看起来类似于类似于haar的特征:我们通过计算内核中给出的所有像素的总和来映射整个图像对于X和0的邻域。如果我们对图像中的所有像素执行此操作,我们最终会得到宽度*高度,许多要素将它们组合在一个大的特征向量中。显然,它们拥有卷积所具有的相同数量的信息。但是,我们失去了轻松访问“起源”的能力。一个特征,意味着内核连接到哪个像素以计算此特征。此信息已编码'在该特征的定义范围内。

将一组要素转换为卷积内核

那么我们可以逆转上述过程吗?对于一般功能,这是不可能的。在上面给出的特征的情况下,我们可以将非零像素值作为卷积核。如果选择好功能集,我们将最终为每个功能提供相同的内核。然后是的,我们可以从功能集中获取内核。此外,我们可以找到'起源'通过平均特征地图中每个非零像素的位置来确定特征。

如果我们有类似哈尔的功能,那么答案很方便在论文中给出。卷积内核的大小为6 x 6,左半部分为1,右半部分为-1,正如您所建议的那样。 (对于另一个掩码,顶部为1,底部为-1。)现在,这个6 x 6内核的中心将是3.5 x 3.5,这不是像素值。

此外,定义为内核的映射不会映射到0-255。这可以通过缩放结果或应用阈值来修复。第二个会丢失一些信息,但可能会提供更稳定的结果。

现在的关键问题是选择哪些功能以便获得类似于haar的功能边缘"在他们看到的图像'图5?换句话说,必须在哪些位置评估内核?最好的办法是将内核附加到图像中4个像素的每个角落。这样,检测到的边缘存在于像素之间,这在某种程度上是有意义的,因为边缘由两个(或更多)像素之间的梯度限定。 请注意,生成的图像将比原始图像少1行1列。但是,结果值与边界类似,两个边界之间的所有内容都是相同的对象'。

另一种方法是选择内核的(3,3)位置作为ancor点,并将此点附加到图像中的每个像素,就像eigenchris建议的那样。您也可以选择(1,1)或任何其他点。然而,正如eigenchris所提到的,边缘将出现。因此,要进行正确的分类并选择原始图像的正确区域,您必须考虑内核(真)中心与您选择的中心之间的距离。

答案 1 :(得分:1)

摘自本文(https://www.cs.cmu.edu/~efros/courses/LBMV07/Papers/viola-cvpr-01.pdf)中参考文献[7]的第2部分:

  

两个矩形特征的值是两个矩形区域内像素之和的差值。

所以你对内核的解释是正确的。我只能假设他们将锚点放在(3,3)处,但这会导致边缘略微向上并显示在“真实”位置的左侧。