×
嵌入式 > 技术百科 > 详情

3D摄影的基础:深度测距与结构光

发布时间:2020-06-04 发布时间:
|

是的,这会是一篇偏技术的文章,我们知道在信息系统里,数字图像的定义是一个二维函数f(x,y),x,y为空间、也即二维平面的坐标,f则是该点出的强度或灰度,x,y,f均为有限的离散数值。但这是已有数十年的传统定义,我们可以看到它具备很强的平面性,在发展多年后,突破维度限制已经成为了图像处理学科里比较重要的一个方向,但显然,一步就走到全息肯定是不现实的,现有从光学镜头到数字传感器,再到观测设备都是以二维为基础,要实现三维化,就要从最基本的做起,也就是在x,y之外,再加入z,也就是深度信息。

在非光学领域,超声波、核磁共振深度检测技术广泛应用于医疗行业,比如上图就是我们的膝关节核磁共振图像。所以结构光并不是什么很新鲜的概念,从摄影的角度来看,每一张照片也都是有距离信息,当我们把物面的所有可见光源视为无数个点光源时,对焦完成后,每一个点光源的点扩散函数其实已经确定,换句话说每一个点都可以进行演算反推,进而计算出它的物距,有大致利用此理论的技术是松下的DFD对焦。

以前曾经火过一把的Lytro光场相机在镜头与传感器之间放了一片多微透镜矩阵,让传感器获取了整个光场四维函数,只需要对特定方向的光进行二维积分就能重新解构想要的二维图像,实现先拍照,后对焦。但单纯跟二维成像系统来说,光场相机的局限在于空间分辨率不足,解决办法是增加微透镜数量,可如果是在不增大画幅的前提下,就意味着用角分辨率换空间分辨率,对最终锐度影响比较大,因此,单一方向的光源和捕捉方式已经很难满足需求深度测距的全面需求。

所以,多摄方案呼之欲出,手机因为有受众面广、传感器规模小易于控制成本的优势,成为深度摄影硬软件的最佳试验田。但在智能手机应用时代全面开花之前,主要的普及型产品是游戏机,比如微软Kinect。

之所以要把Kinect这个几乎已经是古董的东西拿出来说,是因为现有的多摄结构光技术在它身上很有代表性,两代kinect就有两种不同的深度测距方案,初代使用的是散斑结构光,供应商是Primesense,已被苹果收购,iPhone X的Face ID就是出自该团队的方案——使用红外摄像头,检测红外激光投影到物体上的漫反射光斑(散斑只是编码方式的一种,可以衍生出很多种不同方式,比如上图的彩色条纹,但编码目的都是相同的),因为每个光斑和整个点集的位置都是预先设置、固定唯一的,所以后期只要通过三角定理,即可来进行位置测量,精度可以做到很高,弱光下性能很好,算法研发也不难,但缺点是成本比较高。vivo NEX和刚刚发布的OPPO Find X所采用的结构光也均基于这种技术。

第二代Kinect就换成了TOF(Time Of Fly)方案,类似于蝙蝠通过发出超声波、再根据反弹的超声波进行生物测距一样,TOF就是用专门设计的传感器捕捉红外发射器发出的红外脉冲光,并计算从发出到接受的时间,以公式(光速X时间)/2来判断距离,并测量整个画面的深度信息。器件之间的距离可以放近一点,而且算法简单速度快、成本不高、弱光强光性能都不错,精度虽然比结构光低一点,但对游戏应用来说是够用了。

画面一转来到了现在这个群雄割据的手机时代,如果只要金融级的人脸识别,前置摄像头的结构光方案已经渐渐成熟,当然这也要归功于iPhone X的推波助澜,但,结构光测距的精度会随距离和环境变化而变化,在非自拍的主题下不确定性很强(自拍主题下的实用性已经相当不错,还可以实现模拟影棚光效),再加上后置摄像头才是我们拍照的主力,所以想要获取适用于常规摄影的深度信息,就只能通过目前主流的双摄被动测距方案来实现。

相对于结构光或TOF,双摄的最大区别在于它不是主动检测,因此它不需要单独的传感器,硬件成本很低,但也正因为它是被动检测,所以算法的复杂程度要高很多,计算所需要的时间也比较长,相对主动式的精度也明显偏低,而且弱光几乎抓瞎,不过即便如此,目前也有一些APP也利用双摄有限的距离信息,一定程度实现了后期3D布光的目的,可参考下列对比:

可以看到在狗狗的左边加入了一个绿色光源,右边加入了一个近白色光源,打出了真实度比较高的3D光效。原理简单来说是利用双摄API来调取深度信息并加以计算,再用Metal 2的SDK接入GPU渲染,可以在3秒内就完成,下面是更多的对比:

可以看到大体效果是相当不错,虽然在一些细节,比如范围判断上还是会暴露出问题,比较简单粗暴的照射光+统一设置为均匀反射率的反射光算法有时候会显得较为突兀,但重点还是应该放在“进步”这两个字上,毕竟这是第一款用双摄深度数据来做后期布光的手机APP。

噢对了,APP的名字叫Apollo,目前只有iOS版,12大洋的付费APP。效果嘛,大家都看到了,脑洞其实挺不错,事实上谷歌已经利用神经网络学习和双核像素技术实现了单摄深度测距功能,具体的细节我会稍晚专文解读。但眼下利用深度数据进行计算的应用面还是太“眼球化”,一项技术要成为必备基础的前提就是它可以提供独一无二,或者明显胜过其他方案的效果或效率,目前的新兴结构光主要应用于深度的人脸识别,部分品牌也拿出了3D人脸重构的方案,总体来说实现真正的深度数据应用还有比较长的路要走,对于这些底层技术做到心里有数,以后判断产品时也能更准确,有利无弊。

 


『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
Keil5(MDK5)在调试(debug)过程中遇到的问题