OpenCV 本身不提供 RANSAC 功能,或者至少以您可以调用它并完成它的形式提供(例如cv::ransac(...)
)。所有能够使用 RANSAC 的函数/方法都有一个启用它的标志。但是,如果您在估计单应性/基本矩阵之后确实想对 RANSAC 计算的内点执行其他操作,例如在 Octave 或类似的软件/点库中创建一个漂亮的图,则这并不总是有用的,在剩余的一组过滤匹配等。
在匹配两个图像后,一个得到一个匹配向量。除此之外,我们当然还有 2 组用于匹配过程的关键点(每个图像一个)。使用匹配和关键点,我们创建了两个点向量(例如cv::Point2f points
)并将它们传递给findHomography()
。从这篇文章和这篇文章中,我发现了如何使用掩码准确地标记内点,并将其传递给该函数。掩码内的每一行都与一个内点/异常值相关。但是我无法弄清楚如何使用我的两组点中的行索引信息。查看 OpenCV 的源代码并没有让我走得太远。在findFundamental()
(类似于findHomography()
它的签名和掩码部分)他们使用compressPoints()
,这似乎以某种方式将我们作为输入的两组(源点和目标点)合并为一个。在进行测试以确定面罩的性质时,我尝试了 2 组匹配点(转换cv::Keypoints
为cv::Point2f
标准程序)。每组包含 300 分,所以我们总共有 600 分。返回的掩码包含 300 行(值对于手头的这个主题并不重要)。
编辑:在写这篇文章时,我发现了答案(见下文),但还是决定发布这个问题,以防有人尽快以紧凑的形式需要这些信息。请注意,我们仍然需要支持 RANSAC 的 OpenCV 功能之一。因此,如果您有一组点但无意计算单应性或基本矩阵,这显然不是方法,我敢说我无法在 OpenCV 的 API 中找到任何有用的东西来帮助避免这个障碍,因此您需要使用一个外部库。