我的项目集中在使用固定相机定位几个小物体。我画了一些清晰,简单的图形图案图像(如this),将它们打印出来并尝试在图像中检测它们。我直截了当的方法:
我用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,没有结果。我想问题出在描述符和匹配器的参数中。
任何人都可以告诉我应该如何设置描述符和匹配器以实现简单模式的强大匹配?或者也许有另一种方法来完成这项任务?