使用findHomography()
时:
Mat H = findHomography( obj, scene, cv::RANSAC , 3, hom_mask, 2000, 0.995 );
有时,对于某些图像,生成的H矩阵保持为空(H是UINT8,1x0x0)。然而,两个图像之间显然存在匹配(并且看起来好像检测到良好的关键点匹配),并且只是片刻之前,具有相似关键点响应的两个相似图像,生成相关矩阵。输入参数“obj”和“scene”都是包含各种坐标的Point2f
矢量。
这是一个常见问题吗?或者你认为某个小虫可能潜伏在某个地方?就个人而言,我已经处理了数百个存在匹配的图像,虽然我看到有时匹配不佳,但这是我第一次得到一个空矩阵......
编辑:这就是说,即使我的眼睛认为图像对中应该匹配,我也意识到它可能会将图像的某些部分与另一个图像混淆,并且可能存在确实没有“好”的比赛。
所以我的问题是:当findHomography()
无法找到合适的Homography时,它会如何表现?它是返回一个空矩阵还是总是给出单应性,尽管它很差?我只是想知道我是否遇到标准行为或者我自己的代码中是否存在错误。
答案 0 :(得分:7)
嗯,你看,cv::findHomography()
函数可以从2.4.5版本开始返回空的单应矩阵(0 cols x 0行)。
根据一些观点,这似乎只有在传递cv::RANSAC
标志时才会发生。
查看报告的问题here:
可能是因为我们投入了新的实验版本 Levenberg-Marquardt求解器,效果不好(也许是因为 一些错误)
我建议在任何地方使用它之前检查计算出的单应性:
cv::Mat h = cv::findHomography(...)
if (!h.empty())
{
// Use it
}