cv::triangulatePoints函数参数

两个相机位姿和特征点在两个相机坐标系下的坐标,输出三角化后的特征点的3D坐标。

注意:输出的3D坐标是齐次坐标,共四个维度,因此需要将前三个维度除以第四个维度以得到非齐次坐标xyz。这个坐标是在相机坐标系下的坐标,以输入的两个相机位姿所在的坐标系为准。

在主函数中,通过把3D坐标重投影到两个相机的归一化平面上,从而计算重投影误差。因此需要再次对xyz坐标同时除以z,以得到归一化平面上的坐标。

1.对极几何

从2张图片中,得到若干个配对好的2d特征点,就可以运用对极几何来恢复出两帧之间的运动.

设P的空间坐标为:

两个像素点p1,p2的像素坐标为:

K为相机内参,R,t为图像1到图像2的旋转矩阵和平移矩阵.

相机姿态估计问题变成以下两步:

  • 根据配对点的像素位置求出R或者F
  • 根据E或F求出R,t

2.本质矩阵

根据本质矩阵

定义,这是一个3*3的矩阵,经典是使用8点法来求解.求解出E后,可通过奇异值分解得到相机的运动R和t.

注意:求出的E和t具有尺度一致性,通常把t进行归一化.

3.尺度不确定性

对t的长度归一化,直接导致单目视觉的尺度不确定性.解决办法可以通过SLAM的初始化来解决,初始时,使机器人平移一段距离,然后以此距离作为平移的单位.初始化之后,就可以使用3D-2D来计算相机运动了

工程中,通常匹配的点比较多,这时可以通过构造最小二乘法来进行求解E,但是由于存在误匹配的情况,所以更多的是使用随机采样一致性(RANSAC)来求解

4.三角测距来测量深度

根据对极几何的定义,x1,x2

5.验证

通过方程 对第一帧3D坐标进行重投影,得到第二帧3D坐标
代码为:

Mat pt2_trans = R*( Mat_<double>(3,1) << points[i].x, points[i].y, points[i].z ) + t;

通过4中计算得到的第二帧3D点,除以z得到第二帧相机归一化坐标

pt2_trans /= pt2_trans.at<double>(2,0);

triangulatePoints函数相关推荐

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

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

  2. SLAM基础问题总结(1)

    1.如何对匹配好的点做进一步的处理,更好保证匹配效果 (1)确定匹配最大距离,汉明距离小于最小距离的两倍 (2)使用KNN-matching算法,令K=2.则每个match得到两个最接近的descri ...

  3. 3D视觉(五):对极几何和三角测量

    3D视觉(五):对极几何和三角测量 对极几何(Epipolar Geometry)描述的是两幅视图之间的内在射影关系,与外部场景无关,只依赖于摄像机内参数和这两幅试图之间的的相对姿态. 文章目录 3D ...

  4. 基于高速相机的近地落点三维坐标测试方法

    高速相机可以捕捉到高帧率的图像序列,这使得它们非常适合用于捕获快速运动的物体,如近地落点.要使用高速相机进行近地落点的三维坐标测试,你可以采用立体视觉技术.立体视觉技术的基本原理是使用两台或多台相机从 ...

  5. EmguCV 常用函数功能说明

    AbsDiff,计算两个数组之间的绝对差. dst(I)c = abs(src1(I)c-src2(I)c).所有数组必须具有相同的数据类型和相同的大小(或ROI大小). 累加,将整个图像或其所选区域 ...

  6. 数据库中自定义排序规则,Mysql中自定义字段排序规则,Oracle中自定义字段排序规则,decode函数的用法,field函数的用法

    数据库中自定义排序 场景:有一张banner表,表中有一个status字段,有0, 1, 2三个状态位,我想要 1,0,2的自定义排序(这里是重点),然后再进行之上对sequence字段进行二次排序( ...

  7. Mysql函数group_concat、find_in_set 多值分隔字符字段进行数据库字段值翻译

    Mysql函数group_concat.find_in_set进行数据库字段值翻译 场景 配方表:记录包含的原料 sources表示原料,字段值之间用逗号分隔 原料表:对应原料id和原料名称 现需要查 ...

  8. C++ 笔记(34)— C++ exit 函数

    当遇到 main 函数中的 return 语句时,C++ 程序将停止执行.但其他函数结束时,程序并不会停止.程序的控制将返回到函数调用之后的位置.然而,有时候会出现一些非常少见的情况,使得程序有必要在 ...

  9. C++ 笔记(30)— 友元函数与友元类

    我们知道类的私有成员只能在类的成员函数内部访问,如果想在别处访问对象的私有成员,只能通过类提供的接口(成员函数)间接地进行.这固然能够带来数据隐藏的好处,利于将来程序的扩充,但也会增加程序书写的麻烦. ...

最新文章

  1. faster rcnn结构
  2. Python运算符可不只有加减乘除
  3. php与mysql列表_PHP+Mysql+jQuery实现的查询和列表框选择
  4. JavaScript知识概要
  5. Linux配置自建 YUM 软件存储库
  6. 3dmax如何快速查找丢失贴图,并根据贴图快速找到对应物体
  7. SSM毕设项目汽车4S店管理系统ei9uo(java+VUE+Mybatis+Maven+Mysql)
  8. 485通讯的校验和_MCGS 与 FX3U PLC 之间的无线通讯实例
  9. 软件暴力破解的原理和破解经验
  10. FPS 游戏飞天遁地原理
  11. win10计算机网络共享打不开,win10系统网络和共享中心打不开的详细方案
  12. 面试准备之java8的新特性
  13. linux内存条故障,linux – 如何从MCE消息中找到故障内存模块?
  14. 这年头居然还有用360卫士清理垃圾的?那玩意就是最大的...Python自动清理不香吗?
  15. 前端后端nginx配置
  16. C语言单分支if语句形式,2 单分支if语句
  17. 计算机使用方法的书,是否知道飞鸽传书软件的详细使用方法?查看介绍
  18. rsi红绿多空波段副图指标 rsi指标公式趋势,兼容通达信公式
  19. Java复习打卡day40
  20. 【源码】YOLOv5云端API部署

热门文章

  1. 以评审制度促进团队研发效率提升
  2. 如何为3CX配置Gigaset N670 N870 IP PRO
  3. 证件身份证识别设备SDK
  4. 老外大叔说李阳疯狂英语一点用都没有!
  5. letv.php,乐视云 API - 如花花的个人空间 - OSCHINA - 中文开源技术交流社区
  6. B树在数据库索引中的应用剖析
  7. java毕业设计_ 在线考试系统设计与实现
  8. 橙色优学案例:悬浮手表海报设计简易教程
  9. 关于Avro中的Unions类型
  10. 表白公式计算机,数学公式的超酷表白