结构光系统标定(四)基于双目视觉的结构光系统标定

上一篇文章讲了基于多项式拟合的结构光系统标定,实际上就是将一系列待测的长度值,隐式地表达在一个多项式里面,通过拟合的方式去求出从相位计算三维坐标所需的参数。当然,这个名字是我自己取的,不一定准确。

这篇文章会再讲一种标定方法,基于双目视觉的结构光系统标定,这个方法应该更经典,被采用得更多,Google学术搜出来被引量610。当然,这也是我给它取的名字,不正确的话也请指正。

 

基于双目视觉的结构光系统标定

该方法将投影仪看作是一个摄像机,将结构光系统看作是两个摄像机的双目系统,通过双目视觉标定求摄像机和投影仪的相关参数,正是因此,我给它的名字是基于双目视觉的结构光系统标定。该方法的核心在于让投影仪能像摄像机一样获取图像,实际上是通过PMP方法,找到摄像机的图像和投影仪的图像之间的转换关系,利用摄像机为投影仪拍照,并转换成投影仪获取的图像。

以下原理,和摄像机小孔成像模型、张正友相机标定相关的,我还是不会细讲,而是直接采用,有需要自行补习哦~

 

结构光系统模型

这个系统模型与上一篇文章中的方法一样,对摄像机和投影仪的摆放位置都没有严格的要求。以下两个系统结构图,第一个是论文里的截图,第二个是我写毕业论文的时候重新画的,原理都一样,你们看哪个顺眼就对着那个分析即可。

{​{\Omega }_{\text{W}}}\left( {​{O}_{w}}{​{X}_{w}}{​{Y}_{w}}{​{Z}_{w}} \right){​{\Omega }_{\text{C}}}\left( {​{O}_{c}}{​{X}_{c}}{​{Y}_{c}}{​{Z}_{c}} \right){​{\Omega }_{\text{p}}}\left( {​{O}_{p}}{​{X}_{p}}{​{Y}_{p}}{​{Z}_{p}} \right)分别表示世界坐标系、摄像机坐标系和投影仪坐标系。由于这个系统把投影仪看作摄像机,所以${​{o}_{c}}{​{u}_{c}}{​{v}_{c}}$${​{o}_{p}}{​{u}_{p}}{​{v}_{p}}$分别表示摄像机成像面坐标系和投影仪成像平面坐标系。对于被测物体上一点A,其在世界坐标系、摄像机坐标系和投影仪坐标系上的坐标分别为$\left( {​{X}_{w}},{​{Y}_{w}},{​{Z}_{w}} \right)$$\left( {​{X}_{c}},{​{Y}_{c}},{​{Z}_{c}} \right)$$\left( {​{X}_{p}},{​{Y}_{p}},{​{Z}_{p}} \right)$,成像在摄像机成像面上的点{​{a}_{c}}\left( {​{u}_{c}},{​{v}_{c}} \right)和投影仪成像面上的点{​{a}_{p}}\left( {​{u}_{p}},{​{v}_{p}} \right)上。

世界坐标系、摄像机坐标系、摄像机成像面坐标系之间的转换关系可用下面小孔成像模型的式子来表示

\left[ \begin{matrix} {​{X}_{c}} \\ {​{Y}_{c}} \\ {​{Z}_{c}} \\ \end{matrix} \right]=\left[ \begin{matrix} {​{R}_{c}} & {​{t}_{c}} \\ \end{matrix} \right]\left[ \begin{matrix} {​{X}_{w}} \\ {​{Y}_{w}} \\ {​{Z}_{w}} \\ 1 \\ \end{matrix} \right]

{​{s}_{c}}\left[ \begin{matrix} {​{u}_{c}} \\ {​{v}_{c}} \\ 1 \\ \end{matrix} \right]=\left[ \begin{matrix} {​{f}_{cx}} & 0 & {​{c}_{cx}} \\ 0 & {​{f}_{cy}} & {​{c}_{cy}} \\ 0 & 0 & 1 \\ \end{matrix} \right]\left[ \begin{matrix} {​{X}_{c}} \\ {​{Y}_{c}} \\ {​{Z}_{c}} \\ \end{matrix} \right]把两个式子联立可以表示为
{​{s}_{c}}\left[ \begin{matrix} {​{u}_{c}} \\ {​{v}_{c}} \\ 1 \\ \end{matrix} \right]={​{H}_{c}}\left[ \begin{matrix} {​{X}_{w}} \\ {​{Y}_{w}} \\ {​{Z}_{w}} \\ 1 \\ \end{matrix} \right]
 其中,{​{s}_{c}}为尺度因子,单应性矩阵{​{H}_{c}}={​{A}_{c}}\left[ \begin{matrix} {​{R}_{c}} & {​{t}_{c}} \\ \end{matrix} \right]\text{=}\left[ \begin{matrix} \begin{matrix} {​{h}_{c11}} & {​{h}_{c12}} & {​{h}_{c13}} \\ {​{h}_{c21}} & {​{h}_{c22}} & {​{h}_{c23}} \\ {​{h}_{c31}} & {​{h}_{c32}} & {​{h}_{c33}} \\ \end{matrix} & \begin{matrix} {​{h}_{c14}} \\ {​{h}_{c24}} \\ {​{h}_{c34}} \\ \end{matrix} \\ \end{matrix} \right],内参矩阵{​{A}_{c}}=\left[ \begin{matrix} {​{f}_{cx}} & 0 & {​{c}_{cx}} \\ 0 & {​{f}_{cy}} & {​{c}_{cy}} \\ 0 & 0 & 1 \\ \end{matrix} \right],旋转矩阵${​{R}_{c}}=\left[ \begin{matrix} {​{r}_{c11}} & {​{r}_{c12}} & {​{r}_{c13}} \\ {​{r}_{c21}} & {​{r}_{c22}} & {​{r}_{c23}} \\ {​{r}_{c31}} & {​{r}_{c32}} & {​{r}_{c33}} \\ \end{matrix} \right]$,平移矩阵${​{t}_{c}}=\left[ \begin{matrix} {​{t}_{cx}} \\ {​{t}_{cy}} \\ {​{t}_{cz}} \\ \end{matrix} \right]$

 

同理,对于世界坐标系、投影仪坐标系、投影仪成像平面坐标系也有类似转换关系,

 {​{s}_{p}}\left[ \begin{matrix} {​{u}_{p}} \\ {​{v}_{p}} \\ 1 \\ \end{matrix} \right]={​{H}_{p}}\left[ \begin{matrix} {​{X}_{w}} \\ {​{Y}_{w}} \\ {​{Z}_{w}} \\ 1 \\ \end{matrix} \right]
其中,{​{H}_{p}}={​{A}_{p}}\left[ \begin{matrix} {​{R}_{p}} & {​{t}_{p}} \\ \end{matrix} \right]\text{=}\left[ \begin{matrix} \begin{matrix} {​{h}_{p11}} & {​{h}_{p12}} & {​{h}_{p13}} \\ {​{h}_{p21}} & {​{h}_{p22}} & {​{h}_{p23}} \\ {​{h}_{p31}} & {​{h}_{p32}} & {​{h}_{p33}} \\ \end{matrix} & \begin{matrix} {​{h}_{p14}} \\ {​{h}_{p24}} \\ {​{h}_{p34}} \\ \end{matrix} \\ \end{matrix} \right]

 

从上面两个成像模型可以看出来,如果我们知道了相机上的坐标以及对应投影仪成像平面上的坐标,那要求三维坐标,缺的就是两个单映性矩阵了。所以基于双目视觉的结构光系统标定,实际上是求解摄像机和投影仪的单应性矩阵{​{H}_{c}}{​{H}_{p}},也就是求解摄像机和投影仪各自的内参矩阵{​{A}_{c}}{​{A}_{p}}、旋转矩阵{​{R}_{c}}{​{R}_{p}}、平移矩阵{​{t}_{c}}{​{t}_{p}}

 

投影仪角点图获取

对于摄像机的相关参数,可通过张正友摄像机标定方法获得,由于该标定方法将投影仪看作是摄像机,投影仪的相关参数也可通过张正友摄像机标定方法获得,关键在于获取投影仪“拍摄”得到的棋盘角点图。为了找到摄像机的图像和投影仪的图像之间的转换关系,Zhang提出利用PMP方法来得到这一转换关系。

主要思想就是:拍到角点图之后,将条纹图样打在棋盘上,再次获取变形的条纹图像,求出相位图,找出角点对应的相位,一个方向的相位,实际上只能确定投影仪‘“成像”平面上的横坐标或者纵坐标,为了获取完整的坐标信息,所以用来横纵两个方向的条纹。

原理接近,我还是放上方法提出的论文里的图(第一幅),以及我自己的图(第二幅)吧。

看头上的图的第一行,以三步相移为例,当向被测物体投影3张纵向的相移条纹,获得相位图后,可以相位图上任意一点的相位,如图中的红点所示。当已知任意一点的相位,可通过下面的式子求出在投影仪图像上该点对应的横坐标 ,也就对应了投影仪图像上的某一列,

{​{u}_{p}}=\frac{​{​{\Phi }_{v}}\left( {​{u}_{c}},{​{v}_{c}} \right){​{\lambda }_{v}}}{2\pi }

式中,{​{\Phi }_{v}}\left( {​{u}_{c}},{​{v}_{c}} \right)为纵向条纹时摄像机获取的图像中\left( {​{u}_{c}},{​{v}_{c}} \right)位置的相位,{​{\lambda }_{v}}为纵向条纹的周期。

再看第二行,为了获取该点在投影仪图像上对应的纵坐标{​{v}_{p}},还需要投影横向的相移条纹,按同样的方法就可以求出纵坐标{​{v}_{p}},即对应投影仪图像上的某一行

{​{v}_{p}}=\frac{​{​{\Phi }_{h}}\left( {​{u}_{c}},{​{v}_{c}} \right){​{\lambda }_{h}}}{2\pi }

式中,{​{\Phi }_{h}}\left( {​{u}_{c}},{​{v}_{c}} \right)为横向条纹时摄像机获取的图像中\left( {​{u}_{c}},{​{v}_{c}} \right)位置的相位,{​{\lambda }_{h}}为横向条纹的周期。

通过分别投影横纵不同方向的条纹图样,根据相位可以求出摄像机图像上任意一点对应在投影仪图像的具体位置。当摄像机拍到了棋盘的角点图,检测出所有角点的位置,就可根据上面方法,逐一去求各个角点对应在投影仪图像的位置,生成投影仪“拍摄”得到的角点图,获取足够的投影仪角点图后,就可根据张正友摄像机标定方法来标定投影仪了。

也难怪人家经典,的确非常巧妙~

 

标定步骤

接下来列一列标定的流程,为了致敬,我还是放一放论文里讲的步骤,当然这是我翻译整理后的,不是十分详细。

 下面是我总结的标定流程:

根据上述方法,结合张正友摄像机标定方法,基于双目视觉的结构光系统标定的步骤可分为以下步骤:

步骤一,将棋盘摆放在被测范围内的任意位置,用摄像机拍摄棋盘,检测棋盘角点,记录各角点在摄像机成像平面中坐标\left( {​{u}_{ci}},{​{v}_{ci}} \right)\left( i=1,2,3\cdots ,n \right)

步骤二,保持棋盘不动,将纵向和横向的正弦条纹图样投影在棋盘上,分别获得对应的相位图,根据步骤一获得的角点位置,找出他们对应在横纵向条纹相位图上的相位{​{\Phi }_{vi}}\left( {​{u}_{ci}},{​{v}_{ci}} \right)$和${​{\Phi }_{hi}}\left( {​{u}_{ci}},{​{v}_{ci}} \right)\left( i=1,2,3\cdots ,n \right)${​{\Phi }_{hi}}\left( {​{u}_{ci}},{​{v}_{ci}} \right)\left( i=1,2,3\cdots ,n \right)$,然后再求出该角点对应在投影仪成像平面中坐标\left( {​{u}_{pi}},{​{v}_{pi}} \right)\left( i=1,2,3\cdots ,n \right),生成投影仪“拍摄”的角点图。

步骤三,多次调整棋盘的摆放位置,重复步骤一和步骤二,获得多张摄像机和投影仪的棋盘角点图。为更精确标定摄像机和投影仪,最好获取9张或以上棋盘图像,还是那句话,图片太少后果自负。

步骤四,通过张正友摄像机标定方法,分别标定摄像机和投影仪的内参矩阵{​{A}_{c}}{​{A}_{p}}。选取其中一张棋盘图像,构建世界坐标系, {​{X}_{w}}{​{Y}_{w}}轴在棋盘面上,{​{Z}_{w}}轴垂直于棋盘,指向摄像机投影系统,并选取此时的摄像机和投影仪各自的旋转矩阵{​{R}_{c}}{​{R}_{p}}、平移矩阵{​{t}_{c}}{​{t}_{p}}作为标定后的旋转矩阵和平移矩阵。向下面的棋盘图一样,前两幅是论文里的截图,第三幅是我的。

 

 

 

从相位到三维坐标

完成系统标定后,当采用纵向相移条纹进行实际测量时,摄像机获取的图像上任意一点\left( {​{u}_{c}},{​{v}_{c}} \right),可根据该点的相位求出在投影仪图像上对应点的横坐标{​{u}_{p}}。已知这3个数怎么推导出和三维坐标的关系呢?论文里不讲过程也不告诉你结果,只是说根据上面两个成像模型,已知3个数{u}_{c}},{​{v}_{c},{u}_{p}},求另外3个未知数{​{X}_{w}},{​{Y}_{w}},{​{Z}_{w}},有3个方程当然可以求出来啦。

\left\{ \begin{matrix} {​{f}_{1}}\left( {​{X}_{w}},{​{Y}_{w}},{​{Z}_{w}},{​{u}_{c}} \right)=0 \\ {​{f}_{2}}\left( {​{X}_{w}},{​{Y}_{w}},{​{Z}_{w}},{​{v}_{c}} \right)=0 \\ {​{f}_{3}}\left( {​{X}_{w}},{​{Y}_{w}},{​{Z}_{w}},{​{u}_{p}} \right)=0 \\ \end{matrix} \right.

我推了炒鸡久,就是推不出来,就很气,可自己数学渣,又怨不得人家,人家觉得没必要写出来啊。嘤嘤嘤······

后来又是多得上一篇文章提到的看到了一篇古老的论文得到了启示,上天眷顾我这差点毕不了业的研究生,让我推了出来。下面是我的推导过程。(突然觉得自己十分伟大无私)

 

 所以,已知{u}_{c}},{​{v}_{c},{u}_{p}},可以根据下面的式子解出三维坐标,当然这个三维坐标是在标定最后一步选定的世界坐标系上的。也可以通过摄像机的外参,把它转到摄像机坐标系上来。

\left[ \begin{matrix} {​{X}_{w}} \\ {​{Y}_{w}} \\ {​{Z}_{w}} \\ \end{matrix} \right]={​{\left[ \begin{matrix} {​{h}_{c11}}-{​{h}_{c31}}{​{u}_{c}} & {​{h}_{c12}}-{​{h}_{c32}}{​{u}_{c}} & {​{h}_{c13}}-{​{h}_{c33}}{​{u}_{c}} \\ {​{h}_{c21}}-{​{h}_{c31}}{​{v}_{c}} & {​{h}_{c22}}-{​{h}_{c32}}{​{v}_{c}} & {​{h}_{c23}}-{​{h}_{c33}}{​{v}_{c}} \\ {​{h}_{p11}}-{​{h}_{p31}}{​{u}_{p}} & {​{h}_{p12}}-{​{h}_{p32}}{​{u}_{p}} & {​{h}_{p13}}-{​{h}_{p33}}{​{u}_{p}} \\ \end{matrix} \right]}^{-1}}\left[ \begin{matrix} {​{h}_{c34}}{​{u}_{c}}-{​{h}_{c14}} \\ {​{h}_{c34}}{​{v}_{c}}-{​{h}_{c24}} \\ {​{h}_{p34}}{​{u}_{p}}-{​{h}_{p14}} \\ \end{matrix} \right]

 

 

实验中间步骤及结果

最后还是稍微放一点标定过程中的一些中间步骤图片,和最后的标定结果。系统不同,大家的数据也不同,所以这部分意义不大,读者们还是可以略过的。

首先是棋盘角点图

然后是从相机的棋盘角点图转换为投影仪的棋盘角点图 

标定后,摄像机内参矩阵{​{A}_{c}}=\left[ \begin{matrix} 3348.07 & 0 & 449.827 \\ 0 & 3329.96 & 221.571 \\ 0 & 0 & 1 \\ \end{matrix} \right],旋转矩阵{​{R}_{c}}=\left[ \begin{matrix} 0.9998 & 0.0010 & -0.0196 \\ -0.0013 & 0.9998 & -0.0177 \\ 0.0196 & -0.0178 & 0.9997 \\ \end{matrix} \right],平移矩阵{​{t}_{c}}\text{=}\left[ \begin{matrix} -64.4239 \\ -6.76070 \\ 1005.06 \\ \end{matrix} \right]
投影仪内参矩阵{​{A}_{p}}=\left[ \begin{matrix} 1485.83 & 0 & 448.179 \\ 0 & 1420.18 & 224.112 \\ 0 & 0 & 1 \\ \end{matrix} \right],旋转矩阵{​{R}_{p}}\text{=}\left[ \begin{matrix} 0.9724 & -0.0137 & 0.2331 \\ 0.0217 & 0.9993 & -0.0319 \\ -0.2325 & 0.0361 & 0.9719 \\ \end{matrix} \right],平移矩阵{​{t}_{p}}=\left[ \begin{matrix} -174.803 \\ 21.8533 \\ 933.601 \\ \end{matrix} \right]

同样用PCL做点云可视化。

 

 

两种方法的简单对比 

那这两种标定方法有什么区别呢,会不会存在某一个比较准确某一个不太准确呢?我拿同一套棋盘图像,用两种方法分别重建。 

两个方法重建的结果都是在摄像机坐标系下的,然后再MATLAB显示出来,直观上看,几乎是一样的。 

包括上面那个头的结果(显示得比较难看)

 

然后我又把棋盘的重建结果的深度相减,得到的结果如下左图,把左图的那一片蓝色局部放大如右图。结果就非常amazing啊,两种重建方法的重建的深度的差,居然是周期性的。

 

按照我的初步判断,应该是两种方法标定的时候,投影仪Gamma畸变引入的相位误差,导致结果呈周期性,假如标定的时候我做了相位误差补偿,那重建后的结果应该是一样的。

所以,我认为两种标定方法,最后得到的重建结果应该是没有区别的。

 

 

 

 

参考文献:

[1] Zhang S, Huang P S. Novel method for structured light system calibration[J]. Optical Engineering, 2006, 45(8): 083601.

[2]  达飞鹏, 盖绍彦. 光栅投影三维精密测量[M]. 北京: 科学出版社, 2011.

[3] 刘顺涛, 骆华芬, 陈雪梅, 等. 结构光测量系统的标定方法综述[J]. 激光技术, 2015, 39(2): 252-258.

 

声明:本文中的图片、公式等都和作者本人的毕业论文有关,如果抄袭盗用吃亏是你自己哦~实在有需要,这里建议你自己码一下公式,自己做一下相关的图哦亲。作者水平有限,如文中有错,请务必留言指正。如有学习交流需要,也可通过邮箱zhenyuchung@m.scnu.edu.cn联系我,大家一起讨论学习。 

  • 30
    点赞
  • 128
    收藏
    觉得还不错? 一键收藏
  • 52
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 52
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值