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

  • 彩色遮罩和斑点检测主要分割 . 获取模式的可能位置[这个工作正常,我猜]

  • 对这些小图像块执行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)

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

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

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