我正在尝试计算两个图像之间的相对姿势:并且我正在使用单应性来过滤特征匹配。我有一个相当平面的场景,只要两个图像之间的平移仅限于 X 和 Y 轴(opencv 约定),基于单应性的相对姿态估计就可以非常准确地工作。
一旦我开始使用另一个相机沿 Z 方向移动(第一个相机保持不变),相对姿势估计就无法正常工作,它会继续以非常低的 Z 平移估计姿势。尽管场景是平面的,但当沿 Z 方向平移时,单应性是否不适用?
在这里附上一张图片:我将第二个相机移动到两个正方形中:一个在 XY 平面上,一个在 XZ 平面上。红十字是相机平移的实际姿势(将其视为地面实况),蓝色圆圈是通过基于单应性的 RANSAC 估计的相对姿势。请注意 X 和 Y 方向移动时的精度,以及 Z 方向上的完全失败:所有估计值都接近 z=0 平面。
我将单应矩阵分解为旋转和平移的代码取自这个 StackExchange 答案 https://dsp.stackexchange.com/a/2571/25498
void cameraPoseFromHomography(const Mat& H, Mat& pose)
{
pose = Mat::eye(3, 4, CV_64FC1); //3x4 matrix
float norm1 = (float)norm(H.col(0));
float norm2 = (float)norm(H.col(1));
float tnorm = (norm1 + norm2) / 2.0f;
Mat v1 = H.col(0);
Mat v2 = pose.col(0);
cv::normalize(v1, v2); // Normalize the rotation
v1 = H.col(1);
v2 = pose.col(1);
cv::normalize(v1, v2);
v1 = pose.col(0);
v2 = pose.col(1);
Mat v3 = v1.cross(v2); //Computes the cross-product of v1 and v2
Mat c2 = pose.col(2);
v3.copyTo(c2);
pose.col(3) = H.col(2) / tnorm; //vector t [R|t]
}
这准确吗?单应性矩阵的第三列是否编码完整的 3D 翻译?
尽管场景是平面的,但当沿 Z 方向平移时,单应性是否不适用?
如果你有一个平面场景all它的图像使用
透视相机(无镜头畸变)将与以下关系相关:
同形异义词。这与相机是否旋转或
翻译。
如果存在明显的镜头畸变,则图像将不会
通过同形异义相关。
如果场景是非平面的,那么图像将通过以下方式关联
仅当没有镜头畸变且没有相机平移(仅旋转)时才单应性。
相对位姿估计无法正常工作,它一直以非常低的 Z 平移来估计位姿
使用单应性分解计算的 3D 平移是符合比例的。这意味着返回的平移向量t两个相机之间的平移与真实平移存在比例因子的差异s。很遗憾s是不可恢复的。通常,单目图像的 3D 重建称为metric为此原因进行重建(而不是欧几里得解决了真实比例的重建)。解决s还需要更多信息,例如了解平面上某个点的深度或相机在图像之间移动的距离。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)