随着生产自动化水平的提高,人们对生产环节的监控水平的要求也越来越高,视觉检测系统能满足生产线上检测的实时性要求,并且具有一定的柔性,精度适中,因此得到了广泛地应用。一般来说,视觉检测系统包括结构光传感器、多线结构光传感器、双目视觉传感器。本文主要讨论多线结构光传感器,即光栅式结构光传感器。
1光栅式结构光传感器原理
光栅式结构光传感器是一种基于主动三角法的视觉传感器。由光投射器在空间投射出一系列光平面,每个光平面通过摄像机建立与象平面间的透视对应 。
在第K个光平面上以O(K)L为原点建立直角坐标系O(K)Lx(K)Ly(K)L,其它为摄像机模型结构。
可见,若要求得点的光平面坐标必须知道点属于哪个光平面。故光栅式结构光传感器存在着光条的识别问题,通过光条编码可以解决这个问题。
2结构光编码
2.1结构光编码问题概述
由于线结构光传感器获得的信息较少(只能获得一个光平面内的位置信息),人们相应地开发了光栅式结构光传感器和网格式结构光传感器。但点的匹配问题也相应地出现了。
为了解决点的对应问题,人们将投射的光进行编码。Altschulter[2]和Posdamer采用了激光光闸的编码技术。128×128激光网格通过一个可编程的空间光调制器投射到物体表面,在象面上产生点阵模型。可编程的空间光调制器通过编程可以使某些激光束通过,而某些激光束被阻挡。通过对应于不同激光束的一系列图像,可以解决点的对应问题。文献提出了一种使用灰度码的时间序列编码方案。对于通常的三维静态物体,这两种方法能够很好地完成点的对应,但对于动态实时的问题这些方法显然不能使用。
对于动态实时的问题,我们希望有一种通过单一图像即可解决点的匹配的方案。Boyer和Kav[6]使用一种彩色的光条,通过相邻光条的颜色进行编码。VySTeke和Oosterlinck[6]将一种方的模板投射到物体上,模板是通过二值化编码的。Minarv[6]等人提出了一种基于三级灰度等级的网格式结构光的编码方法。
从上面的讨论可以看出,网格式结构光可以利用二维信息进行编码,可利用的信息多,所以编码问题比较容易解决。但网格式结构光传感器不能进行特征点的精确测量。为了完成特征点的精确测量,我们采用光栅式结构光传感器。因此,需要研究光栅式结构光传感器的编码方案。
2.2宽度编码的可行性
对于光栅式结构光传感器,我们利用光条的宽度信息进行编码。要想利用光条的宽度进行编码。必须确保等宽的光条在象面上投影的宽度比等于1或接近1。根据透视变换原理,由分析可知,对于f=25mm的透镜,在工作距离为400mm时相邻两光条宽度投影变化不大,故根据光条投影的宽度进行编码是可行的。图2为将宽窄光条的宽度比作成2:1,投影在一个平板上,摄像机接收到的图像,在象面上求得宽光条宽约20~25个象素,窄光条宽约11~15个象素。可见宽窄光条可以很容易地区分开。
3二进制编码方法
3.1n位二进制编码方法
投射器模板的图样模式基本上决定了光平面和物体表面相交后的光条图样。光栅式结构光传感器的编码就是通过对模板上的图样模式编码来实现的。
在模板上刻一系列宽窄不同的两种线条组成的图案,该模板经投射形成的光平面和物体相交后形成的图样是一系列宽窄不同的光条。在模板上按二进制方式对图样进行编码。用“0”表示窄光条,用“1”表示宽光条。将所有的光条按顺序分组,每组对应一个序号,用一个二进制码表示每组的序号,该二进制码和该组的图案相对应。例如用三位二进制码表示每组的序号,序号为4的那一组用二进制码“100”表示,相应的线条图案为“宽”、“窄”、“窄”。假设用n位二进制码表示每组对应的序号,则线条模式共有2n个分组,于是最多可以对n.2n个光条进行编码。
对经过二进制编码的光平面识别是简便的。首先,对摄像机接受到的光条进行处理,根据光条的宽窄将光条译成由二进制码组成的序列,然后根据编码规则将得到的序列分解成组,最后识别出每一个具体的光平面。需要指出的是,由于被测物体表面尺寸和摄像机视场的限制,摄象机获得的光条数一般来说总是小于投射器投射的光平面数。
例如,采用二位二进制码对摄像机接受的光条处理后得到“001101”,按二位一组对该序列进行分组,只可能有两种结果:“00”“11”“01”和“0”“01”“10”“1”。前者对应的分组序号为0、1、3这显然是与编码规则相矛盾的。后者对应的分组序号为未知、1、2、未知,这是符合编码规则的。据此可得到前面的未知光条为0分组第二根光条,后面的未知光条为3分组第一根光条。可见,视场中的每根光条都可以有效地识别出来。
对于表面法向基本不变或变化很小的物体,由文献[1]可知,将宽窄光条的宽度比做成2:1,即可以非常有效地将宽窄光条区分开来。记threshold1=1.5,threshold2=0.6。则若Δ1/Δ2>threshold1=1.5,可判断1为宽光条,2为窄光条;若Δ1/Δ2Δ1/Δ2的值,直到出现前两种情况,我们就可以判断出光条到底为宽或窄。(Δ1/Δ2分别为光条1、2在象面投影的宽度)。
3.2伪随机序列编码方法
前面讲的n位二进制编码方法可以对n.n2个光条进行编码。当n增大时,能够编码的光条数增加很快。但是,我们衡量一种编码方法优劣的主要标准是解码所需信息的多少,解码所需的信息量越少越好。
在n位二进制编码中,为确保能够正确译码,至少需要接受到3n-1个连续的光条。对于n=4的情况,能对64个光条进行编码。但要正确译码,则至少需要接收到连续11个光条。现在我们要考虑的问题是能否尽量减少译码所需的光条数。研究发现:M序列[7]能够使译码所需的信息减少。
下面先来讲述M序列的构成。设一无限长二元序列各元素之间存在下列关系:
Xi=a1Xi-1a2Xi-2…apXi-p(2)
其中:i=p+1,p+2,…,系数a1,a2,……,ap-1取值0或1,系数ap总和为1,表示模2的和。
只要适当地选择系数a1,a2,……,ap,就可以使序列以(2p-1)bit的最长周期循环。这种最长周期的二值序列就称为M序列。
取X4=1,X3=0,X2=1,X1=0,
令Xi=Xi-3Xi-4则可得X15,X14,……X1如下:111100010011010。我们发现对于任意连续的4个x,其二进制值均不相同,故只要知道了任意连续的4个x,即可知道这组x在序列中所处的位置,从而进行有效的译码。
对M序列译码所需的信息比n位二进制码少,当p=6时,可以对63根光条进行编码,这时在视场中只要看到连续的6根光条即可进行译码;而对于n位二进制编码如果对64根光条进行了编码,译码则需要11根光条。
用二维数组a[15][4]存放每相邻4根光条的编号。例如,第12、11、10、9根光条其二进制表示为1000,则a[8]={12,11,10,9};第8、7、6、5根光条,其二进制表示为1001,则a[9]={8,7,6,5}。假设我们得到连续的4根光条二进制表示为1001,则通过查数组a的第9行,得到这4根光条的序号分别是8、7、6、5译码完成。
可见,通过光栅式结构光传感器的编码在一定程度上解决了光条的识别问题,提高了传感器的使用范围。若物体的表面有些地方法向变化非常剧烈,按照上面的方法需将宽窄光条的比值做得很大,而为了保证光条中心的计算精度窄光条又不能做得太窄,若单单通过提高宽窄光条的比值,必然导致视场中的光条急剧减少。由于法向变化非常剧烈的地方是很少的,通过纠错编码技术就可以将光条的宽度局部反转的地方纠正过来,使问题得到解决。
转载请注明来源:中国测控网(www.ck365.cn)