多视图几何(Multiple-View Geometry)

2019-08-01 01:25发布

我从相同品牌的两个摄像头拍摄的两张图片放在相隔一定距离,拍摄同一场景。 我想计算两个摄像机之间的现实世界中的旋转和平移。 为了实现这一点,我第一次提取两个图像的SIFT特征和匹配他们。

我现在已经基本矩阵单应矩阵 。 但是无法进一步进行,很多困惑。 任何人可以帮助我估计两个摄像机之间的旋转和平移

我使用的特征提取和匹配,单应计算OpenCV的。

Answer 1:

如果你有同形,那么你还可以旋转。 一旦你有单应很容易获得旋转和平移矩阵。

例如,如果你正在使用OpenCV的C ++:

param[in] H
param[out] pose
void cameraPoseFromHomography(const Mat& H, Mat& pose)
{
    pose = Mat::eye(3, 4, CV_32FC1);      // 3x4 matrix, the camera pose
    float norm1 = (float)norm(H.col(0));  
    float norm2 = (float)norm(H.col(1));  
    float tnorm = (norm1 + norm2) / 2.0f; // Normalization value

    Mat p1 = H.col(0);       // Pointer to first column of H
    Mat p2 = pose.col(0);    // Pointer to first column of pose (empty)

    cv::normalize(p1, p2);   // Normalize the rotation, and copies the column to pose

    p1 = H.col(1);           // Pointer to second column of H
    p2 = pose.col(1);        // Pointer to second column of pose (empty)

    cv::normalize(p1, p2);   // Normalize the rotation and copies the column to pose

    p1 = pose.col(0);
    p2 = pose.col(1);

    Mat p3 = p1.cross(p2);   // Computes the cross-product of p1 and p2
    Mat c2 = pose.col(2);    // Pointer to third column of pose
    p3.copyTo(c2);       // Third column is the crossproduct of columns one and two

    pose.col(3) = H.col(2) / tnorm;  //vector t [R|t] is the last column of pose
}

此函数计算德相机单应构成,其中旋转遏制。 对于进一步的理论信息遵循这个线程 。



文章来源: Multiple-View Geometry