Aar*_*mbh 5 opencv multiview computer-vision projective-geometry
我从相同距离的两个相机拍摄的两张图像相距一定距离,拍摄同一个场景.我想计算两个相机之间的真实世界旋转和平移.为了实现这一点,我首先提取了两个图像的SIFT特征并进行匹配.
我现在有基本矩阵和单应矩阵.但是无法继续进行,很多混乱.任何人都可以帮我估算两台相机之间的旋转和平移吗?
我正在使用OpenCV进行特征提取和匹配,单应性计算.
如果你有Homography,那么你也有旋转.一旦你有单应性,很容易得到旋转和平移矩阵.
例如,如果您使用的是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
}
Run Code Online (Sandbox Code Playgroud)
此功能根据包含旋转的单应性计算摄像机姿势.对于进一步的理论信息遵循这个线程.