【问题标题】:Detection of low light images using SURF使用 SURF 检测低光图像
【发布时间】:2013-11-17 06:59:25
【问题描述】:

我一直在使用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 作为粗麻布值),但在低光照条件下,相同的图像不会以相同的粗麻布值检测到,有没有办法同时使用两种情况下相同的粗麻布值和相同的参考图像?cv::equalizeHist() 有用吗?如果有用,有人可以建议我与 SURF 检测代码集成的方法吗?

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

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

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

【问题讨论】:

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


    【解决方案1】:
    1. SURF 适用于灰度图像。

    2. 有很多错误的随机匹配(因为如果您在 img1 中有 100 个特征,那么您将始终有 100 个匹配)并且过滤它们是个好主意。但更好的是检查相对距离 - 在Use Euclidean distance in SURF 中是如何完成的)

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

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

    4. SURF 可以看作是 128 维向量。距离是某个空间中两个这样的向量之间的距离,通常是欧几里得 - 对应向量元素之间的平方差之和。其他指标,例如L1也可以用,但SURF用的最多的是欧几里得。

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

    【讨论】:

    • 我提供了 OpenCV 网站的链接。至于 SIFT,我听说过它,它非常有效。但是没有更快的替代方案吗?
    • (5) 是对可能替代方案问题的回答。这取决于你的任务。 “我提供了链接”是什么意思?
    • 您能否详细说明一下 equalizeHist() 在低光照条件下如何帮助我使用 SURF?
    • 对不起,我的意思是按照您从同一个代码中询问我的方式进行检测。在存在的各种场景中检测到参考图像。
    • 我已经编辑了答案。你做的不是“检测”,而是匹配两个视图。
    猜你喜欢
    • 2011-11-26
    • 1970-01-01
    • 1970-01-01
    • 2016-06-26
    • 1970-01-01
    • 2016-01-17
    • 2021-07-01
    • 1970-01-01
    • 2020-12-16
    相关资源
    最近更新 更多