从对象的不同角度找到一个好的单应性?

Posted

技术标签:

【中文标题】从对象的不同角度找到一个好的单应性?【英文标题】:Find a good homography from different point of view of objects? 【发布时间】:2012-07-15 20:19:29 【问题描述】:

我正在使用特征提取 (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 只是其中一个我对它的知识绝对为零的主题,哈哈。祝你好运:p 【参考方案1】:

要找到良好的单应性,您需要准确匹配关键点。你需要 4 场比赛。

最常见的方法是 DLT 与 RANSAC 相结合。 DLT 是一种线性变换,可以找到将关键点投影到场景中的单应性 3x3 矩阵。 RANSAC 会找到满足数学模型的最佳内点/异常值集,因此它将找到最好的 4 个点作为 DLT 的输入。

编辑

您需要找到稳健的关键点。 SIFT 应该做到这一点,规模和视角不变。我认为您不需要使用不同的图像进行训练。找到平均单应性没有意义。您需要为检测到的对象找到唯一的单应性,并且该单应性将是标记和检测到的对象之间的转换。单应性是精确的,寻找均值是没有意义的。

【讨论】:

【参考方案2】:

您是否尝试过从对象视图中获取关键点的方法: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/

【讨论】:

一个解决方法是从对象的各种比例(视图)中提取关键点,以获得一些关键点的比例不变性。如果您对其他转换而不是缩放执行相同的过程,也许您可​​以从中获得一些不错的关键点匹配。【参考方案3】:

我认为这样做没有意义,因为当您谈论单应性时,一对图像 A 和 B 与一对图像 B 和 C 无关。您将获得不同的良好匹配集和不同的单应性,但单应性将是不相关的,并且错误最小化不会有任何意义。

所有最小化都必须在匹配、关键点和描述符范围内,仅考虑这对图像。

有一个类似于您在 FREAK 描述符中提出的想法。您可以使用一组图像训练选定的对。这意味着 FREAK 将根据一组图像决定提取描述符的最佳模式。在本次培训之后,您应该会找到更强大的数学,从而为您提供更好的单应性。

【讨论】:

以上是关于从对象的不同角度找到一个好的单应性?的主要内容,如果未能解决你的问题,请参考以下文章

opencv cv2.findHomography sift、surf特征匹配 单应性矩阵理解

OpenCV中的特征匹配+单应性以查找对象

单应矩阵是啥?怎么用呀

如何计算两次透视变换后的结果?

OpenCv warp单应性元素的透视意义

通过单应性或solvePnP()函数估计相机位姿