标在柱面上的AR码的鲁棒识别方法与流程

文档序号:11134703阅读:1053来源:国知局
标在柱面上的AR码的鲁棒识别方法与制造工艺

本发明涉及一种AR码的识别方法,具体地说是一种标在柱面上的AR码的鲁棒识别方法。



背景技术:

增强现实辅助维修技术将虚拟提示信息叠加到真实场景中,在复杂装备维修中为用户提供了直观灵活的操作提示,并可为那些不熟悉复杂装备检测维修的用户提供准确实时的维修帮助,对于缩短装备维护周期、提高维修效率、降低成本具有重要意义。

应用于增强现实辅助维修系统的识别手段一般包括基于标识物的识别和基于自然特征的识别两种,而AR码是应用于增强现实系统的典型标识物,目前已获得广泛应用。但由于工业对象存在大量的柱面会导致平面AR码图像发生弧形畸变,限制了其应用范围。

AR码是特殊定制的汉明码,也属于线性分组码的范畴。线性分组码的数据位和校验位个数之间满足以下关系:

2r≥k+r+1

其中:r为数据位,k为校验位。

如5×5的AR码,每一行有2个数据位,用上式求得校验位的个数大于等于3。它们的位置分配为:第2、4位为数据位,第1、3、5位为校验位。在AR码的每一行中,数据位只有两位,能表示四种数据,因此5×5的AR码能表达4的5次方即1024个数字。

对于5×5的AR码来说,其5行码组每一行都有一个纠错能力,因此有百分之二十的错码恢复能力,但是经典AR码由于没有确定方向的标识符或标示位,当读取到的AR码存在错误位时,即按不同方向读取时,经校验位纠错后可能识别出多个数据,无法确定正确的编码值。随着数据位和校验位的增多,虽然其纠错能力有所增加,但依然存在上述问题。

常规的AR码识别过程是:将图像灰度化、二值化,提取AR码轮廓,将轮廓区域做透视变换,成为固定大小的区域,然后在该区域等间隔地划出行列线,形成一个方格矩阵,方格矩阵中的方格都是大小相等的正方形,通过读取每一个方格中的像素值,来判定每一个AR码所表示的数据。这样的读取方法只有在AR码是在一个平面上摆放平整并且用摄像头采集的图像遵循透视原理的情况下才能够有效识别,对于AR码的其他摆放情况(例如粘贴在一个非平面的圆柱面上),就会产生弧形畸变,则常规的AR码识别方法难以正确识别AR码所代表的编码值。



技术实现要素:

本发明的目的是提供一种标在柱面上的AR码的鲁棒识别方法,以解决传统识别方法对此类AR码识别率低的问题。

本发明是这样实现的:一种标在柱面上的AR码的鲁棒识别方法,包括以下步骤:

1)采集标在柱面上的AR码,得到AR码区域图像I0

2)对AR码区域图像I0进行自适应阈值分割和形态学滤波,得到滤波后的二值化图像I1

3)检测滤波后的二值化图像I1的轮廓,在排除了图像中的非四个顶点、非凸四边形的轮廓和过小的轮廓之后,得到只含有AR码区域的轮廓,将只含有AR码区域轮廓以外的区域像素填充为代表“0”的纯黑色,做成遮罩图层,再将AR码区域图像I0拷贝进该遮罩图层中,得到只含有AR码区域的二值化图像I2。该图像中的AR码区域轮廓的四个顶点从左上角开始顺时针依次标记为c0、c1、c2、c3

4)对只含有AR码区域的二值化图像I2中的AR码区域轮廓进行摆正处理,具体方式是:

4-1、以只含有AR码区域的二值化图像I2的左上角顶点为坐标原点,建立直角坐标系,求出连接c0点与c2点的直线L1以及连接c1点与c3点的直线L2,进而求出该两条直线的交点Q的坐标。

4-2、求出只含有AR码区域的二值化图像I2中AR码区域轮廓的最佳外接矩形:以只含有AR码区域的二值化图像I2中AR码区域轮廓的四个顶点c0、c1、c2、c3中距离交点Q最远的一个点为基点,在该基点所在的直线上按以下条件求出距离该点为h像素的两个点:

R=n×l(l≥10)

R/n≤h≤3R/n

其中,n为AR码总行数,l为AR码每一行的平均宽度,R为AR码的总宽度。

4-3、将上述两点中距交点Q较远的一个点标记为A0,设A0点到交点Q的距离为L,求出直线L1和直线L2上距离交点Q为L的其余三个点的坐标,这三个点按逆时针方向分别标记为A1、A2、A3。连接A0、A1、A2、A3这四个点,构成一个矩形A。

4-4、将矩形A透视变换到与该矩形面积相同的一个正方形区域中,具体方式是:

以矩形A的A0、A1、A2、A3这四个点的坐标值构成透视变换前的矩阵,以与矩形A面积相等的正方形的四个角点A0’、A1’、A2’、A3’的坐标值构成透视变换后的矩阵,以透视变换前的矩阵和透视变换后的矩阵为变换参数,利用透视变换函数进行透视变换,从而得到AR码被摆正的二值化图像I3

5)对AR码被摆正的二值化图像I3中AR码区域轮廓是否存在弧形畸变和凹弧边进行检测,具体方式是:

对AR码被摆正的二值化图像I3进行AR码区域轮廓检测,并以AR码被摆正的二值化图像I3的左上角为坐标原点,AR码区域轮廓的四个顶点自左上角开始,沿逆时针方向分别记做d0、d1、d2、d3,求出d0点与d3点连线的中点横坐标值x。自点(x,0)开始,从上往下扫描AR码被摆正的二值化图像I3上的像素,当扫描到像素值为0时,记下该点的纵坐标值y,将该点的y值与d0点和d3点的y值进行比较,若该点的y值大于d0点与d3点中y值的较大者,则判定d0点与d3点所对应的位于图像最上端的一条边是具有弧形畸变的凹弧边,位于图像最下端的一条边就是与该凹弧边相对应的凸弧边。若该点的y值小于d0点与d3点中y值的较小者,则判定d0点与d3点所对应的位于图像最上端的一条边不是凹弧边。

之后,将AR码被摆正的二值化图像I3逆时针旋转90°,重复步骤5),继续进行AR码区域轮廓的检测。

如果在旋转检测三次之后均未检测到AR码区域轮廓的凹弧边,则判定所采集到的AR码区域图像I0中的AR码没有发生弧形畸变,直接转到步骤8),对其进行非线性划线识别操作。

6)对检测到有弧形畸变的AR码上的凹弧边进行拉直处理,具体方式是:

将AR码被摆正的二值化图像I3上端凹弧边的两个顶点的纵坐标值中较小的y值记作TopY03,并作为凹弧边的上拉高度。自AR码被摆正的二值化图像I3的左边界到右边界,从上到下,以一个像素为步长,进行连续扫描。当扫描到像素值为0时,记下该点处的纵坐标值y,将该点处的y值标记为TopY,在此步长内的所有像素向上位移一个TopY03–TopY的距离。遍历整个AR码被摆正的二值化图像I3后,AR码区域轮廓的凹弧边即被拉直,得到AR码凹弧边被拉直的二值化图像I4

7)对AR码凹弧边被拉直的二值化图像I4中的凸弧边进行拉直处理,具体方式是:

自AR码凹弧边被拉直的二值化图像I4的左边界到右边界,从下到上,以一个像素为步长,进行连续扫描。当扫描到像素值为0时,记下该点处的纵坐标值y,并与步骤6)中的TopY03做差,得到每一像素列的一个高度值,记做M。而AR码被摆正的二值化图像I3中AR码区域轮廓中的d1点和d2点的纵坐标值中较小的y值记做S,利用以下计算公式:

M-S=k

M/k=p

M mod p=0

对AR码凹弧边被拉直的图像I4按照单位像素步长,使用上述计算公式确定被抽掉的点,并进行像素抽取,同时将后面的所有像素上移填补间隙。遍历整个AR码凹弧边被拉直的图像I4后,该图像中的凸弧边即被拉直,得到一个轮廓为矩形的修正的二值化图像I5

8)对修正的二值化图像I5进行非线性划线识别处理,具体方式是:

8-1、提取修正的二值化图像I5中的AR码区域轮廓,并对AR码区域轮廓内的区域进行透视变换,透视变换方式为:以提取到的AR码区域轮廓的四个顶点坐标值为透视变换前的矩阵,以R×R像素大小的正方形空白图像的四个角点坐标值为透视变换后的矩阵,利用透视变换函数,以透视变换前的矩阵和透视变换后的矩阵为变换参数,利用透视变换函数进行透视变换,得到一个R×R像素大小的、完全被AR码填充的二值化图像I6

其中,R为AR码的总宽度,其取值为:R=n×l(l≥10);式中,n为AR码的总行数,l为AR码每一行的平均宽度。

8-2、扫描被AR码填充的二值化图像I6中AR码的最上面一行和最下面一行,得到AR码最上面一行的宽度值Y1和最下面一行的宽度值Y2,AR码最上面一行对应的行数记为X1,AR码最下面一行对应的行数为记为X2。若Y1–R/n<Y2–R/n,则记Xmin=X1,否则Xmin=X2。将Y1、X1、X2、Y2代入以下公式中:

Y1=aX12+bX1+c

Y2=aX22+bX2+c

2aXmin+b=0

求出参数a、b、c,构造抛物线方程:

Y=aX2+bX+c

8-3、将AR码的总行数为X值,代入所构造的抛物线方程中,求得每一行的宽度值Yn,在被AR码填充的二值化图像I6上,按照对应的宽度进行划线。在水平方向重复步骤8-2,构造关于水平方向划分的抛物线方程,得到每一列的间隔并划线;由此得到n×n个矩形。

8-4、统计上述矩形中每个矩形内的像素值为0的个数,如果矩形中的灰度值为0的像素的数量大于该矩形总像素数的一半,则判定该矩形区域表示的信息为0,否则为1。统计完所有矩形区域后,即得到一个n×n的二进制矩阵。

8-5、对所得到的n×n的二进制矩阵的数据区域进行解码,即得到该AR码的编码值。

本发明还可这样实现:一种标在柱面上的改进AR码的鲁棒识别方法,包括以下步骤:

1)在AR码中加入定位标志位,具体方式是:

1-1、在n×n的AR码数据区的上沿加入一个数据位的一行定位标志位,在AR码数据区的左侧加入一个数据位的一列定位标志位,行定位标志位与列定位标志位在左上角形成一个重叠标志位,由此形成一个(n+1)×(n+1)的分辨区域。

1-2、在行定位标志位上从左至右加入按1010顺序排布的行定位标识符,在列定位标志位上从上至下加入按1010顺序排布的列定位标识符,在左上角重叠标志位中的标识符为“1”,由此形成一个(n+1)×(n+1)的数据加定位的AR码标识区域。

1-3、在数据加定位的AR码标识区域的四周外围再加入一个黑边框,黑边框的宽度为一个数据位的宽度,由此形成一个(n+3)×(n+3)的带定位标志位的改进AR码。

2)采集标在柱面上的改进AR码,得到AR码区域图像I0

3)对AR码区域图像I0进行自适应阈值分割和形态学滤波,得到滤波后的二值化图像I1

4)检测滤波后的二值化图像I1的轮廓,在排除了图像中的非四个顶点、非凸四边形的轮廓和过小的轮廓之后,得到只含有AR码区域的轮廓,将只含有AR码区域轮廓以外的区域像素填充为代表“0”的纯黑色,做成遮罩图层,再将AR码区域图像I0拷贝进该遮罩图层中,得到只含有AR码区域的二值化图像I2。该图像中的AR码区域轮廓的四个顶点从左上角开始顺时针依次标记为c0、c1、c2、c3

5)对只含有AR码区域的二值化图像I2中的AR码区域轮廓进行摆正处理,具体方式是:

5-1、以只含有AR码区域的二值化图像I2的左上角顶点为坐标原点,建立直角坐标系,求出连接c0点与c2点的直线L1以及连接c1点与c3点的直线L2,进而求出该两条直线的交点Q的坐标。

5-2、求出只含有AR码区域的二值化图像I2中AR码区域轮廓的最佳外接矩形:以只含有AR码区域的二值化图像I2中AR码区域轮廓的四个顶点c0、c1、c2、c3中距离交点Q最远的一个点为基点,在该基点所在的直线上按以下条件求出距离该点为h像素的两个点:

R=n×l(l≥10)

R/n≤h≤3R/n

其中,n为AR码总行数,l为AR码每一行的平均宽度,R为AR码的总宽度。

5-3、将上述两点中距交点Q较远的一个点标记为A0,设A0点到交点Q的距离为L,求出直线L1和直线L2上距离交点Q为L的其余三个点的坐标,这三个点按逆时针方向分别标记为A1、A2、A3。连接A0、A1、A2、A3这四个点,构成一个矩形A。

5-4、将矩形A透视变换到与该矩形面积相同的一个正方形区域中,具体方式是:

以矩形A的A0、A1、A2、A3这四个点的坐标值构成透视变换前的矩阵,以与矩形A面积相等的正方形的四个角点A0’、A1’、A2’、A3’的坐标值构成透视变换后的矩阵,以透视变换前的矩阵和透视变换后的矩阵为变换参数,利用透视变换函数进行透视变换,从而得到AR码被摆正的二值化图像I3

6)对AR码被摆正的二值化图像I3中AR码区域轮廓是否存在弧形畸变和凹弧边进行检测,具体方式是:

对AR码被摆正的二值化图像I3进行AR码区域轮廓检测,并以AR码被摆正的二值化图像I3的左上角为坐标原点,AR码区域轮廓的四个顶点自左上角开始,沿逆时针方向分别记做d0、d1、d2、d3,求出d0点与d3点连线的中点横坐标值x;自点(x,0)开始,从上往下扫描AR码被摆正的二值化图像I3上的像素,当扫描到像素值为0时,记下该点的纵坐标值y,将该点的y值与d0点和d3点的y值进行比较,若该点的y值大于d0点与d3点中y值的较大者,则判定d0点与d3点所对应的位于图像最上端的一条边是具有弧形畸变的凹弧边,位于图像最下端的一条边就是与该凹弧边相对应的凸弧边。若该点的y值小于d0点与d3点中y值的较小者,则判定d0点与d3点所对应的位于图像最上端的一条边不是凹弧边。

之后,将AR码被摆正的二值化图像I3逆时针旋转90°,重复步骤6),继续进行AR码区域轮廓的检测。

如果在旋转检测三次之后均未检测到AR码区域轮廓的凹弧边,则判定所采集到的AR码区域图像I0中的AR码没有发生弧形畸变,直接转到步骤9),对其进行非线性划线识别操作。

7)对检测到有弧形畸变的AR码上的凹弧边进行拉直处理,具体方式是:

将AR码被摆正的二值化图像I3上端凹弧边的两个顶点的纵坐标值中较小的y值记作TopY03,并作为凹弧边的上拉高度。自AR码被摆正的二值化图像I3的左边界到右边界,从上到下,以一个像素为步长,进行连续扫描。当扫描到像素值为0时,记下该点处的纵坐标值y,将该点处的y值标记为TopY,在此步长内的所有像素向上位移一个TopY03–TopY的距离。遍历整个AR码被摆正的二值化图像I3后,AR码区域轮廓的凹弧边即被拉直,得到AR码凹弧边被拉直的二值化图像I4

8)对AR码凹弧边被拉直的二值化图像I4中的凸弧边进行拉直处理,具体方式是:

自AR码凹弧边被拉直的二值化图像I4的左边界到右边界,从下到上,以一个像素为步长,进行连续扫描。当扫描到像素值为0时,记下该点处的纵坐标值y,并与步骤6)中的TopY03做差,得到每一像素列的一个高度值,记做M。而AR码被摆正的二值化图像I3中AR码区域轮廓中的d1点和d2点的纵坐标值中较小的y值记做S,利用以下计算公式:

M-S=k

M/k=p

M mod p=0

对AR码凹弧边被拉直的图像I4按照单位像素步长,使用上述计算公式确定被抽掉的点,并进行像素抽取,同时将后面的所有像素上移填补间隙。遍历整个AR码凹弧边被拉直的图像I4后,该图像中的凸弧边即被拉直,得到一个轮廓为矩形的修正的二值化图像I5

9)对修正的二值化图像I5进行非线性划线识别处理,其具体方式是:

9-1、提取修正的二值化图像I5中的AR码区域轮廓,并对AR码区域轮廓内的区域进行透视变换,透视变换方式为:以提取到的AR码区域轮廓的四个顶点坐标值为透视变换前的矩阵,以R×R像素大小的正方形空白图像的四个角点坐标值为透视变换后的矩阵,利用透视变换函数,以透视变换前的矩阵和透视变换后的矩阵为变换参数进行透视变换,得到一个R×R像素大小的、完全被AR码填充的二值化图像I6

其中,R为改进AR码的总宽度,其取值为:R=n×l(l≥10);式中,n为AR码的总行数,l为AR码每一行的平均宽度。

9-2、扫描被AR码填充的二值化图像I6中改进AR码的上端黑边框和下端黑边框,得到改进AR码最上面一行的宽度值Y1和最下面一行的宽度值Y2,改进AR码最上面一行对应的行数记为X1,改进AR码最下面一行对应的行数为记为X2。若Y1–R/n<Y2–R/n,则记Xmin=X1,否则Xmin=X2。将Y1、X1、X2、Y2代入以下公式中:

Y1=aX12+bX1+c

Y2=aX22+bX2+c

2aXmin+b=0

求出参数a、b、c,构造抛物线方程:

Y=aX2+bX+c

9-3、以改进AR码的总行数为X值,代入所构造的抛物线方程中,求得每一行的宽度值Yn,在被AR码填充的二值化图像I6上,按照对应的宽度进行划线。在水平方向重复步骤9-2,构造关于水平方向划分的抛物线方程,得到每一列的间隔并划线。由此得到(n+3)×(n+3)个矩形。

9-4、统计上述矩形中每个矩形内的像素值为0的个数,如果矩形中的灰度值为0的像素的数量大于该矩形总像素数的一半,则判定该矩形区域表示的信息为0,否则为1。统计完所有矩形区域后,即得到一个(n+3)×(n+3)的二进制矩阵。

9-5、对所得到的(n+3)×(n+3)的二进制矩阵进行黑边框和定位标识符的检测,黑边框的二进制数表示为全为0的序列,当检测到任意相邻的两边都没有黑边框或者没有定位标识符101010时,则判定图像中不存在AR码,否则,执行下步。

9-6、对(n+3)×(n+3)的二进制矩阵的数据区域进行解码,即得到该改进AR码的编码值。

本发明识别方法对以常规方法无法识别的有弧形畸变的AR码均可得到正确的识别,确定了本发明识别方法的有效性。本发明识别方法可识别在可控噪点干扰下的所有平面AR码、圆柱面上视角为±30°的AR码以及畸变小的圆台面上的AR码。本发明解决了传统识别方法对AR码识别正确率不高问题,解决了当AR码产生弧形畸变的情况下无法正确识别的难题,提高了AR码识别的鲁棒性。本发明识别方法还可以推广到对粘贴于柱面上的二维码或条形码的识别。

附图说明

图1是标在柱面上的改进AR码原图。

图2是改进AR码的样式说明图。

图3是经滤波后的二值化图像的示意图。

图4是遮罩图层的示意图。

图5是只含有AR码区域的二值化图像的示意图。

图6是求取AR码最佳外接矩形的示意图。

图7是AR码被摆正的二值化图像的示意图。

图8是AR码区域轮廓的弧边检测示意图。

图9是逆时针旋转图像两次后的弧边检测示意图。

图10是凹弧边被拉直前的二值化图像的示意图。

图11是修正的二值化图像的示意图。

图12是局部自适应压缩前的AR码二值化图像的示意图。

图13是利用局部自适应压缩算法对图像进行像素抽取的示意图。

图14是局部自适应压缩后的AR码。

图15是求取的抛物线示意图。

图16是柱面改进AR码的非线性划线分割示意图。

具体实施方式

实施例1:

如图1所示,以某柱面待识别对象和数据位为5×5的经典AR码为例,本发明鲁棒识别方法包括如下步骤:

一、通过在AR码中加入定位标志位改进AR码的编码结构,具体方式是:

1-1、在5×5的AR码数据区的上沿加入一个数据位的一行定位标志位,在AR码数据区的左侧加入一个数据位的一列定位标志位,行定位标志位与列定位标志位在左上角形成一个重叠标志位,由此形成一个6×6的分辨区域。

1-2、在行定位标志位上从左至右加入101010的行定位标识符,在列定位标志位上从上至下加入101010的列定位标识符,在左上角重叠标志位中的标识符为“1”,由此形成一个6×6的数据加定位的AR码标识区域。

1-3、在数据加定位的AR码标识区域的四周外围再加入一个黑边框,黑边框的宽度为一个数据位的宽度,由此形成一个8×8的带定位标志位的改进AR码(如图2所示)。

二、将改进AR码粘贴于待识别对象的柱面上,启动摄像机拍摄柱面上的改进AR码,采集得到AR码区域图像I0

三、对AR码区域图像I0进行自适应阈值分割和形态学滤波,得到滤波后的二值化图像I1,如图3所示。

四、检测滤波后的二值化图像I1的轮廓,在排除了图像中的非四个顶点、非凸四边形的轮廓和过小的轮廓之后,得到只含有AR码区域的轮廓,将只含有AR码区域轮廓以外的区域像素填充为代表“0”的纯黑色,做成遮罩图层(如图4所示),再将AR码区域图像I0拷贝进该遮罩图层中,得到只含有AR码区域的二值化图像I2(如图5所示)。该图像中的AR码区域轮廓的四个顶点从左上角开始顺时针依次标记为c0、c1、c2、c3

五、对只含有AR码区域的二值化图像I2中的AR码区域轮廓进行摆正处理,具体方式是:

5-1、以只含有AR码区域的二值化图像I2的左上角顶点为坐标原点,建立直角坐标系,求出连接c0点与c2点的直线L1以及连接c1点与c3点的直线L2,进而求出该两条直线的交点Q的坐标。

5-2、求出只含有AR码区域的二值化图像I2中AR码区域轮廓的最佳外接矩形:以只含有AR码区域的二值化图像I2中AR码区域轮廓的四个顶点c0、c1、c2、c3中距离交点Q最远的一个点为基点,在该基点所在的直线上按以下条件求出距离该点为h像素的两个点:

R=n×l(l≥10)

R/n≤h≤3R/n

其中,n为AR码总行数,l为AR码每一行的平均宽度,R为AR码的总宽度。在实验中h为20像素时为最佳值,这样求出来的矩形区域基本上能包含所有可控畸变范围内的AR码(如图6所示)。

5-3、将上述两点中距交点Q较远的一个点标记为A0,设A0点到交点Q的距离为L,求出直线L1和直线L2上距离交点Q为L的其余三个点的坐标,这三个点按逆时针方向分别标记为A1、A2、A3。连接A0、A1、A2、A3这四个点,构成一个矩形A。

5-4、将矩形A透视变换到与该矩形面积相同的一个正方形区域中,具体方式是:

以矩形A的A0、A1、A2、A3这四个点的坐标值构成透视变换前的矩阵,以与矩形A面积相等的正方形的四个角点A0’、A1’、A2’、A3’的坐标值构成透视变换后的矩阵,以透视变换前的矩阵和透视变换后的矩阵为变换参数,利用透视变换函数进行透视变换,从而得到AR码被摆正的二值化图像I3。本实施例使用以像素大小为92×92的正方形角点为透视变换后的矩阵,进行透视变换(如图7所示)。

六、对AR码被摆正的二值化图像I3中AR码区域轮廓是否存在弧形畸变和凹弧边进行检测,具体方式是:

对AR码被摆正的二值化图像I3进行AR码区域轮廓检测,并以AR码被摆正的二值化图像I3的左上角为坐标原点,AR码区域轮廓的四个顶点自左上角开始,沿逆时针方向分别记做d0、d1、d2、d3,求出d0点与d3点连线的中点横坐标值x;自点(x,0)开始,从上往下扫描AR码被摆正的二值化图像I3上的像素,当扫描到像素值为0时,记下该点的纵坐标值y,将该点的y值与d0点和d3点的y值进行比较,若该点的y值大于d0点与d3点中y值的较大者,则判定d0点与d3点所对应的位于图像最上端的一条边是具有弧形畸变的凹弧边,位于图像最下端的一条边就是与该凹弧边相对应的凸弧边。若该点的y值小于d0点与d3点中y值的较小者,则判定d0点与d3点所对应的位于图像最上端的一条边不是凹弧边。

之后,将AR码被摆正的二值化图像I3逆时针旋转90°,重复步骤六,继续进行AR码区域轮廓的检测。

如果在旋转检测三次之后均未检测到AR码区域轮廓的凹弧边,则判定所采集到的AR码区域图像I0中的AR码没有发生弧形畸变,直接转到步骤九,对其进行非线性划线识别操作。

利用弧形畸变检测方法检测最顶端的边是否为凹弧边。经过这样的弧边检测算法,检测到弧边之后同时也将凹弧边做了朝上的旋转,这使得后续处理更加方便。弧边检测的图片如图8所示。逆时针旋转两次后的图片如图9所示。

七、对检测到有弧形畸变的AR码上的凹弧边进行拉直处理,具体方式是:

将AR码被摆正的二值化图像I3上端凹弧边的两个顶点的纵坐标值中较小的y值记作TopY03,并作为凹弧边的上拉高度。自AR码被摆正的二值化图像I3的左边界到右边界,从上到下,以一个像素为步长,进行连续扫描。当扫描到像素值为0时,记下该点处的纵坐标值y,将该点处的y值标记为TopY,在此步长内的所有像素向上位移一个TopY03–TopY的距离。遍历整个AR码被摆正的二值化图像I3后,AR码区域轮廓的凹弧边即被拉直,得到AR码凹弧边被拉直的二值化图像I4。图10为拉直凹弧边前的AR码,图11为拉直凹弧边后的AR码。

八、对AR码凹弧边被拉直的二值化图像I4中的凸弧边进行拉直处理,具体方式是:

自AR码凹弧边被拉直的二值化图像I4的左边界到右边界,从下到上,以一个像素为步长,进行连续扫描。当扫描到像素值为0时,记下该点处的纵坐标值y,并与步骤六中的TopY03做差,得到每一像素列的一个高度值,记做M。而AR码被摆正的二值化图像I3中AR码区域轮廓中的d1点和d2点的纵坐标值中较小的y值记做S,利用以下计算公式:

M-S=k

M/k=p

M mod p=0

对AR码凹弧边被拉直的图像I4按照单位像素步长,使用上述计算公式确定被抽掉的点,并进行像素抽取,同时将后面的所有像素上移填补间隙。遍历整个AR码凹弧边被拉直的图像I4后,该图像中的凸弧边即被拉直,得到一个轮廓为矩形的修正的二值化图像I5

本发明是利用像素抽取计算公式对图像进行像素抽取,并实时将后面的所有像素上移填补间隙,遍历整个图像后图像中的AR码就实现了局部自适应压缩,凸弧边被拉直,得到了一个基本上为矩形的AR码。图12为压缩前的AR码图像,图13为对图像进行像素抽取的示例图,图14为局部自适应压缩后的AR码图像。

经过以上操作,将带有弧边的AR码成功进行了修正,在实时图像采集中,可以作为弧形AR码修正的滤波算法。

九、对修正的二值化图像I5进行非线性划线识别处理,其具体方式是:

9-1、提取修正的二值化图像I5中的AR码区域轮廓,并对AR码区域轮廓内的区域进行透视变换,其目的是提取局部自适应压缩后的图像中的轮廓,将轮廓内的区域透视变换到与轮廓面积相当的正方形空白图中去。透视变换方式为:以提取到的AR码区域轮廓的四个顶点坐标值为透视变换前的矩阵,以R×R像素大小的正方形空白图像的四个角点坐标值为透视变换后的矩阵,利用透视变换函数,以透视变换前的矩阵和透视变换后的矩阵为变换参数进行透视变换,得到一个R×R像素大小的、完全被AR码填充的二值化图像I6

其中,R为改进AR码的总宽度,其取值为:R=n×l(l≥10);式中,n为AR码的总行数,l为AR码每一行的平均宽度。本实施例是采用面积为80×80像素大小的正方形空白图的四个角点坐标作为透视变换后的矩阵,进行透视变换。

9-2、扫描被AR码填充的二值化图像I6中改进AR码的上端黑边框和下端黑边框,得到改进AR码最上面一行的宽度值Y1和最下面一行的宽度值Y2,改进AR码最上面一行对应的行数记为X1,改进AR码最下面一行对应的行数为记为X2。若Y1–R/n<Y2–R/n,则记Xmin=X1,否则Xmin=X2。将Y1、X1、X2、Y2代入以下公式中:

Y1=aX12+bX1+c

Y2=aX22+bX2+c

2aXmin+b=0

求出参数a、b、c,构造抛物线方程:

Y=aX2+bX+c

9-3、以改进AR码的总行数为X值,代入所构造的抛物线方程中,求得每一行的宽度值Yn(亦即AR码每一行的间隔),得到如图15所示的抛物线。在被AR码填充的二值化图像I6上,按照对应的宽度进行划线,即在AR码上按照图15所示得到的每一行的间隔宽度进行划线,对被AR码填充的二值化图像I6中改进AR码进行非线性划线分割。在水平方向用同样的方法构造关于水平方向划分的抛物线方程,得到每一列的间隔并划线。最终得到8×8=64个矩形。图16是非线性划线分割后得到的结果。

9-4、统计上述矩形中每个矩形内的像素值为0的个数,如果矩形中的灰度值为0的像素的数量大于该矩形总像素数的一半,则判定该矩形区域表示的信息为0,否则为1。统计完所有矩形区域后,即得到一个8×8的二进制矩阵。

9-5、对所得到的8×8的二进制矩阵进行黑边框和定位标识符的检测,黑边框的二进制数表示为全为0的序列,当检测到任意相邻的两边都没有黑边框或者没有定位标识符(101010)时,则判定图像中不存在AR码,否则,执行下步。

9-6、对8×8的二进制矩阵的数据区域进行解码,即得到该改进AR码的编码值。

此外,识别距离与AR码的大小有关,整个AR码的区域在图像中的大小不能小于40×40像素。

以常规方法无法识别如图1所示的AR码,经过以上步骤,可正确识别出该AR码的编码值为915,证明了本发明识别方法的有效性。本发明识别方法的识别距离与AR码的大小有关,整个AR码的区域在图像中的大小不能小于40×40像素。

实施例2:

本实施例是对经典AR码的鲁棒识别,具体方法包括以下步骤:

一、采集标在柱面上的AR码(参看图1),得到AR码区域图像I0

二、对AR码区域图像I0进行自适应阈值分割和形态学滤波,得到滤波后的二值化图像I1(参看图3)。

三、检测滤波后的二值化图像I1的轮廓,在排除了图像中的非四个顶点、非凸四边形的轮廓和过小的轮廓之后,得到只含有AR码区域的轮廓,将只含有AR码区域轮廓以外的区域像素填充为代表“0”的纯黑色,做成遮罩图层(参看图4),再将AR码区域图像I0拷贝进该遮罩图层中,得到只含有AR码区域的二值化图像I2(参看图5)。该图像中的AR码区域轮廓的四个顶点从左上角开始顺时针依次标记为c0、c1、c2、c3(参看图6)。

四、对只含有AR码区域的二值化图像I2中的AR码区域轮廓进行摆正处理,具体方式是:

4-1、参看图6,以只含有AR码区域的二值化图像I2的左上角顶点为坐标原点,建立直角坐标系,求出连接c0点与c2点的直线L1以及连接c1点与c3点的直线L2,进而求出该两条直线的交点Q的坐标。

4-2、求出只含有AR码区域的二值化图像I2中AR码区域轮廓的最佳外接矩形:以只含有AR码区域的二值化图像I2中AR码区域轮廓的四个顶点c0、c1、c2、c3中距离交点Q最远的一个点为基点,在该基点所在的直线上按以下条件求出距离该点为h像素的两个点:

R=n×l(l≥10)

R/n≤h≤3R/n

其中,n为AR码总行数,l为AR码每一行的平均宽度,R为AR码的总宽度。

4-3、将上述两点中距交点Q较远的一个点标记为A0,设A0点到交点Q的距离为L,求出直线L1和直线L2上距离交点Q为L的其余三个点的坐标,这三个点按逆时针方向分别标记为A1、A2、A3。连接A0、A1、A2、A3这四个点,构成一个矩形A。

4-4、将矩形A透视变换到与该矩形面积相同的一个正方形区域中,具体方式是:

以矩形A的A0、A1、A2、A3这四个点的坐标值构成透视变换前的矩阵,以与矩形A面积相等的正方形的四个角点A0’、A1’、A2’、A3’的坐标值构成透视变换后的矩阵,以透视变换前的矩阵和透视变换后的矩阵为变换参数,利用透视变换函数进行透视变换,从而得到AR码被摆正的二值化图像I3(参看图7)。

五、对AR码被摆正的二值化图像I3中AR码区域轮廓是否存在弧形畸变和凹弧边进行检测,具体方式(参看图8)是:

对AR码被摆正的二值化图像I3进行AR码区域轮廓检测,并以AR码被摆正的二值化图像I3的左上角为坐标原点,AR码区域轮廓的四个顶点自左上角开始,沿逆时针方向分别记做d0、d1、d2、d3,求出d0点与d3点连线的中点横坐标值x。自点(x,0)开始,从上往下扫描AR码被摆正的二值化图像I3上的像素,当扫描到像素值为0时,记下该点的纵坐标值y,将该点的y值与d0点和d3点的y值进行比较,若该点的y值大于d0点与d3点中y值的较大者,则判定d0点与d3点所对应的位于图像最上端的一条边是具有弧形畸变的凹弧边,位于图像最下端的一条边就是与该凹弧边相对应的凸弧边(参看图9)。若该点的y值小于d0点与d3点中y值的较小者,则判定d0点与d3点所对应的位于图像最上端的一条边不是凹弧边。

之后,将AR码被摆正的二值化图像I3逆时针旋转90°,重复步骤5,继续进行AR码区域轮廓的检测。

如果在旋转检测三次之后均未检测到AR码区域轮廓的凹弧边,则判定所采集到的AR码区域图像I0中的AR码没有发生弧形畸变,直接转到步骤8,对其进行非线性划线识别操作。

六、对检测到有弧形畸变的AR码上的凹弧边进行拉直处理,具体方式是:

参看图10,将AR码被摆正的二值化图像I3上端凹弧边的两个顶点的纵坐标值中较小的y值记作TopY03,并作为凹弧边的上拉高度。自AR码被摆正的二值化图像I3的左边界到右边界,从上到下,以一个像素为步长,进行连续扫描。当扫描到像素值为0时,记下该点处的纵坐标值y,将该点处的y值标记为TopY,在此步长内的所有像素向上位移一个TopY03–TopY的距离。遍历整个AR码被摆正的二值化图像I3后,AR码区域轮廓的凹弧边即被拉直,得到AR码凹弧边被拉直的二值化图像I4(参看图11)。

七、对AR码凹弧边被拉直的二值化图像I4中的凸弧边进行拉直处理,具体方式是:

参看图12—图14,自AR码凹弧边被拉直的二值化图像I4的左边界到右边界,从下到上,以一个像素为步长,进行连续扫描。当扫描到像素值为0时,记下该点处的纵坐标值y,并与步骤6中的TopY03做差,得到每一像素列的一个高度值,记做M。而AR码被摆正的二值化图像I3中AR码区域轮廓中的d1点和d2点的纵坐标值中较小的y值记做S,利用以下计算公式:

M-S=k

M/k=p

M modp=0

对AR码凹弧边被拉直的图像I4按照单位像素步长,使用上述计算公式确定被抽掉的点,并进行像素抽取,同时将后面的所有像素上移填补间隙。遍历整个AR码凹弧边被拉直的图像I4后,该图像中的凸弧边即被拉直,得到一个轮廓为矩形的修正的二值化图像I5(参看图11)。

八、对修正的二值化图像I5进行非线性划线识别处理,具体方式是:

8-1、提取修正的二值化图像I5中的AR码区域轮廓,并对AR码区域轮廓内的区域进行透视变换,透视变换方式为:以提取到的AR码区域轮廓的四个顶点坐标值为透视变换前的矩阵,以R×R像素大小的正方形空白图像的四个角点坐标值为透视变换后的矩阵,利用透视变换函数,以透视变换前的矩阵和透视变换后的矩阵为变换参数,利用透视变换函数进行透视变换,得到一个R×R像素大小的、完全被AR码填充的二值化图像I6

其中,R为AR码的总宽度,其取值为:R=n×l(l≥10);式中,n为AR码的总行数,l为AR码每一行的平均宽度。

8-2、扫描被AR码填充的二值化图像I6中AR码的最上面一行和最下面一行,得到AR码最上面一行的宽度值Y1和最下面一行的宽度值Y2,AR码最上面一行对应的行数记为X1,AR码最下面一行对应的行数为记为X2。若Y1–R/n<Y2–R/n,则记Xmin=X1,否则Xmin=X2。将Y1、X1、X2、Y2代入以下公式中:

Y1=aX12+bX1+c

Y2=aX22+bX2+c

2aXmin+b=0

求出参数a、b、c,构造抛物线方程:

Y=aX2+bX+c

8-3、将AR码的总行数为X值,代入所构造的抛物线方程中(参看图15),求得每一行的宽度值Yn,在被AR码填充的二值化图像I6上,按照对应的宽度进行划线。在水平方向重复步骤8-2,构造关于水平方向划分的抛物线方程,得到每一列的间隔并划线;由此得到n×n个矩形。

8-4、统计上述矩形中每个矩形内的像素值为0的个数,如果矩形中的灰度值为0的像素的数量大于该矩形总像素数的一半,则判定该矩形区域表示的信息为0,否则为1。统计完所有矩形区域后,即得到一个n×n的二进制矩阵(参看图16)。

8-5、对所得到的n×n的二进制矩阵的数据区域进行解码,即得到该AR码的编码值。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1