• 结构光三维重建


    结构光三维重建之单目标定的一种方法——建立“相位-像点-真实三维坐标”之间的关系

    1.了解标定的概念

        在刚接触结构光三维扫描的时候,我虽然了解部分张正友标定的内容,但是对于标定还是感觉很模糊,经过最近几天的学习,我发现想掌握标定,首先应该把标定这两个字代表的意义弄懂。也就是要标定什么?

    (1).对系统的标定

    (2).对相机的标定

     

    3.张正友标定的是相机参数

     

        对于接触相机标定的小伙伴来说,张正友标定因为其易用性和准确性,始终是无法绕过的一个选项。那么我们就先来了解一下张正友标定。张氏标定的文章网上已经多得不能再多,具体的过程请自行下载论文张正友标定法英文原版论文。

     

    。我们从目的倒着学习一下。相机标定的目的是得到相机内外参数和畸变参数,内部参数有焦距和像元尺寸的比值,主点以及倾斜角。外部参数就是旋转和平移矩阵。

    外部参数就是旋转和平移矩阵。畸变参数有k1,k2,p1,p2,p3。

     

     

    4.标定得到的相机参数和三维重建没有计算上的直接关系

     

        调用过opencv进行标定的朋友应该发现,最终的结果是能够得到矫正畸变后的图片,但是对于单目结构光来说,或者更具体一点,对于单目结构光解出来的相位来说,不知道有什么用。这个时候,如果还是纠结于张世标定得到的几个参数矩阵的话,就会陷入怪圈,所以应该跳出来,想想别的思路。

     

        这个时候对系统进行标定就要粉墨登场了,刚才我们讲了相机的标定,跟这个系统有什么关系呢?我们可以这么理解,相机是整个结构光三维扫描系统的一部分,我们只知道相机的参数,这对于把图像中的二维信息转化为三维是不够的,所以我们要对系统进行标定。

    接下来就要理解所谓的“系统”是个什么概念。我举一个我之前适用一个白板获得参考相位进行重建的例子来方便理解,首先要知道这种方法是错误的。直接上图吧。

        左图是一个白瓷瓶,右图是用错误的方式建立的点云。

    看上去是不是点云要比真实的花瓶要“扁”,这是因为我没有进行标定,而是直接找了一个白板,进行一次投影光栅并解相位得到的“参考相位”。之后对花瓶进行投影解相得到“实际相位”,两个相位做差就是物体距离“参考面”的信息。但是!这个所谓的参考面是不存在的。见下图:

    在这种情况下进行标定也不是不可以,但是要使用精密的测量仪器获得光心距离参考面的距离并直到扫描结束固定不动,而且投影仪和相机要保持水平,成像面和参考面保持平行,光轴和参考面保持尽可能地垂直。

    所以必须要精确已知l,d,这个代价太大,所以这种标定方法是不可取的。

    5.一种灵活的单目标定方法

        看到这里,相信你已经明白在三维重建中,标定不是得到一个内参矩阵和外参数RT那么简单了,内参以及RT是为了标定系统服务的,得到物体的深度信息才是我们的终极目的。

       接下来的这种方法来自达飞鹏的《光栅投影三维精密测量》,主要思想如本文题目,建立“相位-像点-真实三维坐标”之间的关系。

       在讲这种方法之前,我已经假设你对三大坐标系(世界坐标系、摄像机坐标系、图像坐标系)之间的关系已经理解了。

      

    可以看到,还是有一个参考面,不是说不要参考面了吗?其实我们的目的正是要绕过参考面。再回忆一下,我们是要建立相位,像点和三维坐标之间的关系。我们分成两步:

    第一步,建立(相位θ)-(摄像机坐标系下三维坐标Xc,Yc,Zc之间的关系)

    通过上图,D''是D在参考面X轴上的投影点,平行于Y轴,P''是P'在X轴上的投影点,平行于Y轴,P'是实物点P在参考面上的投影点。由相似三角形关系:

    联立上2式得

    结合世界坐标变换至摄像机坐标公式:

    其中a1~a8就是我们需要标定的系统数据。

    第二部,建立(像点(m,n))-(摄像机坐标系下三维坐标Xc,Yc,Zc之间的关系)

     

     

    这步利用了摄像机的透视投影原理,需要用到内参矩阵。公式是:

    以上两步,是利用投影得出的已知相位和已知相位所在点的三维坐标,来求a1~a8.有了a1~a8,再用扫描得到的相位,和XY坐标做透视投影刚体变换的逆变换,带入

    就能得到深度信息Zc的值。

     

     

          

  • 相关阅读:
    Retrofit/Okhttp API接口加固技术实践(上)
    浅析C#中的结构体和类
    iOS中 支付宝钱包具体解释/第三方支付 韩俊强的博客
    Java并发之volatile二
    dynamic initializer和全局变量
    二叉树转换成森林&森林变成二叉树
    这才是真正的裸眼3D!超级震撼!!
    每一个开发人员都应该有一款自己的App
    Hibernate HQL的使用
    我的Android进阶之旅------>Android 关于arm64-v8a、armeabi-v7a、armeabi、x86下的so文件兼容问题
  • 原文地址:https://www.cnblogs.com/tansuoxinweilai/p/10471200.html
Copyright © 2020-2023  润新知