三角化得到深度值

下面这个也要读读

多视图几何总结——三角形法_基于l无穷范数极小化的多视图三角测量_Leo-Peng的博客-CSDN博客

一 :三角化的提出

三角化最早由高斯提出,并应用于测量学中。简单来讲就是:在不同的位置观测同一个三维点P(x, y, z),已知在不同位置处观察到的三维点的二维投影点X1(x1, y1), X2(x2, y2),利用三角关系,恢复出三维点的深度信息z。

二: 三角化求解

(1) 利用叉乘进行消元进行求解

s1x1 = s2Rx2 + t                                公式(1)

左右两边同时乘以x1的反对称矩阵,可得:

s1x1^x1 = 0 = s2x1^Rx2 + x1^t         公式(2)

由上式可解得s2,

将s2代入公式(1),可求得s1

该方法也是视觉slam十四讲那本书里讲解三角化里提到的方法。

(2) 线性三角化法

VINS-Mono中相关代码

void FeatureManager::triangulatePoint(Eigen::Matrix<double, 3, 4> &Pose0, Eigen::Matrix<double, 3, 4> &Pose1,Eigen::Vector2d &point0, Eigen::Vector2d &point1, Eigen::Vector3d &point_3d)
{Eigen::Matrix4d design_matrix = Eigen::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);Eigen::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);
}

ORB-SLAM21中的三角形法的代码如下:

void Initializer::Triangulate(const cv::KeyPoint &kp1, const cv::KeyPoint &kp2, const cv::Mat &P1, const cv::Mat &P2, cv::Mat &x3D)
{cv::Mat A(4,4,CV_32F);A.row(0) = kp1.pt.x*P1.row(2)-P1.row(0);A.row(1) = kp1.pt.y*P1.row(2)-P1.row(1);A.row(2) = kp2.pt.x*P2.row(2)-P2.row(0);A.row(3) = kp2.pt.y*P2.row(2)-P2.row(1);cv::Mat u,w,vt;cv::SVD::compute(A,w,u,vt,cv::SVD::MODIFY_A| cv::SVD::FULL_UV);x3D = vt.row(3).t();x3D = x3D.rowRange(0,3)/x3D.at<float>(3);
}

(3) 解二元一次方程

  • 视觉slam十四讲单目重建深度滤波部分代码。利用Cramer's法则,

按照对极几何中的定义,设x1, x2为两个特征点的归一化坐标,则它们满足:

s1x1 = s2Rx2 + t                                         公式(1)

=> s1x1 - s2Rx2 = t                                    公式(2)

对公式(2)左右两侧分别乘以x1T,得:

s1x1Tx1 - s2x1TRx2 = x1T t                       公式(3)

对公式(2)左右两侧分别乘以(Rx2)T,得:

s1(Rx2)Tx1 - s2(Rx2)TRx2 = (Rx2)T t       公式(4)

由公式(3)和公式(4)可以联立,然后可以利用Cramer's法则(参见线性代数书)进行求解。

如下是对应的代码

  • 在SVO2中的实现如下

bool depthFromTriangulation(const SE3& T_search_ref,const Vector3d& f_ref,const Vector3d& f_cur,double& depth)
{Matrix<double,3,2> A; A << T_search_ref.rotation_matrix() * f_ref, f_cur;const Matrix2d AtA = A.transpose()*A;if(AtA.determinant() < 0.000001)return false;// d = - (ATA)^(-1) * AT * tconst Vector2d depth2 = - AtA.inverse()*A.transpose()*T_search_ref.translation();depth = fabs(depth2[0]);return true;
}

[转] 三角化求深度值(求三位坐标)相关推荐

  1. matlab求pi值的三种方法

    https://www.icourse163.org/learn/CSU-1002475002?tid=1450231442#/learn/content?type=detail&id=121 ...

  2. matlab trangle,Triangle-of-Point-Cloud Matlab 三维点云三角化 不是平面域的三角化 是三维点云三角化 亲身测试绝对可用! - 下载 - 搜珍网...

    Triangle of Point Cloud/ Triangle of Point Cloud/Matlab点云三角化/ Triangle of Point Cloud/Matlab点云三角化/Bl ...

  3. 广义表求深度与求长度

    头文件 #include<stdio.h> #include<stdlib.h>#define Status bool #define OVERFLOW 0 #define O ...

  4. 非线性优化Ceres手动求导数值求导解析求导使用示例

    参考Ceres官方文档http://www.ceres-solver.org/nnls_tutorial.html#hello-world 实现手动求导进行非线性优化. 1.问题描述 假设下面曲线 y ...

  5. c语言编程求弧度值,求弧度计算方法.编程方面,弧度计算公式

    C语言专题--标准库1 三角函数 double sin (double); double cos (double); double tan (double); 2 反三角函数 double asin ...

  6. 三维点云质心与三角化 — python open3d

    1 质心介绍 质心概念与重心的计算方式相同.如下所示:                                          (1) 即                           ...

  7. 今夜喜雨 | 直线线性三角化理论

    雨夜,用了两个小时的时间终于推导了直线三角化的公式.直线三角化? 是的,即通过两帧的匹配直线得到空间直线的端点,如果端点严格匹配那么就是点的三角化,你可以从<SLAM十四讲>一书或者其他的 ...

  8. 三. 2d-2d三角化求路标point

    int main(int argc, char** argv) { Mat img_1 = imread("1.png"); Mat img_2 = imread("2. ...

  9. 求数组中间值的三种方法

    目录 1. 使用右移运算符 (>>) 来计算数组中间值 方法一: Mid = (L+R) / 2 (存在局限性) 方法二:Mid = L + (R-L) / 2 方法三:  Mid = L ...

最新文章

  1. 什么是ownership?
  2. MVC框架内容-视图
  3. Cissp-【第7章 安全运营】-2021-3-15(707页-821页)
  4. java writeboolean_Java DataOutputStream writeBoolean()方法(带示例)
  5. js原生实现点击事件只创建一个元素
  6. 晨风机器人对接php_php封装实现钉钉机器人报警接口的示例代码
  7. Messari:自2019年,DeFi领域因黑客攻击损失超2.84亿美元资产
  8. 使用ztree展示树形菜单结构
  9. oracle数据的启动
  10. java如何动态添加数组数据_Java动态数组添加数据的方法与应用示例
  11. 三个常用的apk分析网站对比:VirusTotal、哈勃、摸瓜
  12. 外文文献翻译一条龙 -对于毕设翻译贼有用
  13. 使用python统计excel两文件数据,excel公式为countif
  14. 国内常用公共DNS服务器、各省运营商DNS服务器汇总
  15. Linux Deepin 12.12 正式版本发布--焕然一新,即可惊艳!
  16. 2022中国汽车测试及质量监控博览会
  17. 牛客网前端刷题(三)
  18. 优秀的加密方案-软件加密技巧
  19. 淘口令解析api接口_淘口令解析-super19911115的博客-51CTO博客
  20. 康乃德生物拟最高募资1.8亿美元:产品尚未上市,累计亏损11亿元

热门文章

  1. python迭代器问题
  2. SQL数据库三种删除方式
  3. 软件测试到底是选择自学还是报培训机构(纯个人经验分享)----分享给正在迷茫的学弟学妹们!
  4. 全新DR5超级汉化加强版来了, 一键即可完成大师级磨皮
  5. 常见文件错误,NotADirectoryError: [WinError 267] 目录名称无效。PermissionError: [WinError 5] 拒绝访问。
  6. 面试者如何回应面试官问的「你有哪些要问我的?」
  7. 将1~100的数字放到10*10的表格中
  8. 安装Adams 2019遇到的坑
  9. 【集成电源开关拓扑系列二---负载开关】
  10. CSS鼠标悬停div加边框效果