空间条纹结构光编解码
结构光设备通常是有projector和imager,硬件上二者按一定的角度放置。projector投射出一些预设的图案打在被摄物体上,而imager在另一个角度去拍摄。物体的形状引起了图案的变化,通过寻找投射图案在projector和imager上的映射关系,利用三角法可以完成三维重建。投射的图案有多种多样,常见的有空间编码图案,如竖条纹、二维散斑、颜色条纹等。本文记录一种空间条纹结构光的设计及其编解码方案。
该方法投射两种条纹,一种叫centerline,一种叫multline,centerline的作用是可以直接对条纹解码,实现条纹编号的对应,而multline可借助centerline完成条纹编号对应。这里说直接能实现条纹解码的意思是指,当条纹数量有限时(在我们的案例里最多为5条),只有正确的匹配重建出来的深度才能在合理的范围,而错误匹配重建的深度会超出合理范围(过近或过远,依赖于先验知识)。因此,可以根据这个信息,解码正确的条纹编号。
我们以projector上有240条为例,介绍能够编解码出120条线的图像数最少的条纹设计方案,其中包括
cl0: 15 条线
cl1: 15 条线
ml3(可当做 cl):40 条线
ml1:40 条线
ml5 40 条线
同时,通过背景相减,可以得到另外两张图像br0=cl0-cl1, br1=cl1-cl0。我们最终可以利用这7张条纹图完成120条线的重建。根据前述,条纹均匀有5条时,条纹匹配关系可直接得到,因此我们可以将条纹分成5组,下图以其中一组为例来介绍这一组内所有24条条纹是如何找到对应关系的。
解码步骤为:
br0,br1可以根据深度范围直接解码(2条)
cl0,cl1可以根据左右到底是br0还是br1来解码(cross-reference)(4条)
ml3可以根据左右的条纹编号来解码(cross-reference)(8条)
ml1,ml2可以根据ml3的编码利用左右关系来解码(cross-reference)(8*3=24条)
具体的条纹编号如下:
float br0[5] = { 44, 92, 140, 188, 236 };
float br1[5] = { 20, 68, 116, 164, 212 };
float cl0[15] = { 8, 32, 44, 56, 80, 92, 104, 128, 140, 152, 176, 188, 200, 224, 236 };
float cl1[15] = { 8, 20, 32, 56, 68, 80, 104, 116, 128, 152, 164, 176, 200, 212, 224 };
float ml3[40] = { 2, 8, 14, 20, 26, 32, 38, 44, 50, 56, 62, 68, 74, 80, 86, 92, 98, 104, 110,116, 122, 128, 134, 140, 146, 152, 158, 164, 170, 176, 182, 188, 194, 200, 206, 212, 218, 224, 230, 236};
float ml1[40] = { 0, 6, 12, 18, 24, 30, 36, 42, 48, 54, 60, 66, 72, 78, 84, 90, 96, 102, 108,114, 120, 126, 132, 138, 144, 150, 156, 162, 168, 174, 180, 186, 192, 198, 204, 210, 216, 222, 228, 234};
float ml5[40] = { 4, 10, 16, 22, 28, 34, 40, 46, 52, 58, 64, 70, 76, 82, 88, 94, 100, 106, 112,118, 124, 130, 136, 142, 148, 154, 160, 166, 172, 178, 184, 190, 196, 202, 208, 214, 220, 226, 232, 238};