OpenCV本身不提供RANSAC功能,或者至少以这种形式提供,您可以调用它并完成它(例如cv::ransac(...)).能够使用RANSAC的所有函数/方法都有一个启用它的标志.然而,如果您实际上想要在估算单应性/基本矩阵之后使用内部RANSAC计算其他内容,例如在Octave或类似软件/点库中创建一个好的绘图,则应用其他算法并不总是有用.剩余的过滤匹配等.
在匹配两个图像之后,获得匹配的矢量.与此同时,我们当然在匹配过程中使用了两组关键点(每个图像一个).使用匹配和关键点,我们创建两个点向量(例如cv::Point2f points)并将它们传递给findHomography().从这篇文章和这篇文章中我发现了如何使用掩码标记内部函数,我们传递给该函数.掩码内的每一行都与内部/异常值有关.但是我无法弄清楚如何使用我的两组点中的行索引信息.查看OpenCV的源代码并没有让我太过分.In findFundamental()(类似于findHomography()它的签名和掩码部分)它们使用compressPoints(),它似乎以某种方式将我们作为输入的两个集合(源和目标点)合并为一个.在测试以确定掩模的性质时,我尝试了2组匹配点(转换cv::Keypoints为cv::Point2f- 标准程序).每组包含300分,所以总共有600分.返回的掩码包含300行(对于此主题,值并不重要).
编辑:在写这篇文章时,我发现了答案(见下文),但决定发布这个问题,以防有人需要尽快并以紧凑的形式提供这些信息.请注意,我们仍然需要一个支持RANSAC的OpenCV功能.因此,如果您有一组点但无意计算单应性或基本矩阵,这显然不是方法,我敢说我无法在OpenCV的API中找到任何有用的东西,可以帮助避免这个障碍,因此您需要使用外部图书馆.
我在Python中使用OpenCV的findHomography函数(带有RANSAC)来查找两组点之间的转换。
查看文档,输出是一个掩码和一个转换矩阵。
该文档尚不清楚掩码代表什么以及矩阵的结构。
输出掩码中的1是适合找到的变换的点还是被忽略的点?您能解释一下3x3输出转换矩阵的组成吗?
在此先感谢您,如果我错过了一些解释此问题的文档,则对不起。