【问题标题】:OpenCV C++ - findHomography values meaningOpenCV C++ - findHomography 值的含义
【发布时间】:2014-08-28 22:51:30
【问题描述】:

我已经检查了 stackOverflaw,尤其是在这个 link 中,但它没有回答我的问题。

我使用 Ransac 和 OpenCv 计算单应性以匹配两张图片。 这里的代码对应:

Mat H = findHomography( obj, scene, CV_RANSAC,3);

std::cout << "Size of homography " << *H.size << std::endl ;

//Print homography
for (int i=0;i<H.rows;i++){
    for (int j=0;j<H.cols;j++){

        std::cout << "valeur H : "  << (int)H.at<double>(i,j) << endl;
    }
}
int N=1;
const double det = H.at<double>(0, 0) * H.at<double>(1, 1) - H.at<double>(1, 0) * H.at<double>(0, 1);
std::cout << "Determinant homography : " << det << std::endl;

为了一个好的匹配(完全相同的图片),我在我的终端上有这个:

单应性3的大小

值 H : 1

值 H : 0

值 H : 0

值 H : 0

值 H : 1

值 H : 0

值 H : 0

值 H : 0

值 H : 1

行列式单应性:1

对于一个糟糕的匹配(两张不同的图片),我有这个:

单应性3的大小

值 H : 0

值 H : 0

价值 H : 241

值 H : 0

值 H : 0

价值 H : 277

值 H : 0

值 H : 0

值 H : 1

行列式单应性:0.00533235

我不明白这个结果。有人可以解释一下吗?我想使用这些值来确定这是否匹配。我预计在第一种情况下只有 1 个,但没有。

我想,我在没有真正理解的情况下使用 Homography 和 Ransaw。我在网上查过,但它很复杂,所以如果你也有很好的解释,我接受。

谢谢。

【问题讨论】:

    标签: c++ opencv matching homography ransac


    【解决方案1】:

    根据openCV documentation,findHomography '找到两个平面之间的透视变换'。这意味着它能够计算从不同位置拍摄的两个图像(相同(校准)板)的透视变换。

    如果您在比较两组完全不同的图像点,它将无法找到这样的转换。

    【讨论】:

      【解决方案2】:

      H 是一个矩阵。在第一种情况下,H 是单位矩阵 [[1,0,0],[0,1,0],[0,0,1]。也就是说,没有变化。

      在第二种情况下,您似乎只是在 x 中进行了 241 的平移,在 y 中进行了 277 的平移。但是在 x 和 y 中没有表示,因为 (H=[[a,0,241],[0,b,277],[0,0,1]]) 'a' 和 'b' 为零。应该是出了点问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-12-26
        • 1970-01-01
        • 1970-01-01
        • 2014-09-01
        • 2016-01-31
        • 1970-01-01
        • 2014-10-30
        • 1970-01-01
        相关资源
        最近更新 更多