作者:曹博
01 二值码
02 格雷码编码
2.1 编码优点
2.2 编码生成
2.3 递归生成
2.4 二值码转换
2.5 编码图
03 格雷码投影
3.1 投影图案生成
3.2 DLP投影图像
04 格雷码解码
4.1 全局/局部灰度阈值法
4.2 多幅图像阈值法
4.3 特殊情况
05 参考文献
01 二值码
先来说结构光中最简单的情况,时域上的编码,由于极线约束的关系,我们只需要在单方向上进行编码即可,我们以最简单的两灰度级三位二进制码为例,这里有个区域,其中亮区域对应编码1,暗区域对应编码0,假设现在我们向被测物顺序投射三幅二进制编码图案,如下所示:
图1 二进制码的编码与解码原理
现在,对于这些区域,对应的编码如下:
这些区域都被我们编码起来了,没毛病!但是这样的编码虽然很简单,但是存在问题!如果和格雷码一比,你一定一眼就可以发现。
02 格雷码编码
2.1 编码优点二进制编码缺点:相邻区域的编码的位数变化太多了!
那这会带来什么问题?当然,在相机拍照清晰的情况下,这种编码方式当然不会出现任何问题。但问题就出现在,相机拍摄到的黑白相间的边界点往往是一个过渡灰度,很容易导致解码错误(0->1 or 1->0),这是自然二进制编码解码最容易出错的点。而格雷码最大的特定是相邻数字编码只相差一位,它们的对比如下所示:
这有什么优点呢?格雷码出错的概率更小,因为相邻区域的编码只有一位差异,有两种情况,假设编码只有一位差异,这一位错误编码出现在:非差异位:对这类编码错误,我们完全可以进行补救,因为相邻两个像素的编码应该是大部分相同的,我们可以对相邻两个像素的编码进行纠正,而二进制码可没有这个编码纠正机制;
差异位:那无非是差一个像素而已,这时候我们无法区分这两块区域;
举个例子,对001(1)区域,它最容易出现错误的区域是黑白相间的边界处,错误的编码:011:二值码:3区域,差2个像素;
格雷码:2区域,差1个像素,
另外,在编码的最后一幅图像里,条纹都是非常细的,以上面3位编码为例,查看编码最后位,如果是:二值码:01010101
格雷码:01100110
由于漫反射的原因,通常容易出错的地方是黑白交错的区域解码,当条纹在最后一幅很细的时候,明显格雷码编码条纹更粗,可能出错的地方更少。
不论你是否理解,格雷码的主要优点就在于可以减小解码过程中的错误率,当然它依然有二值码一样的缺点,主要在于在选取位数较多的时候,最后几幅图的格雷码条纹会非常细,不容易分辨,因而我们通常只选取4位格雷码进行编码。这样的处理精度并不高,这也是后面我们结合相移法来进行编码、解码的主要原因。补充:格雷码的其他应