分享

三维扫描仪[2]

 昵称38434767 2020-02-06

——大恒、微软、还是淘宝一下双目摄像头?

原创 我不想好好敲代码最后发布于2017-03-21 11:32:38
发布于2017-03-21 11:32:38

三维扫描需要怎样的硬件设备?又为什么需要这样的硬件设备?
人有两只眼睛所以扫描仪就有两个摄像头?
大一时看张广军著《机器视觉》简直要死(实话,大一时高数课上都看C语言去了,只怪当年太天真)…
让我们先从光学三角测量开始。不懂什么玩意?从大白天你目测短裙妹子的腿有多长开始……懂了吧!
既然是大白天看,光源必不可少。
一个良好的光照条件会让整个扫描变得简单。玩过相机的都知道ISO,高ISO会造成高噪点,你讨厌噪点,三维扫描讨厌噪声。不理想的照明会造成图像光照不均,图像重要细节丢失,加大图像处理的难度并降低测量的精度。反之,好的光照会极大地增强物体和背景之间的对比度,简化图像分割算法,提高物体边缘与背景之间的变化陡峭度,最终改善测量系统的测量精度。


上帝说,要有光,让我们进入上帝视角(我是无神论者 啦啦)。
图像坐标系、摄像机坐标系、世界坐标系。
一张数字图像,经过不同操作,在计算机中有多种表示方法,我们这里用M * N数组来表达。M行N列的图像中,每一个像素的坐标分别是该像素在数组中的行数与列数。
图像坐标系和我们平时接触的坐标系稍有不同,它是倒过来的。
图像坐标系
趁现在搞清楚!要不然以后OpenCV里面跑BGR图像的时候你连怎么for循环,什么时候i++,加几次是一个像素都不知道!
然而,像素是计算机中中数字图像的单位,不是我们生活中尺子上的单位。
像素和毫米,怎么转换?
我们终于要提到相机了。
摄像机坐标系的原点O,定义在摄像机光轴与图像平面的焦点,定义在图像的正中间。
用u、v来表示以像素为单位的图像坐标系坐标;以X、Y表示以毫米为单位的图像坐标系坐标;以dX、dY来表示物理尺寸。则图像中任意一个像素在两个坐标系下的坐标有如下关系:
若O在u、v坐标系(u0, v0)处,则
这里写图片描述
化为矩阵形式:
这里写图片描述
摄像机成像几何关系如图所示。
这里写图片描述
O点:相机光心。
z轴:光轴,与图像平面垂直。
O1:光轴与图像平面的焦点,为图像坐标系的原点。
O与x、y、z组成的直角坐标系称为摄像机坐标系。
OO1为焦距。


上帝视角:世界坐标系。
摄像机是可以被比较随意的安放的,但是!你需要选择一个基准坐标系,用它来描述相机的位置。
这就是世界坐标系。
摄像机坐标系和世界坐标系之间的关系可以用旋转矩阵和平移向量来描述。
我们必须认识到一点:你手持kinect的时候,你知道你在动,你的电脑不知道你在动。你第一次捕捉的点云是一个点云,动一动,第二次捕捉的时候,你知道两个点云的位置关系变了,然而你的电脑不知道,两个点云直接叠在一起。必须让电脑知道,扫描仪在世界坐标系的位置有变化,并处理变化。


针孔成像模型
什么时代了!还针孔成像!
公元前4世纪,墨家就做过针孔成像的实验,并给予分析和解释。
但是,我们的相机,应该都是针孔相机吧……
针孔成像模型又被称为线性成像模型。
任何点P在图像中的投影位置p,为OP与平面的焦点。
由比例关系可知:
这里写图片描述
(X,Y):p点的图像坐标。
(x,y,z):空间P点在摄像机坐标系下的坐标。
f:xy平面与图像平面的距离,也就是焦距。

每一个相机都有相关的参数,这被称为相机的内部参数;摄像机相对于世界坐标系也有相关参数,称为外部参数。确定相机的内外参数,称为相机定标。
在知道了相机的内外参数后,对任意空间点P,如果已知它的坐标,就可以求出像素点p的位置。但是!反过来就不行。如果已知p就不能求出P。


畸变
是个镜头就有畸变。畸变原理其实也挺好理解,就不详细阐述了。可以查查Matlab、OpenCV是怎么去畸变的,PS也有去畸变的能力。

现在 我们进入两个摄像头的世界

人有两眼,两眼没长在一起,导致左边看左边一点,右边看右边一点。这就对了!就是用视差来进行三维信息的获取哒!
双目立体视觉是基于视差,由三角测量法进行三维信息的获取,即由两个摄像机的图像平面,和被测物体之间构成一个三角形。已知两摄像机之间的位置关系,便可以获取两摄像机公共视场内物体的三维尺寸以及空间物体特征点的三维坐标。
这里写图片描述
原理图如图所示。
左右眼同时获取了P的图像,他们的图像坐标分别为pleft=(Xleft,Yleft)、pright=(Xright,Yright)。
当图像处于一个平面,Yleft=Yright=Y时,由三角关系可得:
这里写图片描述
视差为:Disparity=Xleft-Xright,由此可得P点在摄像机坐标下的三维坐标为:
这里写图片描述
因此,左摄像机像面上的任意一点只要能在右摄像机像面上找到对应的匹配点,就可以确定该点的三维坐标。


双目立体视觉的精度分析
设:焦距f1、f2。
········光轴与x轴夹角为a1、a2。
········小于相机的视场角的投影角为w1、w2。
这里写图片描述
经过分析,可以得出以下结论:
(1)两台相机的有效焦距f1、f2越大,视觉系统的精度越高。建议使用长焦镜头。
(2)三角形底边叫做基线距。当它增大时,对扫描精度有影响。
(3)位于光轴上的点,测量精度最低。


放松一下 去喝口水

Kinect——让我们领略红外光栅的魅力

这里写图片描述
Kinect 是微软公司 2010 年推出的一款 XBOX360 体感外部设备,是目前世界上一款较为成熟的商业人体动作感知设备,目前大量的应用在体感游戏上。微软与伊朗 PrimeSense 公司合作,以廉价的成本实现了深度摄像头的功能,通过深度摄像头和RGB彩色信息以及相控阵麦克风提供的信息,使得 Xbox 可以感知和识别玩家及其运动,进而操控游戏中的人物,提高游戏的可玩性。


Kinect 传感器的主要硬件组成
(1)红外摄影机:主动投射近红外光谱,照射到粗糙物体、或是穿透毛玻璃后,光谱发生扭 曲,会形成随机的反射斑点,即散斑,进而能被红外摄像头读取。
(2)红外摄像头:分析红外光谱,创建可视 范围内的人体、物体的深度图像。
(3)彩色摄像头: 用于拍摄视角范围内的彩色视频图像。


Kinect 作为一个传感器,本质上也只是一个输入设备。它能提供深度数据流、彩色视频流。
它发射、捕捉、视觉重建的过程,它的是有红外投影机和红外摄像头组成的,投影接收互为重叠。
微软 Kinect 深度图想采用的是 Light Coding技术,就是用光源照明给需要测量的空间编码,属于结构光技术的一种,只是深度计算方式不一 样。Light Coding的光源称为“激光散斑”,是激光照射到粗糙物体或穿透毛玻璃后随即形成的衍射斑点。这些散斑具有高度的随机性,而且会随 着距离的不同而变换图案。即空间中任意两处的散斑图案都是不同的。只要在空间中打上这样的 结构光,整个空间就都被做了标记,把一个物体放进这个空间,只要看看物体上面的散斑图案, 就可以知道这个物体在什么位置了。在这之前要把整个空间的散斑图案都记录下来,所以要先做 一次光源标定。标定的方法是每隔一段距离,取一个参考平面,把参考平面上的散斑图案记录下 来。
即使不开灯,Kinect也能够正常工作(彩色摄像头就尴尬了),

然而,在大太阳天的室外,就不要装B了,kinect 会瞎的,亲测。

这里写图片描述
激光源投射出的一束红外激光,经过衍射光栅的衍射作用,被分成多束,在空间中形成 了一个随深度改变而变化的散斑图案。红外接收相机接收该散斑图案,并与参考图案进行相关运算生成包含深度信息的视差图。其中,参考图案是存储在Kinect传感器里面的已知距离上的散斑图案。
假定目标 o 在距传感器距离为 z0 的参考平面上,红外相机捕捉到目标 o 处的激光散斑在红外图像上成像的位置为 n。当目标的深度发 生变化时,图像上激光散斑的位置 n 就会沿 X 轴移 动到 m。测量出散斑 k 在图像上的视差 dk,那么:
这里写图片描述
这里写图片描述
式中,zk 表示目标距传感器的深度,b 指基线长度,f 指的是线外相机的焦距。D 是点 k 在物空间的位移,dk 是在红外图像上的视差。
带入D,可得
这里写图片描述
若固定参量 z0,f 和 b 已通过标定获得,则可由观测的视差推导出深度信息。

我个人的项目中使用了Kinect,导师的项目使用了大恒的工业相机。
我的意思是:该用什么,就用什么。

Kinect和双目的选择之我见

一般认为,双目结构光扫描仪和被测物体间的距离比较近时,扫描精度较高。
这里写图片描述
这里写图片描述
这里写图片描述
本点云使用makerbot digitizer扫描得来


而Kinect稍有不同,通过深度图可以看出来:
这里写图片描述
过近的距离和过远的距离,在深度图上显示的都是黑色。因为Kinect已经无法探测到那里了。

所以

  • 如果你想扫一个人,Kinect完全可以做到。

  • 如果你需要扫描一个飞机发动机叶片,Kinect无法担此重任。

  • 如果你想通过体感和底层硬件交互,Kinect是你的不二选择。
    这里写图片描述

参考内容

  1. 《机器视觉》张广军

  2. 《Kinect传感器的彩色和深度相机标定》郭连朋

  3. 《Kinect技术与工作原理的研究》石曼银

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多