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