OpenCV:findHomography生成一个空矩阵

OpenCV: findHomography generating an empty matrix

本文关键字:一个 findHomography OpenCV      更新时间:2023-10-16

使用findHomography():时

Mat H = findHomography( obj, scene, cv::RANSAC , 3, hom_mask, 2000, 0.995 );

有时,对于某些图像,得到的H矩阵保持为空(H是UINT8,1x0x0)。然而,两张图像之间显然存在匹配(看起来检测到了良好的关键点匹配),就在不久前,两张具有相似关键点响应的相似图像生成了相关矩阵。输入参数"obj"answers"scene"都是包含各种坐标的Point2f的向量。

这是一个常见的问题吗?或者你认为某个地方可能潜伏着一只虫子?就我个人而言,我已经处理了数百张存在匹配的图像,虽然我有时看到过糟糕的匹配,但这是我第一次得到空矩阵。。。

编辑:也就是说,即使我的眼睛认为图像对中应该有匹配,我也意识到这可能会混淆图像的某个部分和另一个部分,也许确实没有"好"的匹配。

所以我的问题是:当findHomography()找不到合适的同态时,它是如何表现的?它是返回一个空矩阵,还是总是给出一个单应性,尽管很差?我只想知道我是否遇到了标准行为,或者我自己的代码中是否有漏洞。

好吧,cv::findHomography()函数可以从2.4.5版本开始返回空的单应矩阵(0列x 0行)。根据一些观点,这似乎只有在cv::RANSAC标志通过时才会发生。

请参阅此处报告的问题:

这很可能是因为我们放入了新的实验版本Levenberg-Marquardt求解器,工作不太好(可能是由于对于一些错误)

我建议在任何地方使用之前检查计算的单应性:

cv::Mat h = cv::findHomography(...)
if (!h.empty())
{
    // Use it
}