







前言
在上一篇中,我们读到了UTAH于2015年的讲座的课件(的第一篇), 这次接着的第二篇会着重介绍图像编码在结构光方案中的应用(课件是2013年的)。
之所以要引入图像编码,很大程度上是为了提升扫描速度。之前在介绍实时渲染的时候,曾介绍过“实时”这个概念——简单的说,指的是在符合要求的时间内完成一帧的渲染,达到视觉上连续的结果。
与之类比,本篇读到后面也会介绍三维扫描的“实时”问题。相对上次介绍的至少需要10秒左右完成一次的扫描来说,要达到“实时”所需的响应时间窗口就小很多——如何通过纹样和图像编解码的方式来减少扫描时间,并达成实时目标也是本篇会读到的主要内容。
由于没有课件文稿,因此PPT部分以翻译为主,打星号的部分是我的个人理解或补充。其中的一些数学知识我也是首次接触,如有理解错漏也欢迎指正。
1 投影编码综述
*部分页可能有排版略微错乱的问题,是原PDF文件就存在问题。
纹样投影:
投射一个纹样而不再是一个光点。
指需要单个图片,拍摄一帧。
...但是匹配结果可能不再唯一(虽然仍然足够简单)。
*这部分相对上篇来说,设备的设置基本没变,只是投射(和解析)的内容变为了一个纹样。
*其中的部分思路和之前介绍的立体视觉部分也有重合。
同时投射多个光条或纹样。
对应问题:如何分辨每个光条或纹样(及其像素点)各自的位置?如何唯一地确定纹样?
不需要几何约束就能确认对应关系。
对于高密度的对应关系,我们需要很多光平面:
移动投影设备;
或是同时投射多个光带——但需要图像编(解)码。
每个像素点都能通过编码被辨别出来。
像素的编码语言:
灰度级别
颜色
几何方面的信息
时分复用:
二进制编码
N元编码
格雷码+相位移
空间编撰:
德布鲁金序列
M阵列
直接编码:
灰度级别
颜色(色调)
*大部分概念后面都会涉及到,这里不急展开。另外,本文中codification一词就统一译作“编撰”,来和编码做区分,但也要理解它们在英文上有一定的同源性。
一个纹样在被投射到一个表面后就被编码了,一组观察到的区域投射可以被简单地与原始纹样匹配。例如:有着两条竖线的编码纹样。
将图像中的一片区域与它对应的纹样区域相匹配的过程就被称为纹样解码——类似对应点查找问题。
解码投影的纹样使得我们能快速找到一个大片的对应点集合——基于前置的在光纹样方面的知识(例如光纹样的唯一性设计)。
通常有两种编码对应点的方式:单轴或双轴编撰——它决定了三角测量时的计算方式。
*单轴时,三角测量是通过计算线与平面相交(如图);而双轴时是计算线与线相交(如图)。
解码纹样意味着在摄影图像上定位已知的投影纹样的对应点。
2 基于时间编码的技术
*这类技术的核心思想是持续投射一定时间(但会远小于单条光带扫描的时间),同时纹样之间可能还有一定的组合辅助以提高唯一性确认的速度——例如引入相位移的纹样投影。
*随着时间分配的光带有着唯一的光照编码(样式、排列)。
*如图所示,光带在时空上的值被以0或1的位平面栈来表示(并唯一标识)了。
二进制编码:
通常只有两个光照级别被采用,并分别编码为0和1。
格雷码(Gray code)可以用于提升可靠性(相邻光带必须只能有1位有差别)。
每一个编码的点都能被它接收到的光强度值序列来(唯一)识别出。
要编码2的n次方的光带,就需要投射n个(符合时空规律的)纹样。
易于分割图像纹样,但需要投射很大数量的纹样。
*这里举一个简单的格雷码例子——例如自然数系列0-10,其格雷码是: 0000、 0001、 0011、 0010、 0110、 0111、 0101、 0100、 1100、 1101、 1111。从中可以理解“相邻只能有1位有差别”的意义。
*它能减少二进制编码中,部分进位需要使数字电路产生很大的尖峰电流脉冲会导致的一些混淆、不及时、不准确等问题;同时它也兼顾了相邻容错的特性。
*图中进一步在三维空间展示了这种时空编码与之前发射接收设备的对应关系。按上面的例子就需要投射并接受4次。
*上方示意图依次是:一根光带的标准光分割;一根光带的顶视图;使用结构光(编码)的光分割。
光平面组被投影到场景物体中。
光纹样中,单独的光平面被以一定的(时间上的)编码组合进行索引:
获取的图像构成了一个位平面栈。
它被用于(唯一地)寻址光平面上对应的每个图像点的位置。
*图中展示了不同时间的不同光带编码组合。
一组纹样被成功投影到测量表面,而一个给定像素的代码文由一组纹样的序列构成。
最常用的纹样结构是一排随着时间变宽的光带——单轴编码。
优点:
高分辨率——能覆盖很多3D点位
高精度(微米级别)
对于颜色丰富的物体有着可靠性
不足:
只支持静态物体
需要大量的纹样(前面提到的数量级)
*一个像素的编码文能确定对应的纹样光带。
*这里图中以三个光带为例,展示了其中格雷码的应用。也是“相邻只有1位差别”。
掠过平面扫描使用射线与平面交点来还原3D深度。
使用一个数据投射器来替代手动扫过激光或阴影平面。
如何建立投影平面与摄像机图像像素的对应关系?
解决方案:投影一个空间与时间上编码过的图像序列。
那么,具体要投影什么样的图像序列?
*这里第二句是重点,即原本是一次投射一根激光来定位(所谓的手动扫过),采用图像编码的方式就替代了“扫”的过程,即投射器本身不需要移动(变成了投射“数据”),只是变成了投射序列纹样,而靠这个纹样的时间空间编码来产生定位逻辑。
二进制图像序列(页中是1982年提出者的名称):
每一个图像都是一个二级制编码投射的位平面(即0和1构成)。
最小需要10张图以编码1024列和768行(当时比较大的分辨率)。
在实践中,通常需要20张图像以达到这一精度。
投射器和摄像机必须是(时间上)同步的。
格雷码图像序列(页中是1984年提出者的名称):
每个图像都是一个行列由格雷码投射的位平面。
与二进制图像序列需要的图象数相同,但时间中有着更好的性能表现。
*由于格雷码自身的可靠性优势,需要的图像数量也能有所减少——其自身就带有一定的误差校正功能。
1984年由Inokuchi提出的结构光3D重建方案中:
一共使用了42张图像来实现:2张测量动态范围(信号的最大最小值),20张编码行,20张编码列。
为探测出更明亮的位平面位置(或它的反向)分配单独的位值。
解码算法:格雷码——二进制码——整型行列索引。
*这里的颜色是一种(空间行列的)调试信息输出,不是这个方案中会使用颜色投影。方案本身还是基于格雷码的。
*图中展示了youtube上一段比较古老的视频演示,其中扫描的是真人的头部。有兴趣的可以依据链接进行观看。
最大最小值:确定性图像。
颜色:环境光降低、白平衡、颜色纹理。
格雷码:逐像素阈值、光带数量解码(后面与线位移一致)。
线位移:归一化、卷积、中心探测、标记、中心线交点、图像空间X和Y坐标。
*后面几页的课件个人觉得前后关系编写得比较迷惑,其实只需要理解是把一个“时间上位移的纹样”叠加到格雷码上,以提升编解码速度。
投射格雷码序列
投射一组6条细线构成的纹样,探测图像中的线的中心
将线的中心与格雷码组合,以消除(线位置上的)不确定性
从投射坐标中获取次像素精度级别的摄像机图像的坐标
一组(格雷码编码的)二进制纹样序列被投影到物体上,以将其分割成不同区域。
一个额外的纹样会被以一定间隔投射。
定时投射的纹样会朝一个方向移动,以增加这个系统的精度——类似激光扫描。
*例如:三个二进制纹样将物体分为8个区域;没有这些二进制纹样就无法区分投射的窄带;每一个窄带始终落在同样的区域中。
图中:
(a) 一张线位移序列的图片
(b) 计算后的范围图(z分量)
(c) 表面的渲染结果
其中的洞是由于一些点没有通过一致性检测而被剔除的,例如——由于过饱和的像素。
*这里指因为物体空间上的结构导致部分光信息(太暗)失效了,例如左图中暗处、右边两图白色挖空的部分。
投射一组纹样
投射sin函数
在相邻的光平面之间插值
对摄像机图像中像素对应的光带获取其次像素级精度
格雷码:易于编撰、低分辨率。
相位移:高分辨率、相邻易混淆。
两者结合:更可靠的编撰方案,无歧义且有着高分辨率,但也增加了需要投射的纹样数。
增加分辨率:
投射三个相位移的正弦纹样
可以序列化的投射,或者分别以不同的颜色来投射
通过记录下的强度信息可以计算出一个波长中某像素点的相位角
*从图中可以看到,光纹样窄带从01码的明暗分明变成类似“渐变”的效果(sin值);而只需要投影三个纹样的原因后面会解析。
从亮度值计算相位角:
从三张图像中计算相位角
尽管该方法依赖亮度,但并不需要知道环境光或者投射器的光强度
Ibase是环境光强度,Ivar为投射器的光强度,Φ是相位主值。
*通过求相位差展开,绿色的部分通过相减消除了Ibase的影响,蓝色部分通过相处消除了Ivar的影响。
*通过图中的三角函数带入,将Φ和θ的加减展开。
*同角的sin除cos就是tan。
*摘录一段半角函数的推导:tan(θ/2)=sin(θ/2)/ cos(θ/2)= [2sin(θ/2)cos(θ/2) ] /2cos(θ/2)² = sinθ/(1+cosθ) = (1-cosθ)/sinθ
*其中已知Cosθ = 2Cos²(θ/2) - 1,Cosθ = 1 - 2Sin²(θ/2)。更多相关的推导可以自行搜索。
*最终相位角Φ(在0,2Π范围的解)可以写成如图的arctan的形式,只与θ和三个观测位置I的值有关。
总相值:
在光强度中的有一定间隔的相位角
从立体三角测量(或光带)中得到间隔数
立体匹配变得容易——只有N种可能性
*图中红色部分可以理解为“整间隔”的数量,绿色部分则是一个间隔内的(相位移)偏移值。
总相值:
相位角只能确定在一个间隔内的sin波形中的相对位置(前一页绿色部分)
还需要知道所在的光带是哪一根(前一页红色部分,原文提到参照GPS的相位模糊)
通过顺序假设,或与立体视觉结果进行组合来获得
*总的来说,这一节介绍的这些方法都是在基础格雷码上叠加纹样,以尽量少的分时间的纹样数量来确认对应关系的唯一性。
3 直接编撰
*直接编撰的意思就是能通过一次投影(或额外几次补充投影)就建立唯一的对应关系——颜色编码是典型的直接编撰方式。
通过增加光带的强度级别来减少所需的光纹样数量:
多灰度级别,不再是黑白二元
基于颜色的多级格雷码
有着m个符号的字母系统能编码m的n次方数量的光带。例如3个基于4灰度级别的N元编码的纹样,可以编码64根光带。
在编码中增加颜色也是为了增加编码维度。这在同样的数据长度内给我们提供了更多(编码)语言选择。
如果一个场景变化了为其投影的光的颜色,那么信息有可能会丢失。
在解码时,反射率限制(中性场景颜色)需要被充分考虑。
每一个编码的点都能通过它的颜色被(唯一)区分出来。
*其中左侧的Tajima彩虹纹样是通过白光透过水晶棱镜来产生的。
假设场景不会改变投射光的颜色(以进行还原)。
每个编码的像素能被其自身的强度、颜色属性(唯一)确定。
由于编撰过程通常被压缩到一个唯一的纹样中,它使用的强度、颜色光谱会非常大。
需要投射额外的参照纹样以辅助区分——环境光(黑色纹样)、全照明(白色纹样)。
优势:
减少需要的纹样数
理论上能实现高精度
不足:
在物体有反射性的部分会有较大噪声;在摄像机的光谱响应和投射光谱之间是非线性的——需要非标准的能投射单波长的设备。
实际上精度较低(毫米级别)。
*颜色光谱响应的问题,其中一个理解方向可以参考之前对于颜色空间的解读——即接收和识别不同频率的光波,其精度和准确性是不同的;因此虽然视觉上看着是连续的,但是识别起来并不是简单线性的,因此对设备提出了要求。
4 空间编撰
*这类方案在直接编撰的基础上不满足于像素级的唯一对应,而尝试以局部纹样的唯一性来检测窗口化的对应关系,以进一步提升扫描速度。
在单一帧中编码。
空间相关性可以是局部或全局的。
识别投影编码所需要的最小像素数量,决定了场景还原时的细节精度。
*注意这里是指图像区域的空间相关对应,而不是这个词直译的另一个光学上的概念。
(这种编码方式)对于复杂的外观也能有效。
需要很少的图像数(1或者2)。
但需要复杂得多的对应关系算法。
有着n个字母信号数的m阶德布鲁金序列(伪随机序列),是一个长度为n的m次方的字符串,且每个m长度的字串唯一出现一次(此时可以把窗口变为1维)。
图中的例子,m=4,n=2,得到的长度为16。
德布鲁金序列被用来定义颜色窄带(单轴编撰)或格子纹样(双轴编撰)。(*这里使用的颜色数量就可以类比字母信号数)
为了解码某一个颜色窄带,只需要确定它属于哪一个窗口即可——这也能解决问题。
*图中下方左侧的Zhang方案:用125条窄带编码——有着8种颜色,窗口尺寸为3条窄带。
*图中下方右侧的Salvi方案:29X29的各自——有着3种颜色,窗口尺寸为3条窄带,编码横向和纵向。
一个M阵列是一个二维展开的德布鲁金序列。
每一个窗口中一个wXh单元的元素只出现一次。
窗口的尺寸和M阵列的尺寸及其使用的符号数相关。
*图中例子:二元M阵列,尺寸4X6,窗口尺寸2X2。下面的图片则是不同定义方式的M阵列。
*图中展示了这种编码上的局部唯一性在查找对应时的应用。
5 结构光总结
优势:
可靠性——(易于)解决对应问题
快速——瞬时记录,实时处理
局限:
相对被动式探测缺少灵活度——需要专门定制(的设备方案)。
需要设备和适合的环境。
应用:
工业探测、娱乐、医疗、遗物归档等。
Kinect设备的结构光方案组合了两项传统的计算机视觉技术:基于焦点的深度测量、基于立体视觉的深度测量。
*它的深度图是基于解析红外激光投射的斑点纹样来得出。
推断身体位置是一个两步的过程:首先计算一个深度图(中间的灰度图),之后推断身体的位置(右边的“火柴”图,研究过AI生图的ControlNet的肯定不陌生)
投射某种空间纹样,其中一组相邻点在纹样中只出现一次。这样一个点位在编码语言中的标识就可以通过计算相邻点(的组合)来获得。
编撰过程被压缩到一个唯一的纹样,而不是时分复用的很多纹样。
相邻点尺寸(窗口尺寸)和需要编码的点的数量成正比,和使用的颜色数成反比。
这类技术的目标是获得一次拍摄就能测量的系统——可用于测量运动物体。
优势:
可以支持运动物体。
压缩编撰过程至一个纹样的可能性。
不足:
物体表面不连续的区域可能造成错误的窗口解码(遮挡问题)。
使用的颜色越多,就越难正确识别非中性颜色的表面。
无法达到最高分辨率。
最后再一句话总结一下这次介绍的一些技术方案:
时分复用:高分辨率、高精度、易于实现;无法处理运动物体,需要很多纹样。
空间编撰:可以测量动态物体、只需要唯一的纹样;相对时分复用分辨率较低,需要更复杂的解码阶段,存在遮挡问题。
直接编撰:高分辨率、需要很少的纹样;对图像噪声比较敏感,也无法处理运动物体。
按照具体的需求可以使用图表中相对应的技术选型:
高精度、高分辨率、静态物体、纹样数量不限制——相位移+格雷码;Guhring的线位移方案。
高精度、高分辨率、静态物体、最少纹样数量——N元纹样+Horn&Kiryati Caspi的方案。
高精度、较好的分辨率、运动物体——德布鲁金纹样+Zhang的方案。
结语
实际上这篇课件的编排上存在一些让人疑惑的点,虽然知识点主体是清楚的,但也常有配图和配文感觉不是很好的部分。对其中一些关键概念感兴趣的,可以去网上搜索一些更详细的资料。
总的来说,这个第二篇介绍的内容核心思想就是——设计一种能唯一识别空间中像素点的方式,再在此基础上做三角测量以还原该位置的深度(单轴或双轴方式)。
在时分复用方法中,最终一个像素能得出唯一的一串0和1组成的二元序列,或是引入相位移后的0-1之间的值(所谓的次像素级);在直接编撰方案中,会尝试以例如灰度、颜色之类的像素唯一标识来区分像素;在空间编撰方案中,还试图以窗口子集来一次确认一组像素,以达到实时性的要求。
其中提到和玩家有关联的Kinect也已经是很多年以前的产物了,现在的AR和VR技术肯定更先进、更高效,但至少这种基于结构光来识别空间的思路我们得以窥见其中的奥秘了。
最后是资料链接:
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。