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的错误。

posted @ 2015-01-27 10:49  Cyrus Ho  阅读(363)  评论(0编辑  收藏  举报