OpenCV:findHomography 生成一个空矩阵
OpenCV: findHomography generating an empty matrix
使用findHomography()
时:
Mat H = findHomography( obj, scene, cv::RANSAC , 3, hom_mask, 2000, 0.995 );
有时,对于某些图像,生成的 H 矩阵保持为空(H 是 UINT8,1x0x0)。然而,两幅图像之间显然存在匹配(并且看起来检测到良好的关键点匹配),并且就在前一刻,对于具有相似关键点响应的两幅相似图像,生成了一个相关矩阵。输入参数"obj"和"scene"都是Point2f
的向量,包含各种坐标。
这是一个常见问题吗?或者你认为某个地方可能潜伏着一个错误?就个人而言,我已经处理了数百张存在匹配的图像,虽然我有时看到匹配不佳,但这是我第一次得到一个空矩阵...
编辑: 这就是说,即使我的眼睛认为图像对应该匹配,我意识到它可能会将图像的某些部分与其他部分混淆一个,也许确实没有 "good" 匹配。
所以我的问题是:findHomography()
在无法找到合适的单应性时如何表现?它 return 是一个空矩阵还是它总是会给出一个单应性,尽管是一个非常差的单应性矩阵?我只想知道我是否遇到了标准行为,或者我自己的代码中是否存在错误。
你看,cv::findHomography()
函数可以 return 空单应矩阵(0 列 x 0 行)大约从 2.4.5 版本开始。
根据某些观点,这似乎只有在传递 cv::RANSAC
标志时才会发生。
查看报告的问题 here:
It likely happened because we put in new experimental version of
Levenberg-Marquardt solver, which does not work that well (maybe due
to some bugs)
我建议在任何地方使用之前检查计算的单应性:
cv::Mat h = cv::findHomography(...)
if (!h.empty())
{
// Use it
}
使用findHomography()
时:
Mat H = findHomography( obj, scene, cv::RANSAC , 3, hom_mask, 2000, 0.995 );
有时,对于某些图像,生成的 H 矩阵保持为空(H 是 UINT8,1x0x0)。然而,两幅图像之间显然存在匹配(并且看起来检测到良好的关键点匹配),并且就在前一刻,对于具有相似关键点响应的两幅相似图像,生成了一个相关矩阵。输入参数"obj"和"scene"都是Point2f
的向量,包含各种坐标。
这是一个常见问题吗?或者你认为某个地方可能潜伏着一个错误?就个人而言,我已经处理了数百张存在匹配的图像,虽然我有时看到匹配不佳,但这是我第一次得到一个空矩阵...
编辑: 这就是说,即使我的眼睛认为图像对应该匹配,我意识到它可能会将图像的某些部分与其他部分混淆一个,也许确实没有 "good" 匹配。
所以我的问题是:findHomography()
在无法找到合适的单应性时如何表现?它 return 是一个空矩阵还是它总是会给出一个单应性,尽管是一个非常差的单应性矩阵?我只想知道我是否遇到了标准行为,或者我自己的代码中是否存在错误。
你看,cv::findHomography()
函数可以 return 空单应矩阵(0 列 x 0 行)大约从 2.4.5 版本开始。
根据某些观点,这似乎只有在传递 cv::RANSAC
标志时才会发生。
查看报告的问题 here:
It likely happened because we put in new experimental version of Levenberg-Marquardt solver, which does not work that well (maybe due to some bugs)
我建议在任何地方使用之前检查计算的单应性:
cv::Mat h = cv::findHomography(...)
if (!h.empty())
{
// Use it
}