格雷码结构光的编码

格雷码结构光的编码

格雷码编码
根据结构光测量原理知能否精确地确定扫描角α 是整个测量系统的关键,点结构光和线结构光系统是通过转镜等机械装置计算和确定扫描角,而图像编码及解码的意义就在于确定编码结构光即面结构光系统的扫描角。 以两灰度级三位二进制时间编码简要说明本文系统的编码及解码原理。应用投射器向被测景物连续投射如图 2-1 所示的三幅图案,三幅图案中分别用亮暗两灰度将投射空间分为 8 个区域,显然每个区域对应各自的投射角, 其中亮区域对应编码“1”,暗区域对应编码“0”。将投射空间中景物上一点在三幅编码图案中的编码值按投射次序组合,得到该点的区域编码值,由此确定该点所在区域进而解码获得该点的扫描角。
格雷码结构光的编码_第1张图片

例如被测景物上一点 P 处于第四区域内,在三幅图案中的编码值分别是
“0”、“1”、“1”,则该点的区域编码值为“011” ,将二进制编码“011”转化为十进制编码,得到该点对应的区域序号为 k=3,其中 K的取值范围是 0 至 7 的整数。假设α0和α1已经被标定,其值是确定的常数,由于采用等宽条纹图案进行编码,根据几何关系,则点P 所在位置的扫描角可由式(2-1)确定:
这里写图片描述
其中 n 为强度图像总数,将α代入系统的数学模型公式即可得到点 P 的三维坐标。
目前,在结构光测量中时间编码主要采用二进制编码(Binary Encoding)和格雷(Gray)编码两种。
如图2-2 所示,是投射的二进制编码,以投射三幅二进制编码图案为例,
三幅图案的最小条纹周期依次减半,条纹图案投射到物体表面将其分成8个区域,每个区域代表一个周期。其中,黑色条纹二进制码值记为0;白色条纹二进制码值记为1,则可由一个三位二进制编码表示,获得1/8 的分辨率。这样在每次投射中,图像的每个像素就可以获得一个唯一的二进制数“0”或“1”,待投射图案全部完成后,将像素所获得二进制数顺序组合起来,具有相同编码的像素构成了一个窄的带状区域,这样被测物空间就相应被分割成众多由二进制编码唯一确定的窄带状区域,最终三维图像的转换精度取决于条纹图案投射的密度。如图中P点,其在三幅投射图案中条纹分别是“黑”、“白”、“黑”,因此,其二进制编码为010。
格雷码结构光的编码_第2张图片
通过对二进制编码图案进行观察,我们可以发现,如果某一点在第一幅编
码图案的图像中处于黑白交界处,那么在接下来的编码图案投射图中也必然处于黑白交界的地方,例如,当十进制数由“3”变为“4”时,采用二进制码,则其编码将由“011”变为“100”,此时,三位二进制状态都发生变化,虽然我们看到的是同时转变,但从硬件的角度来看,设备的每一位状态并不是同时发生改变的,如第一位先转变成1,则数字暂时成为111,虽然很快第二位和第三位就会变成0,但是111这个暂时的状态很有可能会造成控制系统的不稳定。也就是说,尽管最终的结果是从3变到4,但出现了错误的中间转换过程。若不采用其他措施禁止这些中间错误结果输出,则将使设备产生较大的误差。因此其码值可能多位被误判,若误判存在于高位则解码误差较大。这样会大大增加计算机产生误判而导致解码错误的概率,为了解决这这一问题减少解码过程中的累计误差,格雷编码被引入时间编码方法中。
若采用格雷码,就不会产生这种较大的误差。因为当十进制数由“3”变为“4”时,其对应的格雷码将从“010”变为“110”,只有一位二进制数发生改变,也就无中间暂态出现,如表2-1所示。因此,格雷编码相比二进制编码更为可靠。
格雷码结构光的编码_第3张图片

下面给出三幅格雷编码图案,以便和图2-2的二进制编码图案相比较,如图2-3所示。格雷编码图案把测量空间分成8个区域,如果某一点在其中一幅的编码图案中处于黑白交界处,那么在其它几幅编码图案中该点必然不处于黑白交界处,也就是说,在投射的几幅格雷编码图案中任意一点作为黑白变化边界的机会最多只有一次。而在二进制编码图案中,如果某一点在当前图案中处于黑白交界处,那么在后面投射的图案中必然也处于黑白交界处。因此,相对于二进制编码,格雷码编码在解码的时候,能够大大减少出现解码错误的机会。图2-3中,和二进制编码图案相同位置的p点,其对应的格雷编码为011。
格雷码结构光的编码_第4张图片

值得注意的是:由于摄像机拍摄到的图像是灰度值在0到255之间的灰度图像,并不是理想的黑白二值图像。因此,需要根据判据进行二值化处理,然后再由计算机将所得到的条纹图案进行黑白二值化处理,将图像中白色条纹区域的像素标记为“1”,黑色条纹区域的像素标记为“0”。
从图中我们还可以看出除了第一幅编码图案以外,格雷编码图案和二进制编码图案都不相同,在这些不同的图案中,相同投射次序的格雷编码图案周期是二进位编码图案周期的两倍,这样在编码图案相同的情况下格雷编码图案的制作精度更高。而在相同的制作精度下,格雷编码图案数更多。由此可见,采用格雷编码不仅能降低解码的出错率还能降低投射图案的制造误差,提高投射图案条纹精度。

你可能感兴趣的:(C++)