opencv投影与三维视觉

 

投影与三维视觉

目前没有可靠的方法能够再单幅图像的情况下进行标定和提取三维信息,利用多幅图像进行三维场景重建最典型的实例是立体视觉

立体视觉中,通常把从不同摄像机同时获取的两个或更多图像中的特征,与其他图像中的相关特征进行匹配,分析特征之间的偏差,产生深度信息

另一实例是通过运动获取目标结构信息,可能只有一个相机,但是可以从不同时间和不同地点获取多幅图像

投影

给定摄像机附近三维物理坐标系的位置,可以计算出在外部三维点在成像设备中出现的位置

转换过程在cv::projectPoints()进行实现

(最后一个参数可以增加对P求偏导项,P是什么没说清楚,是物体坐标系中对应点的坐标?)

仿射变换与透视变换

仿射变换:矩形变为平行四边形

透视变换:矩形变为任何梯形

鸟瞰图变换实例

机器人的场景视图被转换为鸟瞰视图,结合由声纳,激光测距仪获得的世界表示信息

  1. 从相机中读取内联模型和畸变模型
  2. 从地平面上找到已知物体,以亚像素精度获得至少四个点
  3. 将各点带入函数cv::getPerspectiveTransform(),计算地平面单应性矩阵H
  4. 利用函数cv::warpPerspective()和标志cv::WAPP_INVERSE_MAP cv::INTER_LINEAR获得地平面的正面平行鸟瞰图

三维姿态估计

三维物体的姿态估计问题可以用单摄像机和多摄像机解决

多摄像机情况下,用从各个摄像机单独观察到的内容之间的关系来确定物体的具体位置

这种技术优点:可以在物体未知甚至整个场景未知的情况下工作

​ 缺点:需要多个相机

利用单相机计算已知物体的姿态是可能的

单摄像机姿态估计

如果已经在对象中确定了一些关键点,并且关键点在对象的坐标系中已知,那么称这个对象已知

如果求对象姿态与摄像机之间关系,基本要求是所找到的每个关键点必须位于从摄像机成像仪上的像素位置发出且通过摄像机光圈的特定射线上

利用函数cv::solvePnP()计算已知物体姿态

该问题通常具有唯一解,但是在两种情况下,PNP不能提供可靠的唯一解:

第一种情况是没有足够的关键点,理论上可以靠三次匹配解决,实际上由于使用很少的点,并且使用任何方法的准确性产生的位置都有自然噪声,其姿态将被遮挡一大部分

第二种情况是对象较远,用来限制特征位置的射线将变得近似平行,射线之间的差保证物体的独特尺度,或者等价于物体距离大小唯一解;这种单目方法与人眼观察远距离物体类似,这也是为什么没有其他背景条件时,无法测量一个实际大小未知的物体的距离