使用SURF检测低光图像

时间:2013-11-06 06:12:59

标签: c++ opencv surf light object-detection

我一直在使用the OpenCV website中的代码来检测对象。我是OpenCV和图像处理的初学者,并且一直在尝试理解SURF的工作。我有一些疑问。

1.我一直在使用彩色图像进行检测,结果一直很好。有人建议使用灰度图像,是否会提高算法的性能?

2.在代码中,仅通过匹配距离小于3 * Mindist进行过滤的意义是什么?

for( int i = 0; i < descriptors_object.rows; i++ )
{ if( matches[i].distance < 3*min_dist )
     { good_matches.push_back( matches[i]); }
}

3.尽管在高照度图像中检测是稳健的(我使用900作为粗糙值),但是在低光条件下相同的图像不会被检测到具有相同的粗糙值,是否有办法同时使用相同的hessian值和两个条件的相同参考图像?cv :: equalizeHist()是否有用?如果是,有人可以建议我与SURF检测代码集成的方法吗?

返回匹配的4.DMatch结构有一个名为distance的参数,它返回描述符之间的距离。这是什么意思?是否有返回距离的单位?

5.我还想知道在物体检测的时间复杂度,比例和旋转不变性方面是否有比SURF更好的描述符。

提前感谢您的时间和回复。

1 个答案:

答案 0 :(得分:0)

  1. SURF适用于灰度图像。

  2. 有很多假随机匹配(因为如果你在img1中有100个功能,你将总是有100个匹配)并且过滤它们是个好主意。但更好的方法是检查相对距离 - 如何在Use Euclidean distance in SURF

  3. 中完成
  4. 是的,可以使用它。您只需使用修改后的图像而不是原始图像 由于低像素强度和暗区中的低对比度,您可以检测到少量特征,这会降低检测器响应。当应用于暗图像时,直方图均衡化增加了对比度,这增加了低于阈值的局部最大值的数量。

    cv :: Mat img1,img1histEq; CV :: equalizeHist(IMG1,img1histEq);

  5. SURF可以被视为128维向量。距离是某些空间中两个这样的向量之间的距离,通常是欧几里德 - 相应向量元素之间的平方差的总和。其他指标,例如也可以使用L1,但Euclidean最常用于SURF。

  6. SIFT在不变性方面表现更好,但速度慢3倍。您可以找到不同描述符herehere的比较。 目前尚不清楚“物体检测”是什么意思。你究竟需要做什么?