优化哈里斯角点探测器

时间:2014-10-19 18:18:44

标签: algorithm computer-vision convolution corner-detection

我正在尝试优化我的Harris角点检测器,使其足够快,以便最终用于SLAM应用程序的实时特征提取。

传统的哈里斯角探测器遵循以下步骤:

  1. 使用图像卷积核( k_dx k_dy )计算图像导数(渐变)Ix和Iy。
  2. 计算二阶导数Ixx = Ix ^ 2,Iyy = Iy ^ 2和Ixy = Ix * Iy。
  3. 使用高斯核( k_gaussian )过滤步骤2中的三个二阶导数。
  4. 使用文献中所述的公式计算Harris响应。
  5. 到目前为止一切顺利。我已经实施了上述步骤并制定了工作计划。但是我们知道卷积是一个可交换的代数,意思是:

    1. f#g = g#f
    2. f#(g#h)=(f#g)#h
    3. f#(g + h)=(f#g)+(f#h)
    4. 常数*(f#g)=(常数* f)#g
    5. 其中(#)是卷积运算。

      因此,本质上我们可以组合各种内核以减少计算时间 我希望利用这个优势将步骤(1)中使用的图像梯度内核与步骤(3)中使用的高斯内核相结合,以减少计算时间。不幸的是,第(2)步阻止了我这样做,如:  [( IM k_dx )^ 2]# k_gaussian =! ( IM k_dx k_gaussian )^ 2

      其中 IM 是图片。所以这两个内核无法组合。

      我的问题:有没有办法做到这一点,还是根本不可能?如果不可能,那么有没有办法计算近似真正答案的组合内核。即使它是一个很差的近似值,也可能值得降低计算成本。

      如果您想知道,我已经在使用CUDA在GPU上执行我的图像卷积并且角点检测器已经相当快。但我需要进一步改进它,以便为剩余的SLAM算法分配更大的时间片。

1 个答案:

答案 0 :(得分:2)

使用卷积的内核的直接组合是不可能的。卷积不能找到Ixx = Ix ^ 2,Iyy = Iy ^ 2和Ixy = Ix * Iy(它不是线性的)。

优化的一些技巧可以在“LOCOCO:低复杂度角探测器”中找到