从不同物体视角找到一个好的单应性矩阵?

11

我正在使用特征提取(sift、orb)进行物体检测。

我想从对象(训练图像)的不同视角提取ORB特征,然后将它们与查询图像匹配。

我面临的问题是:如何从来自图像不同视角的关键点中创建良好的单应性,这些关键点当然具有不同的大小?

编辑

我考虑为每个训练图像创建一个单应性,例如获得3-4个匹配项,然后计算一些“平均”单应性...

当您从每个训练图像仅获得1-2个匹配项时,问题就出现了,在那一点上,您甚至无法创建1个单应性。

创建单应性的代码

  //> For each train images with at least some good matches ??
  H = findHomography( train, scene, CV_RANSAC );
  perspectiveTransform( trainCorners, sceneCorners, H);

当我读这个时,我的眼睛都发直了 :p - John Humphreys
4
我对这个话题完全不了解,哈哈。祝你好运 :p - John Humphreys
3个回答

8
我认为对于同态问题,一对图像A和B与另一对图像B和C没有任何关系,因此做这样的事情没有意义。您将获得不同的好匹配集和不相关的同态变换,因而错误最小化将毫无意义。
所有最小化操作都必须在匹配、关键点和描述符之间进行,只考虑图像对之间的关系。
在FREAK描述符中有一个类似您所提到的想法。您可以使用一组图像来训练所选的图像对。这意味着基于一组图像,FREAK会决定提取描述符的最佳模式。在此训练之后,您应该能够找到更为稳健的匹配,从而给您带来更好的同态变换。

4
为了找到一个好的单应矩阵,你需要准确匹配关键点。你需要4个匹配点。
最常用的方法是DLT与RANSAC相结合。DLT是一种线性变换,可以找到将你的关键点投影到场景中的单应矩阵3x3矩阵。RANSAC找到最佳的内点/外点集,以满足数学模型,因此它将找到最佳的4个点作为DLT的输入。
编辑:
你需要找到强健的关键点。SIFT被认为可以做到这一点,具有尺度和透视不变性。我认为你不需要使用不同的图像进行训练。找到平均单应矩阵没有意义。你需要找到一个检测到的对象的唯一单应矩阵,而该单应矩阵将是标记和检测到的对象之间的转换。单应矩阵是精确的,找到平均值没有意义。

1

您尝试过从物体视图中获取关键点的方法吗:train_kps_1、train_kps_2... 然后将这些数组与场景进行匹配,然后从这些几个数组中选择最佳匹配结果,形成一个好的匹配结果数组。最后,在查找单应性时使用该结果作为“训练”。

关键在于如何选择最佳匹配结果,这是一个不同的问题,您可以在此处找到一个不错的答案:

http://answers.opencv.org/question/15/how-to-get-good-matches-from-the-orb-feature/

也许在这里:

http://answers.opencv.org/question/2493/best-matches/


1
一种解决关键点缺乏尺度不变性的方法是从物体的各个尺度(视图)提取关键点。如果您使用其他转换而不是尺度执行相同的过程,也许可以得到一些不错的关键点匹配结果。 - Rui Marques

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接