structure light depth sensing (零星)
双目视觉深度检测的关键之一在于建立两张图之间的对应性。sturctured light 在时间(或者空间上)对projection image plane(双目视觉中的一张image,一组projection patterns构成一张图)的每个pixel(或者一个block)赋予一个id(encode),camera拍回来的images(双目视觉的另一张image,一组camera images构成一张图)上,寻找每个pixel的id(decode),与projection image plane的pixel建立对应关系。简单起见,projection image plane称为P,camera image plane称为C。这里用image这个字眼可能不太好,不如说是一张ID mapping。
基本原理
假设P上有一行共4个点(A,B,C,D),用2bit格雷码来encode(00,01,11,10),需要2 frames构成双目视觉所需的一张图P,相应地,camera需要拍摄2 frames来构成双目视觉所需的另一张图C。
A B C D
P 1 frame: 0 0 255 255
P 2 frame: 0 255 255 0
这样P 1frame和P 2frame共同构成了一张图P,P上每一点(ABCD)有自己独一无二的ID,其中frame中的0代表编码中的0,255代表编码中的1。
对于camera capture回来的两张照片,考虑其中一个点Q:
C 1 frame: 30
C 2 frame: 200
同样地这样C 1frame和C 2frame共同构成了一张图C,注意C上每一点的ID不一定独一无二,因为P上一点发出的光可以照射到C的多个点(一个区域)。对于Q点,我们可以比较肯定地说是和P上的B点对应的。
如何判断对应于255还是对应于0,inversed code的引入
对于上边的例子,C上一点Q,1 frame的值30比较接近0,2 frame的值200比较接近255,所以decode的时候,Q会decode为01,与C中的B相对应。但这样我们需要设置threshold,不高于这个阈值的value,decode为0,反之则decode为1。但是这样的设置很不robust,对返回光线绝对强度依赖太大。因此可以选择引入inversed code(在之前的文章也有说明)
A B C D
P 1 frame: 0 0 255 255
P 1 frame’:255 255 0 0
P 2 frame: 0 255 255 0
P 2 frame’:255 0 0 255
C 1 frame: 80
C 1 frame’: 170
C 2 frame: 195
C 2 frame’: 110
对于Q点,C 1frame的值80小于C 1frame’的值170,因而断言这两个值分别来自P 1 frame中的0和P 1frame’中的255的照射,因此decode为0(按P 1 frame),同理C 2 frame的值195大于C 2frame’的值110,因此可以认为这两个值来自P2 frame中的255和P2frame’中的0,decode为1,最后decode结果是01,因此C中的Q点对应P中的B点。
两个可能的误差来源
不能认为有inversed code就可以完全避免decode的错误。