SIFT / SURF / ORB用于简单图案的检测和定位

我的项目集中在用固定相机定位几个小物体。 我绘制了一些清晰,简单的图形图案图像(如此),将它们打印出来并尝试在图像中检测它们。 我直截了当的方法:

  • 用于初级分割的颜色掩蔽和斑点检测。 获取模式的可能位置[这工作正常,我猜]
  • 对这些小图像块运行SIFT / SURF / ORB检测,将它们与存储在文件中的图案进行比较。
  • 收集找到的匹配中的关键点坐标,然后计算同源性并获取图像中图案的精确位置/旋转
  • 我使用OpenCV编写Python。 我的ORB + BFMatcher的initcode是:

    pt_detector = cv2.ORB()
    pt_matcher = cv2.BFMatcher(cv2.NORM_HAMMING, crossCheck=True)
    

    对于SIFT + FLANN,我写道:

    pt_detector = cv2.SURF(400)
    FLANN_INDEX_KDTREE = 0
    index_params = dict(algorithm=FLANN_INDEX_KDTREE, trees=5)
    search_params = dict(checks=50)
    pt_matcher = cv2.FlannBasedMatcher(index_params, search_params)
    

    然后我简单地说:

    kp_r, des_r = pt_detector.detectAndCompute(pattern, None)
    kp_o, des_o = pt_detector.detectAndCompute(obj_res, None)
    matches = pt_matcher.match(des_r, des_o)
    

    问题是:探测器在整个样本和模板中找到匹配,尽管它们通常能够检测到该模式,但方向却是混乱的。

    以下是模板图像(左侧)与相机框架中实际找到的图案(右侧)之间的匹配示例。 当然,摄像机图像被遮蔽并设定阈值。 这些来自SIFT + FLANN的10个最佳匹配显然很糟糕。 我已经使用FLANN匹配器和ORB + BFMatcher默认设置尝试了SURF,SIFT,但没有结果。 我想这个问题是在描述符和匹配器的参数中。

    任何人都可以告诉我,我应该如何设置描述符和匹配器来实现简单模式的可靠匹配? 或者也许有另一种方法来完成这项任务?

    链接地址: http://www.djcxy.com/p/61077.html

    上一篇: SIFT/SURF/ORB for detection and orientation of simple pattern

    下一篇: Detect black ink blob on paper