作者:李城来源:微信公众号|3D视觉工坊(系投稿)「3D视觉工坊」技术交流群已经成立,目前大约有12000人,方向主要涉及3D视觉、CV&深度学习、SLAM、三维重建、点云后处理、自动驾驶、CV入门、三维测量、VR/AR、3D人脸识别、医疗影像、缺陷检测、行人重识别、目标跟踪、视觉产品落地、视觉竞赛、车牌识别、硬件选型、学术交流、求职交流、ORB-SLAM系列源码交流、深度估计等。
提到三角化大家都十分熟悉,在CV 领域中,由像点计算物点的过程称为三角化,但在摄影测量领域,其称作为前方交会。值得注意的是单张影像是无法恢复像点的三维坐标,至少需要两张影像才能得到像素点的真实坐标(这里已知两张影像的pose信息)
三角化有很多方法,这里介绍两帧三角化、多帧三角化、迭代三角化、选权迭代多帧三角化(并附上本人代码)。
1、两帧三角化
在opencv 中函数triangulatePoints就可根据两帧的pose 和内参恢复三维点坐标,cv中的三角化是两帧且是没有权的。
其函数参数如下:
void cv::triangulatePoints ( InputArray projMatr1, //P1 1 3*4InputArray projMatr2, //P2 3*4InputArray projPoints1, //pixel coordinatesInputArray projPoints2, // pixel coordinatesOutputArray points4D // 3D coordinates) 2、多帧三角化
三角化严密解推导过程:
由共线条件方程得到三角化严密解法,将分母移到左边,得到
整理可得: