(秋招准备)三角化复习

文章介绍了三角化在计算机视觉中的应用,特别是在双目视觉SLAM中的角色。通过SVD奇异值分解解决四元方程组,实现从平面坐标到世界坐标的转换,从而三角化得到特征点的空间位置。VINS框架中的代码示例展示了这一过程,包括构建设计矩阵和执行归一化。
摘要由CSDN通过智能技术生成

用SVD分解继续宁特征点三角化

三角化又叫三角测量,本质是用相机的运动估计特征点的空间位置,发生在估计得到帧间运动之后(单目情况)。三角测量是指,通过在两处观察同一个点的夹角,确定该点的距离。由于双目本身就能得到视角不同的两帧图像,所以找到左右双目相机的图像对应的特征点就可以直接进行三角测量。RGB-D相机直接使用物理手段得到深度值,有专门的红外传感器来获得深度。

编辑切换为居中

添加图片注释,不超过 140 字(可选)

在视觉SLAM14讲中,有关深度的求解,如上,就是使用一个等式来分别求解x1和x2的深度值,然后通过深度值来恢复点的空间坐标。

SVD方法:

编辑切换为居中

添加图片注释,不超过 140 字(可选)

这里首先将平面坐标和世界坐标进行表示,然后利用平行的性质,来进行叉积为0的表达。

编辑切换为居中

添加图片注释,不超过 140 字(可选)

以上为叉积的表达,得到了两个等式。

编辑切换为居中

添加图片注释,不超过 140 字(可选)

左目2个方程,右目两个方程,通过四个方程来求解世界坐标,即达到了三角化的目的。

void GlobalSFM::triangulatePoint(Eigen::Matrix<double, 3, 4> &Pose0, Eigen::Matrix<double, 3, 4> &Pose1,

Vector2d &point0, Vector2d &point1, Vector3d &point_3d)

{

// 通过奇异值分解求解一个Ax = 0得到

Matrix4d design_matrix = Matrix4d::Zero();

design_matrix.row(0) = point0[0] * Pose0.row(2) - Pose0.row(0);

design_matrix.row(1) = point0[1] * Pose0.row(2) - Pose0.row(1);

design_matrix.row(2) = point1[0] * Pose1.row(2) - Pose1.row(0);

design_matrix.row(3) = point1[1] * Pose1.row(2) - Pose1.row(1);

Vector4d triangulated_point;

triangulated_point =

design_matrix.jacobiSvd(Eigen::ComputeFullV).matrixV().rightCols<1>();

// 齐次向量归一化

point_3d(0) = triangulated_point(0) / triangulated_point(3);

point_3d(1) = triangulated_point(1) / triangulated_point(3);

point_3d(2) = triangulated_point(2) / triangulated_point(3);

}

vins里面的代码如上,上面design_matrix相关的就是通过叉积进行的等式表达,然后求解世界坐标即可成功三角化。最后再进行一步齐次向量归一化即可。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值