用于检测和定向简单模式的SIFT / SURF / ORB

时间:2017-02-08 14:37:44

标签: opencv sift template-matching orb

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

  1. 用于主要分段的颜色掩蔽和斑点检测。得到 模式的可能位置[这很好,我猜]
  2. 对这些小图像补丁运行SIFT / SURF / ORB检测以进行比较 它们带有存储在文件中的模式。
  3. 收集找到的匹配中关键点的坐标,然后计算同源性并获得图像中图案的精确位置/旋转
  4. 我用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)
    

    问题:探测器在整个样本和模板上找到匹配项,虽然它们通常设法检测到模式,但方向却搞砸了。

    Here's模板图像(左)与相机框架中实际找到的图案(右)之间的匹配示例。当然,摄像机图像被屏蔽和设定阈值。来自SIFT + FLANN的这10场最佳比赛非常糟糕。我在默认设置下尝试过SURF,SIFT和FLANN匹配器以及ORB + BFMatcher,没有结果。我想问题出在描述符和匹配器的参数中。

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

0 个答案:

没有答案