opencv基础:结构光立体成像原理及标定

原文链接:https://zhuanlan.zhihu.com/p/78512354(建议参考原文链接)
https://mp.weixin.qq.com/s?__biz=MzU1MjY4MTA1MQ==&mid=2247485340&idx=1&sn=1b656f13931f2fd6694bab4e0b1c48d2&chksm=fbff2ca8cc88a5be551733cd9efe39d5cbc2c37cf73589aab147d299e57a425219320761ca71&scene=21#wechat_redirect(三维重建原理)

线结构光法是一种可以精确获得物体三维坐标的方法,将线结构光传感器安装在机器人上就赋予了机器人视觉感知的能力。本文将从单点激光测距原理、线结构光原理与线结构光标定这三部分对线结构光进行介绍。

  • 单点激光测距原理

单点激光测距原理是线结构光的基本原理,通过该方法得到物体距离相机的距离进而得到物体的三维坐标。单点激光测距原理图如下图所示。

opencv基础:结构光立体成像原理及标定_第1张图片

如图 是激光发射器, 是目标点, 是相机成像面。在该单点激光系统有几个不变的量, 为相机光心与激光发射器的距离称为基线长, 为激光线与基线的夹角, 为焦距长。

目标:获得 点在相机坐标系下三维坐标值。

那么关键是获得 值也就是 点的 值, 的 坐标值可以通过相机的透视投影求得。

值如何求解。做两条辅助线 过相机光心与 平行交相机成像面 , 过目标点与基线 平行。这样构造成两个相似三角形,根据相似三角形有如下公式:


基线长 , 角认为是已知量,下面标定讲到如何标定得到。


可以由像素、光心坐标与像元大小得到。

最后计算得:

  • 线结构光原理

以上讨论的单点激光,下面讨论线结构光。

线结构光分为两种形式如下图所示,其区别在于激光与相机的位置摆放不同(位置不同只与标定有关)。

opencv基础:结构光立体成像原理及标定_第2张图片

本文只讨论第一种方式。第一种方式的模型如图所示。

opencv基础:结构光立体成像原理及标定_第3张图片

激光 射出一个面激光照射在物体上形成一条激光线。现假设地面与相机感光面平行, 点与 点是激光线上的位置不同的两点,其中 点在相机上的成像在图像的 轴的中心点上(不准确)。面 与地面垂直,那么 是地面到光心 的高,同时也是点 的高,也就是 方向的值。

  • 线结构光测高

面 可以通过上面单点激光方法求得值,这是线结构光法求高。

  • 线结构光测距

这里有一个容易混淆的地方,高与距离,点 的高是 值,而点 到相机的距离是 。

此时基线与激光面的夹角 (oap)变为 (oap')。

现举例如何求激光线上任意点的高。如图是激光线。

opencv基础:结构光立体成像原理及标定_第4张图片

黑色线是激光线由于照射在不规则的物体上形成的图像。红色线是相机x轴方向的中心点(是光心在成像平面上投影的x值,不一定是图像像素中心)。激光线上任意一点的高(z值)是其所在相同高度平面激光中心点的高。那就将问题转化为单点激光测距问题。

利用单点激光测距公式 , 可通过图像上激光点的y值确定。

  • 线结构光标定

线结构光标定的目的是为了获得几个不变的量,焦距 、基线长 、角度 。

如图单点激光测距。

opencv基础:结构光立体成像原理及标定_第5张图片

公式 表示这几个量之间的关系,此时焦距 、基线长 、角度 变成了未知数。为求解这几个未知数,假设有Object1、Object2、Object3这些点,这些点的高度差都为L,L为已知量,那么每一个点都可以由上面的公式得到:




那么有4个未知量,至少有4个方程来求解。如图是标定板。

opencv基础:结构光立体成像原理及标定_第6张图片

黑色竖线是画在标定板上,红色横线表示相机在不同高度的位置。

标定方法如下:

1.调整相机与标定板平行,相机中轴线与黑色竖线平行;

2.调整相机高度上升或下降使激光线沿黑色竖线上升或下降,每次调整相机都拍照;

3.记录每次激光线与黑色竖线的交点坐标。

一条竖线计算来标定会引入很多误差,也可以设计多条竖线,用极大似然估计来减少误差。

你可能感兴趣的:(opencv基础)