发明名称 复杂金属背景下DataMatrix条码区域定位方法
摘要 本发明公开了一种复杂金属背景下DataMatrix条码区域定位方法,利用机器学与级联检测联合的方法快速并抗干扰的识别定位DataMatrix条码区域,依次进行图像预处理、灰度直方图判决、连通域判决、局部二值模式特征判决、连通域判决、边缘直方图特征判决、连通域判决和聚类生长,能够解决生锈腐蚀、高反光、磨损污染和纹理干扰等各种复杂金属上的DataMatrix二维条码区域定位的问题。
申请公布号 CN102346850A 申请公布日期 2012.02.08
申请号 CN201110310325.6 申请日期 2011.10.13
申请人 西北工业大学 发明人 何卫平;王伟;雷蕾;李文涛;林清松
分类号 G06K9/46(2006.01)I;G06K9/54(2006.01)I;G06K9/62(2006.01)I 主分类号 G06K9/46(2006.01)I
代理机构 西北工业大学专利中心 61204 代理人 顾潮琪
主权项 1.一种复杂金属背景下DataMatrix条码区域定位方法,其特征在于包括下述步骤:第一步,预处理图像1.划分网格设输入图像A的网格划分方式为p×q,宽度为w像素,高度为h像素,pix<sub>i,j</sub>代表现图像中i列j行像素点的像素值,则定义整体网格坐标矩阵G为:<maths num="0001"><![CDATA[<math><mrow><mi>G</mi><mo>=</mo><msub><mfenced open='[' close=']'><mtable><mtr><mtd><msub><mi>g</mi><mn>00</mn></msub></mtd><mtd><msub><mi>g</mi><mn>01</mn></msub></mtd><mtd><mo>.</mo><mo>.</mo><mo>.</mo></mtd><mtd><msub><mi>g</mi><mrow><mn>0</mn><mrow><mo>(</mo><mi>q</mi><mo>-</mo><mn>1</mn><mo>)</mo></mrow></mrow></msub></mtd></mtr><mtr><mtd><msub><mi>g</mi><mn>10</mn></msub></mtd><mtd><msub><mi>g</mi><mn>1</mn></msub></mtd><mtd><mo>.</mo><mo>.</mo><mo>.</mo></mtd><mtd><msub><mi>g</mi><mrow><mn>1</mn><mrow><mo>(</mo><mi>q</mi><mo>-</mo><mn>1</mn><mo>)</mo></mrow></mrow></msub></mtd></mtr><mtr><mtd><mo>.</mo><mo>.</mo><mo>.</mo></mtd><mtd><mo>.</mo><mo>.</mo><mo>.</mo></mtd><mtd><mo>.</mo><mo>.</mo><mo>.</mo></mtd><mtd><mo>.</mo><mo>.</mo><mo>.</mo></mtd></mtr><mtr><mtd><msub><mi>g</mi><mrow><mrow><mo>(</mo><mi>p</mi><mo>-</mo><mn>1</mn><mo>)</mo></mrow><mn>0</mn></mrow></msub></mtd><mtd><msub><mi>g</mi><mrow><mrow><mo>(</mo><mi>p</mi><mo>-</mo><mn>1</mn><mo>)</mo></mrow><mn>1</mn></mrow></msub></mtd><mtd><mo>.</mo><mo>.</mo><mo>.</mo></mtd><mtd><msub><mi>g</mi><mrow><mrow><mo>(</mo><mi>p</mi><mo>-</mo><mn>1</mn><mo>)</mo></mrow><mrow><mo>(</mo><mi>q</mi><mo>-</mo><mn>1</mn><mo>)</mo></mrow></mrow></msub></mtd></mtr></mtable></mfenced><mrow><mi>p</mi><mo>&times;</mo><mi>q</mi></mrow></msub></mrow></math>]]></maths>其中,g<sub>m,n</sub>(0≤m<p,0≤n<q)代表第m行n列网格,并定义g<sub>m,n</sub>数组为:<maths num="0002"><![CDATA[<math><mrow><msub><mi>g</mi><mrow><mi>m</mi><mo>,</mo><mi>n</mi></mrow></msub><mo>=</mo><mo>[</mo><mfrac><mi>wm</mi><mi>p</mi></mfrac><mo>,</mo><mfrac><mrow><mi>w</mi><mrow><mo>(</mo><mi>m</mi><mo>+</mo><mn>1</mn><mo>)</mo></mrow></mrow><mi>p</mi></mfrac><mo>,</mo><mfrac><mi>hn</mi><mi>q</mi></mfrac><mo>,</mo><mfrac><mrow><mi>h</mi><mrow><mo>(</mo><mi>n</mi><mo>+</mo><mn>1</mn><mo>)</mo></mrow></mrow><mi>q</mi></mfrac><mo>,</mo><mi>t</mi><mo>]</mo><mo>,</mo></mrow></math>]]></maths>其中<maths num="0003"><![CDATA[<math><mrow><msub><mi>g</mi><mrow><mi>m</mi><mo>,</mo><mi>n</mi></mrow></msub><mo>[</mo><mn>0</mn><mo>]</mo><mo>=</mo><mfrac><mi>wm</mi><mi>p</mi></mfrac><mo>,</mo></mrow></math>]]></maths><maths num="0004"><![CDATA[<math><mrow><msub><mi>g</mi><mrow><mi>m</mi><mo>,</mo><mi>n</mi></mrow></msub><mo>[</mo><mn>1</mn><mo>]</mo><mo>=</mo><mfrac><mrow><mi>w</mi><mrow><mo>(</mo><mi>m</mi><mo>+</mo><mn>1</mn><mo>)</mo></mrow></mrow><mi>p</mi></mfrac><mo>,</mo></mrow></math>]]></maths><maths num="0005"><![CDATA[<math><mrow><msub><mi>g</mi><mrow><mi>m</mi><mo>,</mo><mi>n</mi></mrow></msub><mo>[</mo><mn>2</mn><mo>]</mo><mo>=</mo><mfrac><mi>hn</mi><mi>q</mi></mfrac></mrow></math>]]></maths>和<maths num="0006"><![CDATA[<math><mrow><msub><mi>g</mi><mrow><mi>m</mi><mo>,</mo><mi>n</mi></mrow></msub><mo>[</mo><mn>3</mn><mo>]</mo><mo>=</mo><mfrac><mrow><mi>h</mi><mrow><mo>(</mo><mi>n</mi><mo>+</mo><mn>1</mn><mo>)</mo></mrow></mrow><mi>q</mi></mfrac></mrow></math>]]></maths>分别代表网格g<sub>m,n</sub>的横向最小值、横向最大值、纵向最小值和纵向最大值,并且g<sub>m,n</sub>为正方形区域;g<sub>m,n</sub>[4]=attribute代表网格g<sub>m,n</sub>的属性,attribute∈{1,2,3},其中0代表背景网格,1代表候选目标网格,2代表目标网格;所有网格的属性初始值都赋为1;2.16灰度级重置各网格对于网格g<sub>m,n</sub>,16灰度级重置算法如下:1)首先遍历g<sub>m,n</sub>内的所有像素点,寻找最大像素值V<sub>max</sub>和最小像素值V<sub>min</sub>,判断V<sub>max</sub>-V<sub>min</sub>>17,若成立则转向步骤2)继续执行;若不成立则将g<sub>m,n</sub>属性赋为背景,令g<sub>m,n</sub>[4]=0,然后本次16灰度级重置网格g<sub>m,n</sub>结束;2)建立一个空白的索引区间数组<img file="FDA0000098556590000017.GIF" wi="349" he="68" />其中iterater[l]代表一个索引,l代表索引区间;3)从V<sub>max</sub>到V<sub>min</sub>等分成16区间,得到17个节点的数组<img file="FDA0000098556590000018.GIF" wi="293" he="58" />其中m代表节点:<maths num="0007"><![CDATA[<math><mrow><msubsup><mrow><mo>{</mo><mi>Area</mi><mo>[</mo><mi>m</mi><mo>]</mo></mrow><mrow><mi>m</mi><mo>=</mo><mn>0</mn></mrow><mn>16</mn></msubsup><mo>=</mo><mo>[</mo><msub><mi>V</mi><mi>min</mi></msub><mo>,</mo><msub><mi>V</mi><mi>min</mi></msub><mo>+</mo><mfrac><mrow><msub><mi>V</mi><mi>max</mi></msub><mo>-</mo><msub><mi>V</mi><mi>min</mi></msub></mrow><mn>16</mn></mfrac><mo>,</mo><mo>.</mo><mo>.</mo><mo>.</mo><mo>,</mo><msub><mi>V</mi><mi>min</mi></msub><mo>+</mo><mfrac><mrow><mn>16</mn><mrow><mo>(</mo><msub><mi>V</mi><mi>max</mi></msub><mo>-</mo><msub><mi>V</mi><mi>min</mi></msub><mo>)</mo></mrow></mrow><mn>16</mn></mfrac><mo>]</mo><mo>;</mo></mrow></math>]]></maths>4)若Area[m]≤l≤Area[m+1](0≤m<16),则赋值iterater[l]=m,循环将<img file="FDA0000098556590000021.GIF" wi="319" he="68" />中的每个索引都赋上值;5)再次遍历g<sub>m,n</sub>模块,对于pix<sub>i,j</sub>∈g<sub>m,n</sub>,重新赋像素值:pix<sub>i,j</sub>=iterater[l](pix<sub>i,j</sub>=l);遍历G,利用16灰度级重置算法将其中的每个网格中的所有像素值重新赋值,得到新的重置后的图像A<sub>1</sub>;3.边缘特征提取1)用BOM算法求取图像A<sub>1</sub>的灰度边缘:<img file="FDA0000098556590000022.GIF" wi="698" he="48" />A<sub>2</sub>是16灰度级图像A<sub>1</sub>的灰度边缘图像,<img file="FDA0000098556590000023.GIF" wi="38" he="39" />为灰度膨胀,Θ为灰度腐蚀,g为半径为1的圆形结构元素;2)对于像素点pix<sub>i,j</sub>∈A<sub>1</sub>,求取其边缘强度函数:<img file="FDA0000098556590000024.GIF" wi="603" he="82" />其中e<sub>x</sub>(i,j),e<sub>y</sub>(i,j)分别是像素点pix<sub>i,j</sub>在x与y方向上的梯度,离散表示为:e<sub>x</sub>(i,j)=(pix<sub>i+1,j+1</sub>+2pix<sub>i+1,j</sub>+pix<sub>i+1,j-1</sub>)-(pix<sub>i-1,j+1</sub>+2pix<sub>i-1,j</sub>+pix<sub>i-1,j-1</sub>)e<sub>y</sub>(i,j)=(pix<sub>i+l,j+1</sub>+2pix<sub>i,j+1</sub>+pix<sub>i-1,j+1</sub>)-(pix<sub>i+l,j-1</sub>+2pix<sub>i,j-1</sub>+pix<sub>i-1,j-1</sub>)设定一个阈值T:<maths num="0008"><![CDATA[<math><mrow><mover><mi>e</mi><mo>^</mo></mover><mrow><mo>(</mo><mi>i</mi><mo>,</mo><mi>j</mi><mo>)</mo></mrow><mo>=</mo><mfenced open='{' close=''><mtable><mtr><mtd><mi>e</mi><mrow><mo>(</mo><mi>i</mi><mo>,</mo><mi>j</mi><mo>)</mo></mrow></mtd><mtd><mi>e</mi><mrow><mo>(</mo><mi>i</mi><mo>,</mo><mi>j</mi><mo>)</mo></mrow><mo>></mo><mi>T</mi></mtd></mtr><mtr><mtd><mn>0</mn></mtd><mtd><mi>e</mi><mrow><mo>(</mo><mi>i</mi><mo>,</mo><mi>j</mi><mo>)</mo></mrow><mo>&le;</mo><mi>T</mi></mtd></mtr></mtable></mfenced><mo>,</mo></mrow></math>]]></maths>本发明取T=80;若<img file="FDA0000098556590000026.GIF" wi="231" he="92" />则认为其对应的像素点为非边缘点;循环求取A<sub>1</sub>中所有像素点的边缘强度,将其记录在缓存区E[w×h]中;3)对于像素点<img file="FDA0000098556590000027.GIF" wi="532" he="102" />求取边缘方向函数:<img file="FDA0000098556590000028.GIF" wi="493" he="129" />循环求取A<sub>1</sub>中所有满足<img file="FDA0000098556590000029.GIF" wi="516" he="101" />的像素点的边缘方向,并将其记录在缓存区θ[w×h]中;4)对于g<sub>m,n</sub>[4]=1的候选目标网格g<sub>m,n</sub>,求取其边缘方向累计函数H<sub>m,n</sub>:<maths num="0009"><![CDATA[<math><mrow><msub><mi>H</mi><mrow><mi>m</mi><mo>,</mo><mi>n</mi></mrow></msub><mo>=</mo><msubsup><mrow><mo>{</mo><msub><mi>H</mi><mrow><mi>m</mi><mo>,</mo><mi>n</mi></mrow></msub><mrow><mo>(</mo><mi>t</mi><mo>)</mo></mrow><mo>|</mo><msub><mi>H</mi><mrow><mi>m</mi><mo>,</mo><mi>n</mi></mrow></msub><mrow><mo>(</mo><mi>t</mi><mo>)</mo></mrow><mo>=</mo><munder><mi>&Sigma;</mi><mrow><mrow><mo>(</mo><mi>i</mi><mo>,</mo><mi>j</mi><mo>)</mo></mrow><mo>&Element;</mo><msub><mi>g</mi><mrow><mi>m</mi><mo>,</mo><mi>n</mi></mrow></msub></mrow></munder><mover><mi>e</mi><mo>^</mo></mover><mrow><mo>(</mo><mi>i</mi><mo>,</mo><mi>j</mi><mo>)</mo></mrow><mi>&delta;</mi><mrow><mo>(</mo><mi>&theta;</mi><mrow><mo>(</mo><mi>i</mi><mo>,</mo><mi>j</mi><mo>)</mo></mrow><mo>-</mo><mi>t</mi><mo>)</mo></mrow><mo>}</mo></mrow><mrow><mi>t</mi><mo>=</mo><mn>0</mn></mrow><mn>15</mn></msubsup><mo>,</mo></mrow></math>]]></maths>其中t∈[0,15],代表着<img file="FDA00000985565900000211.GIF" wi="579" he="97" />这16个区间,δ(θ(i,j)-t)函数为:<maths num="0010"><![CDATA[<math><mrow><mi>&delta;</mi><mrow><mo>(</mo><mi>&theta;</mi><mrow><mo>(</mo><mi>i</mi><mo>,</mo><mi>j</mi><mo>)</mo></mrow><mo>-</mo><mi>t</mi><mo>)</mo></mrow><mo>=</mo><mfenced open='{' close=''><mtable><mtr><mtd><mn>1</mn></mtd><mtd><mi>&theta;</mi><mrow><mo>(</mo><mi>i</mi><mo>,</mo><mi>j</mi><mo>)</mo></mrow><mo>&Element;</mo><mo>[</mo><mo>-</mo><mfrac><mi>&pi;</mi><mn>2</mn></mfrac><mo>+</mo><mfrac><mi>&pi;</mi><mn>16</mn></mfrac><mi>t</mi><mo>,</mo><mo>-</mo><mfrac><mi>&pi;</mi><mn>2</mn></mfrac><mo>+</mo><mfrac><mi>&pi;</mi><mn>16</mn></mfrac><mrow><mo>(</mo><mi>t</mi><mo>+</mo><mn>1</mn><mo>)</mo></mrow><mo>]</mo></mtd></mtr><mtr><mtd><mn>0</mn></mtd><mtd><mi>&theta;</mi><mrow><mo>(</mo><mi>i</mi><mo>,</mo><mi>j</mi><mo>)</mo></mrow><mo>&NotElement;</mo><mo>[</mo><mo>-</mo><mfrac><mi>&pi;</mi><mn>2</mn></mfrac><mo>+</mo><mfrac><mi>&pi;</mi><mn>16</mn></mfrac><mi>t</mi><mo>,</mo><mo>-</mo><mfrac><mi>&pi;</mi><mn>2</mn></mfrac><mo>+</mo><mfrac><mi>&pi;</mi><mn>16</mn></mfrac><mrow><mo>(</mo><mi>t</mi><mo>+</mo><mn>1</mn><mo>)</mo></mrow><mo>]</mo></mtd></mtr></mtable></mfenced></mrow></math>]]></maths>循环整体网格矩阵G,得到所有候选目标网格的直方图特征集合:HG={H<sub>m,n</sub>|g<sub>m,n</sub>∈G&amp;&amp;g<sub>m,n</sub>[4]=1};第二步,灰度直方图判决1.候选目标网格灰度直方图特征提取设g<sub>m,n</sub>为图像A<sub>1</sub>中的一个候选目标网格,则g<sub>m,n</sub>的灰度直方图特征提取如下:1)统计g<sub>m,n</sub>中所有像素点,得到一组灰度直方图记为<img file="FDA0000098556590000032.GIF" wi="206" he="58" />其中p(x)代表g<sub>m,n</sub>中像素值为x的像素点的个数;然后将<img file="FDA0000098556590000033.GIF" wi="182" he="58" />按照其最大值归一化,得到归一化的灰度直方图记为<img file="FDA0000098556590000034.GIF" wi="206" he="64" />2)计算直方图平均灰度:<maths num="0011"><![CDATA[<math><mrow><mi>&mu;</mi><mo>=</mo><msub><mi>M</mi><mn>1</mn></msub><mo>=</mo><munderover><mi>&Sigma;</mi><mrow><mi>i</mi><mo>=</mo><mn>0</mn></mrow><mn>15</mn></munderover><mi>x</mi><mover><mrow><mi>p</mi><mrow><mo>(</mo><mi>x</mi><mo>)</mo></mrow></mrow><mo>&OverBar;</mo></mover><mo>;</mo></mrow></math>]]></maths>3)计算直方图方差:<maths num="0012"><![CDATA[<math><mrow><msup><mi>&sigma;</mi><mn>2</mn></msup><mo>=</mo><munderover><mi>&Sigma;</mi><mrow><mi>i</mi><mo>=</mo><mn>0</mn></mrow><mn>15</mn></munderover><msup><mrow><mo>(</mo><mi>x</mi><mo>-</mo><mi>&mu;</mi><mo>)</mo></mrow><mn>2</mn></msup><mover><mrow><mi>p</mi><mrow><mo>(</mo><mi>x</mi><mo>)</mo></mrow></mrow><mo>&OverBar;</mo></mover><mo>;</mo></mrow></math>]]></maths>4)计算直方图偏度:<maths num="0013"><![CDATA[<math><mrow><mi>S</mi><mo>=</mo><munderover><mi>&Sigma;</mi><mrow><mi>i</mi><mo>=</mo><mn>0</mn></mrow><mn>15</mn></munderover><msup><mrow><mo>(</mo><mi>x</mi><mo>-</mo><mi>&mu;</mi><mo>)</mo></mrow><mn>3</mn></msup><mover><mrow><mi>p</mi><mrow><mo>(</mo><mi>x</mi><mo>)</mo></mrow></mrow><mo>&OverBar;</mo></mover><mo>/</mo><msup><mrow><mo>(</mo><msqrt><msup><mi>&sigma;</mi><mn>2</mn></msup></msqrt><mo>)</mo></mrow><mn>3</mn></msup><mo>;</mo></mrow></math>]]></maths>5)计算直方图的熵:<img file="FDA0000098556590000038.GIF" wi="698" he="125" />最后得到g<sub>m,n</sub>的灰度直方图特征HIS<sub>m,n</sub>=[μ,σ<sup>2</sup>,S,ENTROPY];循环整体网格矩阵G,得到所有候选目标网格的直方图特征集合:HS={HIS<sub>m,n</sub>|g<sub>m,n</sub>∈G&amp;&amp;g<sub>m,n</sub>[4]=1};2.灰度直方图判决器训练1)采用n(30<n<60)幅生锈腐蚀、高反光、磨损污染和纹理干扰的金属背景二维条码图像作为训练样本图像,并将这n幅训练样本图像进行划分网格和16灰度级重置各网格算法操作,然后从这n幅训练样本图像中选取n<sub>1</sub>个这些训练样本图像的非条码区域的网格即背景网格作为负训练样本,设为集合<img file="FDA0000098556590000039.GIF" wi="188" he="53" />从这n幅训练样本图像中选取n<sub>1</sub>个这些训练样本图像的条码区域网格作为正训练样本,设为集合<img file="FDA0000098556590000041.GIF" wi="173" he="53" />n<sub>1</sub>=80;2)利用上述的灰度直方图特征提取算法,提取所有负训练样本集合网格<img file="FDA0000098556590000042.GIF" wi="163" he="53" />与正训练样本集合网格<img file="FDA0000098556590000043.GIF" wi="146" he="53" />的灰度直方图特征,将这2n<sub>1</sub>组正负训练样本的的每组直方图特征作为行,共2n<sub>1</sub>组直方图所以有2n<sub>1</sub>列,所以得到一个4×2n<sub>1</sub>的矩阵P<sub>1</sub>;3)设正样本对应的输出为(1,0),负样本对应的输出为(0,1),则矩阵P<sub>1</sub>对应的输出为一个2×2n<sub>1</sub>的矩阵T<sub>1</sub>;利用matlab2008创建一个BP神经网络newff(),BP神经网络的训练函数为trainlm,输入层到隐层节点的传递函数为tansig,隐层节点到输出层的传递函数为logsig;每组输入元素的最大值和最小值为2n<sub>1</sub>×2的矩阵min max(P<sub>1</sub>),并将最大训练次数定为1000,目标误差定为0.001,隐层节点定为7个;4)将矩阵P<sub>1</sub>作为原始输入向量,矩阵T<sub>1</sub>作为输出向量,在matlab2008中利用BP神经网络进行训练,得到输入层到隐层的一个7×4权值矩阵记为netIW1<sub>1</sub>,一个7×1的阈值向量记为netb1<sub>1</sub>;隐层到输出层的一个2×7权值矩阵记为netIW2<sub>1</sub>,一个2×1的阈值向量记为netb2<sub>1</sub>;3.灰度直方图判决HIS<sub>m,n</sub>为一个候选目标网格g<sub>m,n</sub>的灰度直方图特征,将其代入训练结果计算对应的判决输出V-HIS<sub>m,n</sub>:V-HIS<sub>m,n</sub>=log sig(netIW2<sub>1</sub>×tan sig(netIW1<sub>1</sub>×HIS<sub>m,n</sub>+netb1<sub>1</sub>)+netb2<sub>1</sub>)=(a<sub>m,n</sub>,b<sub>m,n</sub>);同理计算g<sub>m,n</sub>的八邻域内所有候选目标网格的判决输出,将这些判决输出求取平均值得到<img file="FDA0000098556590000044.GIF" wi="231" he="68" />如果<img file="FDA0000098556590000045.GIF" wi="208" he="68" />则候选目标网格g<sub>m,n</sub>属性不变,否则将候选目标网格g<sub>m,n</sub>设为背景网格:g<sub>m,n</sub>[4]=0;第三步,连通域判决1.连通区域类圆度判决经过灰度直方图判决后,设图像A<sub>1</sub>中候选目标网格的连通区域为x<sub>1</sub>个,连通区域集合记为<img file="FDA0000098556590000046.GIF" wi="155" he="65" />连通域R<sub>x</sub>中的候选目标网格数目为n<sub>x</sub>(1≤n<sub>x</sub>≤p×q)个,若n<sub>x</sub>≤4,R<sub>x</sub>为污染连通区域,将R<sub>x</sub>从<img file="FDA0000098556590000047.GIF" wi="127" he="65" />集合中删除,并将R<sub>x</sub>中所有候选目标区域的属性赋值为0:{g<sub>m,n</sub>[4]=0|g<sub>m,n</sub>∈R<sub>x</sub>};否则进行连通区域类圆度判决,过程如下:1)对于集合<img file="FDA0000098556590000051.GIF" wi="127" he="65" />中的一个连通域R<sub>x</sub>,首先求取其质心位置(x′,y′):<maths num="0014"><![CDATA[<math><mrow><msup><mi>x</mi><mo>&prime;</mo></msup><mo>=</mo><mfrac><mrow><munder><mi>&Sigma;</mi><mrow><msub><mi>g</mi><mrow><mi>m</mi><mo>,</mo><mi>n</mi></mrow></msub><mo>&Element;</mo><msub><mi>R</mi><mi>x</mi></msub></mrow></munder><mi>m</mi></mrow><msub><mi>n</mi><mi>x</mi></msub></mfrac><mo>,</mo></mrow></math>]]></maths><maths num="0015"><![CDATA[<math><mrow><msup><mi>y</mi><mo>&prime;</mo></msup><mo>=</mo><mfrac><mrow><munder><mi>&Sigma;</mi><mrow><msub><mi>g</mi><mrow><mi>m</mi><mo>,</mo><mi>n</mi></mrow></msub><mo>&Element;</mo><msub><mi>R</mi><mi>x</mi></msub></mrow></munder><mi>n</mi></mrow><msub><mi>n</mi><mi>x</mi></msub></mfrac></mrow></math>]]></maths>2)设R<sub>x</sub>中的候选目标网格g<sub>m,n</sub>,若g<sub>m+1,n</sub>、g<sub>m-1,n</sub>、g<sub>m,n+1</sub>与g<sub>m,n-1</sub>中至少有一个为背景区域,则g<sub>m,n</sub>为非R<sub>x</sub>边缘网格,将g<sub>m,n</sub>从R<sub>x</sub>中去除;否则将其保留标记为边缘网格;循环判断R<sub>x</sub>中的所有候选目标网格,可得R<sub>x</sub>的边缘网格集合,记为<img file="FDA0000098556590000054.GIF" wi="78" he="76" />3)求取质心到<img file="FDA0000098556590000055.GIF" wi="51" he="76" />的最短和最长距离:<maths num="0016"><![CDATA[<math><mrow><mfenced open='{' close=''><mtable><mtr><mtd><mi>min</mi><mi>L</mi><mo>=</mo><mi>min</mi><mo>{</mo><msqrt><msup><mrow><mo>(</mo><msup><mi>x</mi><mo>&prime;</mo></msup><mo>-</mo><mover><mi>x</mi><mo>^</mo></mover><mo>)</mo></mrow><mn>2</mn></msup><mo>+</mo><msup><mrow><mo>(</mo><msup><mi>y</mi><mo>&prime;</mo></msup><mo>-</mo><mover><mi>y</mi><mo>^</mo></mover><mo>)</mo></mrow><mn>2</mn></msup></msqrt><mo>}</mo></mtd></mtr><mtr><mtd><mi>max</mi><mi>L</mi><mo>=</mo><mi>max</mi><mo>{</mo><msqrt><msup><mrow><mo>(</mo><msup><mi>x</mi><mo>&prime;</mo></msup><mo>-</mo><mover><mi>x</mi><mo>^</mo></mover><mo>)</mo></mrow><mn>2</mn></msup><mo>+</mo><msup><mrow><mo>(</mo><msup><mi>y</mi><mo>&prime;</mo></msup><mo>-</mo><mover><mi>y</mi><mo>^</mo></mover><mo>)</mo></mrow><mn>2</mn></msup></msqrt><mo>}</mo></mtd></mtr></mtable></mfenced><msub><mi>g</mi><mrow><mover><mi>x</mi><mo>^</mo></mover><mo>,</mo><mover><mi>y</mi><mo>^</mo></mover></mrow></msub><mo>&Element;</mo><msub><mover><mi>R</mi><mo>^</mo></mover><mi>x</mi></msub><mo>,</mo></mrow></math>]]></maths>并得到边缘到质心的距离集合:<maths num="0017"><![CDATA[<math><mrow><mi>L</mi><mo>=</mo><mfenced open='{' close='}'><mtable><mtr><mtd><mi>l</mi><mo>|</mo><mi>l</mi><mo>=</mo><msqrt><msup><mrow><mo>(</mo><msup><mi>x</mi><mo>&prime;</mo></msup><mo>-</mo><mover><mi>x</mi><mo>^</mo></mover><mo>)</mo></mrow><mn>2</mn></msup><mo>+</mo><msup><mrow><mo>(</mo><msup><mi>y</mi><mo>&prime;</mo></msup><mo>-</mo><mover><mi>y</mi><mo>^</mo></mover><mo>)</mo></mrow><mn>2</mn></msup></msqrt></mtd><mtd><msub><mi>g</mi><mrow><mover><mi>x</mi><mo>^</mo></mover><mo>,</mo><mover><mi>y</mi><mo>^</mo></mover></mrow></msub><mo>&Element;</mo><msub><mover><mi>R</mi><mo>^</mo></mover><mi>x</mi></msub></mtd></mtr></mtable></mfenced><mo>;</mo></mrow></math>]]></maths>然后设圆半径r,计算边缘点到圆周上的平均误差最小圆:<maths num="0018"><![CDATA[<math><mrow><msub><mi>E</mi><mi>best</mi></msub><mo>=</mo><mi>min</mi><mo>{</mo><munder><mi>&Sigma;</mi><mrow><mi>l</mi><mo>&Element;</mo><mi>L</mi></mrow></munder><mo>|</mo><mi>l</mi><mo>-</mo><mi>r</mi><mo>|</mo><mo>/</mo><mi>sizeof</mi><mrow><mo>(</mo><msub><mover><mi>R</mi><mo>^</mo></mover><mi>x</mi></msub><mo>)</mo></mrow><mo>|</mo><mi>min</mi><mi>L</mi><mo>&le;</mo><mi>r</mi><mo>&le;</mo><mi>max</mi><mi>L</mi><mo>}</mo><mo>,</mo></mrow></math>]]></maths><img file="FDA0000098556590000059.GIF" wi="216" he="76" />代表<img file="FDA00000985565900000510.GIF" wi="50" he="76" />集合大小;设E<sub>best</sub>对应的圆半径为r<sub>best</sub>,对应的包络圆记为<img file="FDA00000985565900000511.GIF" wi="113" he="65" />判断类圆度误差与半径之比是否小于某个阈值:<img file="FDA00000985565900000512.GIF" wi="435" he="62" />本发明中取T<sub>1</sub>=0.24;若小于则判定为类圆的连通域,否则判定为待定区域;4)重复步骤1)~3)的过程,将<img file="FDA00000985565900000513.GIF" wi="127" he="65" />中的所有连通域进行类圆度判决,设通过判决的连通域有x<sub>2</sub>(0≤x<sub>2</sub>≤x<sub>1</sub>)个,用集合<img file="FDA00000985565900000514.GIF" wi="127" he="65" />表示;若x<sub>2</sub>≥1,转向第三步的步骤2,否则转向第四步;2.连通区域边缘直方图双峰特征判决1)对于集合<img file="FDA00000985565900000515.GIF" wi="127" he="65" />中的一个连通域R<sub>x</sub>,计算它的整体边缘直方图:<maths num="0019"><![CDATA[<math><mrow><msub><mi>H</mi><mi>Rx</mi></msub><mo>=</mo><mo>{</mo><msub><mi>H</mi><mi>Rx</mi></msub><mrow><mo>(</mo><mi>t</mi><mo>)</mo></mrow><mo>|</mo><msub><mi>H</mi><mi>Rx</mi></msub><mrow><mo>(</mo><mi>t</mi><mo>)</mo></mrow><mo>=</mo><munder><mi>&Sigma;</mi><mrow><msub><mi>g</mi><mrow><mi>m</mi><mo>,</mo><mi>n</mi></mrow></msub><mo>&Element;</mo><msub><mi>R</mi><mi>x</mi></msub></mrow></munder><msub><mi>H</mi><mrow><mi>m</mi><mo>,</mo><mi>n</mi></mrow></msub><mrow><mo>(</mo><mi>t</mi><mo>)</mo></mrow><mi>t</mi><mo>=</mo><mn>0,1,2</mn><mo>,</mo><mo>.</mo><mo>.</mo><mo>.</mo><mn>15</mn><mo>}</mo><mo>;</mo></mrow></math>]]></maths>2)求出R<sub>x</sub>整体边缘直方图的相邻3区间加权最大值:<maths num="0020"><![CDATA[<math><mrow><msub><mi>mainDire</mi><msub><mi>R</mi><mi>x</mi></msub></msub><mo>=</mo><mi>max</mi><mo>{</mo><mn>0.6</mn><msub><mi>H</mi><msub><mi>R</mi><mi>x</mi></msub></msub><mrow><mo>(</mo><mi>t</mi><mo>)</mo></mrow><mo>+</mo><mn>0.4</mn><mrow><mo>(</mo><msub><mi>H</mi><msub><mi>R</mi><mi>x</mi></msub></msub><mrow><mo>(</mo><mrow><mo>(</mo><mi>t</mi><mo>+</mo><mn>15</mn><mo>)</mo></mrow><mo>%</mo><mn>16</mn><mo>)</mo></mrow><mo>+</mo><msub><mi>H</mi><msub><mi>R</mi><mi>x</mi></msub></msub><mrow><mo>(</mo><mrow><mo>(</mo><mi>t</mi><mo>+</mo><mn>17</mn><mo>)</mo></mrow><mo>%</mo><mn>16</mn><mo>)</mo></mrow><mo>)</mo></mrow><mo>}</mo></mrow></math>]]></maths>设<img file="FDA00000985565900000518.GIF" wi="223" he="58" />所对应的区间t设为<img file="FDA00000985565900000519.GIF" wi="162" he="53" />为连通域R<sub>x</sub>的主方向;3)旋转平移H<sub>Rx</sub>,使得<img file="FDA0000098556590000061.GIF" wi="45" he="53" />处于H<sub>Rx</sub>的第5个直方图区间,得到旋转归一化的<img file="FDA0000098556590000062.GIF" wi="113" he="56" /><maths num="0021"><![CDATA[<math><mrow><msub><mover><mi>H</mi><mo>&OverBar;</mo></mover><mi>Rx</mi></msub><mo>=</mo><mo>{</mo><msub><mover><mi>H</mi><mo>&OverBar;</mo></mover><mi>Rx</mi></msub><mrow><mo>(</mo><mi>t</mi><mo>)</mo></mrow><mo>|</mo><msub><mover><mi>H</mi><mo>&OverBar;</mo></mover><mi>Rx</mi></msub><mrow><mo>(</mo><mi>t</mi><mo>)</mo></mrow><mo>=</mo><msub><mi>H</mi><mi>Rx</mi></msub><mrow><mo>(</mo><mrow><mo>(</mo><mi>t</mi><mo>+</mo><mn>20</mn><mo>-</mo><msub><mi>t</mi><msub><mi>R</mi><mi>x</mi></msub></msub><mo>)</mo></mrow><mo>%</mo><mn>16</mn><mo>)</mo></mrow><mo>}</mo><mo>,</mo></mrow></math>]]></maths>其中%为取余运算;4)主方向<img file="FDA0000098556590000064.GIF" wi="45" he="53" />移至第5个区间,由于Datamatrix码的边缘垂直特性,另一主方向被移至13区间附近;计算连通域R<sub>x</sub>的双峰特征值<img file="FDA0000098556590000065.GIF" wi="90" he="47" /><maths num="0022"><![CDATA[<math><mrow><msub><mi>g</mi><msub><mi>R</mi><mi>x</mi></msub></msub><mo>=</mo><mfrac><mrow><msqrt><munderover><mi>&Sigma;</mi><mrow><mi>t</mi><mo>=</mo><mn>0</mn></mrow><mn>8</mn></munderover><msup><mrow><mo>(</mo><mn>4</mn><mo>-</mo><mi>t</mi><mo>)</mo></mrow><mn>2</mn></msup><msup><mrow><mo>(</mo><msub><mover><mi>H</mi><mo>&OverBar;</mo></mover><msub><mi>R</mi><mi>x</mi></msub></msub><mrow><mo>(</mo><mn>4</mn><mo>)</mo></mrow><mo>-</mo><msub><mover><mi>H</mi><mo>&OverBar;</mo></mover><msub><mi>R</mi><mi>x</mi></msub></msub><mrow><mo>(</mo><mi>t</mi><mo>)</mo></mrow><mo>)</mo></mrow><mn>2</mn></msup></msqrt><mo>+</mo><msqrt><munderover><mi>&Sigma;</mi><mrow><mi>t</mi><mo>=</mo><mn>9</mn></mrow><mn>15</mn></munderover><msup><mrow><mo>(</mo><mn>12</mn><mo>-</mo><mi>t</mi><mo>)</mo></mrow><mn>2</mn></msup><msup><mrow><mo>(</mo><msub><mover><mi>H</mi><mo>&OverBar;</mo></mover><msub><mi>R</mi><mi>x</mi></msub></msub><mrow><mo>(</mo><mn>12</mn><mo>)</mo></mrow><mo>-</mo><msub><mover><mi>H</mi><mo>&OverBar;</mo></mover><msub><mi>R</mi><mi>x</mi></msub></msub><mrow><mo>(</mo><mi>t</mi><mo>)</mo></mrow><mo>)</mo></mrow><mn>2</mn></msup></msqrt></mrow><mn>2</mn></mfrac><mo>;</mo></mrow></math>]]></maths>5)与步骤1)~4)过程一样,循环求取<img file="FDA0000098556590000067.GIF" wi="127" he="65" />中所有连通域的双峰特征值,若<img file="FDA0000098556590000068.GIF" wi="232" he="57" />标记为通过连通区域边缘直方图双峰特征判决,为候选目标区域,否则为未通过,标记为通过连通区域边缘直方图双峰特征判决;设通过此判决的连通域个数为x<sub>3</sub>(0≤x<sub>3</sub>≤x<sub>2</sub>)个,用集合<img file="FDA0000098556590000069.GIF" wi="127" he="65" />表示;若x<sub>3</sub>≥1,转向步骤3,否则转向第四步;3.连通区域主方向对比判决1)对于集合<img file="FDA00000985565900000610.GIF" wi="127" he="65" />中的一个连通域R<sub>x</sub>,计算它的主方向对比<img file="FDA00000985565900000611.GIF" wi="82" he="47" /><claim-text><maths num="0023"><![CDATA[<math><mrow><msub><mi>c</mi><msub><mi>R</mi><mi>x</mi></msub></msub><mo>=</mo><mfrac><mrow><mi>max</mi><mo>{</mo><msub><mover><mi>H</mi><mo>&OverBar;</mo></mover><msub><mi>R</mi><mi>x</mi></msub></msub><mrow><mo>(</mo><mn>3</mn><mo>)</mo></mrow><mo>,</mo><msub><mover><mi>H</mi><mo>&OverBar;</mo></mover><msub><mi>R</mi><mi>x</mi></msub></msub><mrow><mo>(</mo><mn>4</mn><mo>)</mo></mrow><mo>,</mo><msub><mover><mi>H</mi><mo>&OverBar;</mo></mover><msub><mi>R</mi><mi>x</mi></msub></msub><mrow><mo>(</mo><mn>5</mn><mo>)</mo></mrow><mo>}</mo></mrow><mrow><mi>max</mi><mo>{</mo><msub><mover><mi>H</mi><mo>&OverBar;</mo></mover><msub><mi>R</mi><mi>x</mi></msub></msub><mrow><mo>(</mo><mn>11</mn><mo>)</mo></mrow><mo>,</mo><msub><mover><mi>H</mi><mo>&OverBar;</mo></mover><msub><mi>R</mi><mi>x</mi></msub></msub><mrow><mo>(</mo><mn>12</mn><mo>)</mo></mrow><mo>,</mo><msub><mover><mi>H</mi><mo>&OverBar;</mo></mover><msub><mi>R</mi><mi>x</mi></msub></msub><mrow><mo>(</mo><mn>13</mn><mo>)</mo></mrow><mo>}</mo></mrow></mfrac><mo>,</mo></mrow></math>]]></maths>若<maths num="0024"><![CDATA[<math><mrow><mn>0.56</mn><mo>&lt;</mo><msub><mi>c</mi><msub><mi>R</mi><mi>x</mi></msub></msub><mo>&lt;</mo><mn>1.8</mn><mo>,</mo></mrow></math>]]></maths>则R<sub>x</sub>为目标区域,将R<sub>x</sub>中的所有候选目标网格定义为目标网格{g<sub>m,n</sub>[4]=2|g<sub>m,n</sub>∈R<sub>x</sub>};否则R<sub>x</sub>为未通过连通域主方向对比判决;</claim-text><claim-text>2)循环判断集合<img file="FDA00000985565900000614.GIF" wi="127" he="65" />中的所有连通域,并重复上一步运算直至全部判断完;设此级判决通过的连通域个数为x<sub>4</sub>个,用集合<img file="FDA00000985565900000615.GIF" wi="127" he="65" />表示,其对应的主方向为集合<img file="FDA00000985565900000616.GIF" wi="150" he="82" />对应的包络圆为集合<img file="FDA00000985565900000617.GIF" wi="166" he="82" /></claim-text><claim-text>4.整体网格矩阵G属性判断</claim-text><claim-text>1)遍历整体网格矩阵G,若存在至少一个g<sub>m,n</sub>[4]=1(g<sub>m,n</sub>∈G),则转向第四步,否则转向步骤2);</claim-text><claim-text>2)若存在g<sub>m,n</sub>[4]=2(g<sub>m,n</sub>∈G),则转向第八步,否则转向步骤3);</claim-text><claim-text>3)提示本图像中没有二维条码,并结束算法;</claim-text><claim-text>第四步,局部二值模式特征判决</claim-text><claim-text>1.候选目标网格局部二值模式特征提取</claim-text><claim-text>设整体网格矩阵G中的一个候选目标网格g<sub>m,n</sub>(g<sub>m,n</sub>[4]=1),其局部二值模式特征提取过程如下:</claim-text><claim-text>1)在图像A<sub>1</sub>中,对于网格g<sub>m,n</sub>中的一个像素pix<sub>i,j</sub>(pix<sub>i,j</sub>∈g<sub>m,n</sub>),建立一个局部描述特征数组<img file="FDA0000098556590000071.GIF" wi="307" he="63" />并且pix<sub>i,j</sub>的8邻域像素为数组:</claim-text><claim-text><maths num="0025"><![CDATA[<math><mrow><msubsup><mrow><mo>{</mo><msub><mi>I</mi><mrow><mi>i</mi><mo>,</mo><mi>j</mi></mrow></msub><mo>[</mo><mi>x</mi><mo>]</mo><mo>}</mo></mrow><mrow><mi>x</mi><mo>=</mo><mn>0</mn></mrow><mn>7</mn></msubsup><mo>=</mo><mo>{</mo><msub><mi>pix</mi><mrow><mi>i</mi><mo>,</mo><mi>j</mi><mo>+</mo><mn>1</mn></mrow></msub><mo>,</mo><msub><mi>pix</mi><mrow><mi>i</mi><mo>+</mo><mn>1</mn><mo>,</mo><mi>j</mi><mo>+</mo><mn>1</mn></mrow></msub><mo>,</mo><msub><mi>pix</mi><mrow><mi>i</mi><mo>+</mo><mn>1</mn><mo>,</mo><mi>j</mi></mrow></msub><mo>,</mo><msub><mi>pix</mi><mrow><mi>i</mi><mo>+</mo><mn>1</mn><mo>,</mo><mi>j</mi><mo>-</mo><mn>1</mn></mrow></msub><mo>,</mo><msub><mi>pix</mi><mrow><mi>i</mi><mo>,</mo><mi>j</mi><mo>-</mo><mn>1</mn></mrow></msub><mo>,</mo><msub><mi>pix</mi><mrow><mi>i</mi><mo>-</mo><mn>1</mn><mo>,</mo><mi>j</mi><mo>-</mo><mn>1</mn></mrow></msub><mo>,</mo><msub><mi>pix</mi><mrow><mi>i</mi><mo>-</mo><mn>1</mn><mo>,</mo><mi>j</mi></mrow></msub><mo>,</mo><msub><mi>pix</mi><mrow><mi>i</mi><mo>-</mo><mn>1</mn><mo>,</mo><mi>j</mi><mo>+</mo><mn>1</mn></mrow></msub><mo>}</mo></mrow></math>]]></maths></claim-text><claim-text>2)给局部描述特征数组<img file="FDA0000098556590000073.GIF" wi="279" he="63" />赋值:<img file="FDA0000098556590000074.GIF" wi="679" he="63" />其中函数s(x)为:<maths num="0026"><![CDATA[<math><mrow><mi>s</mi><mrow><mo>(</mo><mi>x</mi><mo>)</mo></mrow><mo>=</mo><mfenced open='{' close=''><mtable><mtr><mtd><mn>1</mn><mo>,</mo><mi>x</mi><mo>&GreaterEqual;</mo><mn>0</mn></mtd></mtr><mtr><mtd><mn>0</mn><mo>,</mo><mi>x</mi><mo>&lt;</mo><mn>0</mn></mtd></mtr></mtable></mfenced><mo>;</mo></mrow></math>]]></maths></claim-text><claim-text>3)求取<img file="FDA0000098556590000076.GIF" wi="279" he="63" />的泛化值v<sub>i,j</sub>:</claim-text><claim-text><maths num="0027"><![CDATA[<math><mrow><msub><mi>v</mi><mrow><mi>i</mi><mo>,</mo><mi>j</mi></mrow></msub><mo>=</mo><munderover><mi>&Sigma;</mi><mrow><mi>x</mi><mo>=</mo><mn>0</mn></mrow><mn>6</mn></munderover><mo>|</mo><msub><mi>temp</mi><mrow><mi>i</mi><mo>,</mo><mi>j</mi></mrow></msub><mo>[</mo><mi>x</mi><mo>+</mo><mn>1</mn><mo>]</mo><mo>-</mo><msub><mi>temp</mi><mrow><mi>i</mi><mo>,</mo><mi>j</mi></mrow></msub><mo>[</mo><mi>x</mi><mo>]</mo><mo>|</mo><mo>+</mo><mo>|</mo><msub><mi>temp</mi><mrow><mi>i</mi><mo>,</mo><mi>j</mi></mrow></msub><mo>[</mo><mn>7</mn><mo>]</mo><mo>-</mo><msub><mi>temp</mi><mrow><mi>i</mi><mo>,</mo><mi>j</mi></mrow></msub><mo>[</mo><mn>0</mn><mo>]</mo><mo>|</mo></mrow></math>]]></maths></claim-text><claim-text>若v<sub>i,j</sub>≤2,则像素pix<sub>i,j</sub>的局部二值模式特征值为:<img file="FDA0000098556590000078.GIF" wi="419" he="121" />否则lbp<sub>i,j</sub>=9;</claim-text><claim-text>4)与1)~3)步算法一致,求取g<sub>m,n</sub>中所有像素点的局部二值模式特征值,并统计叠加,得到网格g<sub>m,n</sub>的局部二值模式特征LBP<sub>m,n</sub>,表示如下:<maths num="0028"><![CDATA[<math><mrow><msub><mi>LBP</mi><mrow><mi>m</mi><mo>,</mo><mi>n</mi></mrow></msub><mo>=</mo><msubsup><mrow><mo>{</mo><msub><mi>LBP</mi><mrow><mi>m</mi><mo>,</mo><mi>n</mi></mrow></msub><mo>[</mo><mi>x</mi><mo>]</mo><mo>|</mo><msub><mi>LBP</mi><mrow><mi>m</mi><mo>,</mo><mi>n</mi></mrow></msub><mo>[</mo><mi>x</mi><mo>]</mo><mo>=</mo><munder><mi>&Sigma;</mi><mrow><msub><mi>pix</mi><mrow><mi>i</mi><mo>,</mo><mi>j</mi></mrow></msub><mo>&Element;</mo><msub><mi>g</mi><mrow><mi>m</mi><mo>,</mo><mi>n</mi></mrow></msub></mrow></munder><mfrac><mrow><mi>&delta;</mi><mrow><mo>(</mo><msub><mi>lbp</mi><mrow><mi>i</mi><mo>,</mo><mi>j</mi></mrow></msub><mo>-</mo><mi>x</mi><mo>)</mo></mrow></mrow><mrow><mi>sizeof</mi><mrow><mo>(</mo><msub><mi>g</mi><mrow><mi>m</mi><mo>,</mo><mi>n</mi></mrow></msub><mo>)</mo></mrow></mrow></mfrac><mo>}</mo></mrow><mrow><mi>x</mi><mo>=</mo><mn>0</mn></mrow><mn>8</mn></msubsup><mo>,</mo></mrow></math>]]></maths>其中LBP<sub>m,n</sub>[x]为g<sub>m,n</sub>中所有像素点局部二值模式特征值为x的频率,sizeof(g<sub>m,n</sub>)代表g<sub>m,n</sub>中像素点的数量,δ(x)函数表示为:<maths num="0029"><![CDATA[<math><mrow><mi>&delta;</mi><mrow><mo>(</mo><mi>x</mi><mo>)</mo></mrow><mo>=</mo><mfenced open='{' close=''><mtable><mtr><mtd><mn>1</mn></mtd><mtd><mi>x</mi><mo>=</mo><mn>0</mn></mtd></mtr><mtr><mtd><mn>0</mn></mtd><mtd><mi>x</mi><mo>&NotEqual;</mo><mn>0</mn></mtd></mtr></mtable></mfenced><mo>;</mo></mrow></math>]]></maths></claim-text><claim-text>遍历整体网格矩阵G中的所有候选目标网格,和1)~4)步算法一致,得到所有候选目标网格的局部二值模式特征集合:LBP={LBP<sub>m,n</sub>|g<sub>m,n</sub>∈G&amp;&amp;g<sub>m,n</sub>[4]=1};</claim-text><claim-text>2.局部二值模式特征判决器训练</claim-text><claim-text>1)利用第二步步骤2所选出的n幅训练样本图像,将这n幅训练样本图像进行上述所有步骤运算,然后选取n<sub>2</sub>=80个这些训练样本图像的候选目标网格中的背景网格作为负训练样本,设为集合<img file="FDA00000985565900000711.GIF" wi="185" he="53" />选取n<sub>2</sub>个这些训练样本图像的条码区域网格作为正训练样本,设为集合<img file="FDA00000985565900000712.GIF" wi="173" he="53" /></claim-text><claim-text>2)利用第四步步骤1中的候选目标网格局部二值模式特征提取算法,提取所有负训练样本集合网格<img file="FDA0000098556590000081.GIF" wi="162" he="53" />与正训练样本集合网格<img file="FDA0000098556590000082.GIF" wi="146" he="53" />的局部二值模式特征,并将这2n<sub>2</sub>组灰度直方图特征记为一个9×2n<sub>2</sub>的矩阵P<sub>2</sub>;</claim-text><claim-text>3)设正样本对应的输出为(1,0),负样本对应的输出为(0,1),则矩阵P<sub>2</sub>对应的输出为一个2×2n<sub>2</sub>的矩阵T<sub>2</sub>;利用matlab2008创建一个BP神经网络newff(),BP神经网络的训练函数为trainlm,输入层到隐层节点的传递函数为tansig,隐层节点到输出层的传递函数为logsig;每组输入元素的最大值和最小值为2n<sub>2</sub>×2的矩阵min max(P<sub>2</sub>),并将最大训练次数定为1000,目标误差定为0.001,隐层节点定为20个;</claim-text><claim-text>4)将矩阵P<sub>2</sub>作为原始输入向量,矩阵T<sub>2</sub>作为输出向量,在matlab2008中利用BP神经网络进行训练,得到输入层到隐层的一个20×9权值矩阵记为netIW1<sub>2</sub>,一个20×1的阈值向量记为netb1<sub>2</sub>;隐层到输出层的一个2×20权值矩阵记为netIW2<sub>2</sub>,一个2×1的阈值向量记为netb2<sub>2</sub>;</claim-text><claim-text>3.局部二值模式特征判决</claim-text><claim-text>LBP<sub>m,n</sub>为一个候选目标网格g<sub>m,n</sub>的局部二值模式特征,将其代入训练结果计算对应的判决输出V-LBP<sub>m,n</sub>:</claim-text><claim-text>V-LBP<sub>m,n</sub>=logsig(netIW2<sub>2</sub>×tan sig(netIW1<sub>2</sub>×LBP<sub>m,n</sub>+netb1<sub>2</sub>)+netb2<sub>2</sub>)=(c<sub>m,n</sub>,d<sub>m,n</sub>);同理计算g<sub>m,n</sub>的八邻域内所有候选目标网格的判决输出,将这些判决输出求取平均值得到<img file="FDA0000098556590000083.GIF" wi="231" he="68" />如果<img file="FDA0000098556590000084.GIF" wi="210" he="68" />则候选目标网格g<sub>m,n</sub>属性不变,否则将候选目标网格g<sub>m,n</sub>设为背景网格:g<sub>m,n</sub>[4]=0;</claim-text><claim-text>第五步,连通域判决</claim-text><claim-text>1.连通区域类圆度判决</claim-text><claim-text>经过局部二值模式特征判决后,设候选目标网格的连通区域为y<sub>1</sub>个,连通区域集合记为<img file="FDA0000098556590000085.GIF" wi="155" he="87" />连通域R<sub>y</sub>中的候选目标网格数目为n<sub>y</sub>(1≤n<sub>y</sub>≤p×q)个,若n<sub>y</sub>≤4,R<sub>y</sub>为污染连通区域,将R<sub>y</sub>从<img file="FDA0000098556590000086.GIF" wi="127" he="87" />集合中删除,并将R<sub>y</sub>中所有候选目标区域的属性赋值为0:{g<sub>m,n</sub>[4]=0|g<sub>m,n</sub>∈R<sub>y</sub>};否则进行连通区域类圆度判决,判决算法如第三步1中“连通区域类圆度判决”一致;设通过判决的连通域有y<sub>2</sub>(0≤y<sub>2</sub>≤y<sub>1</sub>)个,用集合<img file="FDA0000098556590000091.GIF" wi="127" he="87" />表示;若y<sub>2</sub>≥1,转向第五步步骤2,否则转向第六步;</claim-text><claim-text>2.连通区域边缘直方图双峰特征判决</claim-text><claim-text>此步与第三步步骤2一致,设集合<img file="FDA0000098556590000092.GIF" wi="127" he="87" />通过此判决的连通域个数为y<sub>3</sub>(0≤y<sub>3</sub>≤y<sub>2</sub>)个,用集合<img file="FDA0000098556590000093.GIF" wi="127" he="87" />表示;若y<sub>3</sub>≥1,转向第五步步骤3,否则转向第六步;</claim-text><claim-text>3.连通区域主方向对比判决</claim-text><claim-text>此步与第三步步骤3一致,将<img file="FDA0000098556590000094.GIF" wi="127" he="87" />中所有通过此级判决的连通域中所有候选目标网格定义为目标网格;否则不予理睬;设此级判决通过的连通域个数为y<sub>4</sub>个,用集合<img file="FDA0000098556590000095.GIF" wi="127" he="87" />表示,其对应的主方向为集合<img file="FDA0000098556590000096.GIF" wi="150" he="95" />对应的包络圆为集合<img file="FDA0000098556590000097.GIF" wi="165" he="95" /></claim-text><claim-text>4.整体网格矩阵G属性判断</claim-text><claim-text>1)遍历整体网格矩阵G,若存在至少一个g<sub>m,n</sub>[4]=1(g<sub>m,n</sub>∈G),则转向第六步,否则转向步骤2);</claim-text><claim-text>2)若存在g<sub>m,n</sub>[4]=2(g<sub>m,n</sub>∈G),则转向第八步,否则转向步骤3);</claim-text><claim-text>3)提示本图像中没有二维条码,并结束算法;</claim-text><claim-text>第六步,边缘直方图特征判决</claim-text><claim-text>1.候选目标网格边缘直方图特征提取</claim-text><claim-text>经过上述所有判决之后,设整体网格矩阵G中的一个候选目标网格g<sub>m,n</sub>(g<sub>m,n</sub>[4]=1),其边缘直方图特征提取过程如下:</claim-text><claim-text>1)以8邻域区间联合边缘特性代替一个网格的边缘特性:</claim-text><claim-text><maths num="0030"><![CDATA[<math><mrow><mover><msub><mi>H</mi><mrow><mo>(</mo><mi>m</mi><mo>,</mo><mi>n</mi><mo>)</mo></mrow></msub><mo>&OverBar;</mo></mover><mo>=</mo><msubsup><mrow><mo>{</mo><mover><msub><mi>H</mi><mrow><mo>(</mo><mi>m</mi><mo>,</mo><mi>n</mi><mo>)</mo></mrow></msub><mo>&OverBar;</mo></mover><mrow><mo>(</mo><mi>t</mi><mo>)</mo></mrow><mo>|</mo><mover><msub><mi>H</mi><mrow><mo>(</mo><mi>m</mi><mo>,</mo><mi>n</mi><mo>)</mo></mrow></msub><mo>&OverBar;</mo></mover><mrow><mo>(</mo><mi>t</mi><mo>)</mo></mrow><mo>=</mo><munder><mi>&Sigma;</mi><mrow><mrow><mo>(</mo><msup><mi>m</mi><mo>&prime;</mo></msup><mo>,</mo><msup><mi>n</mi><mo>&prime;</mo></msup><mo>)</mo></mrow><mo>&Element;</mo><msub><mi>I</mi><mrow><mo>(</mo><mi>m</mi><mo>,</mo><mi>n</mi><mo>)</mo></mrow></msub></mrow></munder><msub><mi>H</mi><mrow><mo>(</mo><msup><mi>m</mi><mo>&prime;</mo></msup><mo>,</mo><msup><mi>n</mi><mo>&prime;</mo></msup><mo>)</mo></mrow></msub><mrow><mo>(</mo><mi>t</mi><mo>)</mo></mrow><mo>}</mo></mrow><mrow><mi>t</mi><mo>=</mo><mn>0</mn></mrow><mn>15</mn></msubsup><mo>,</mo></mrow></math>]]></maths>其中集合I<sub>(m,n)</sub>为(m,n)模块的8邻域区间;</claim-text><claim-text>2)通过相邻3区间加权法求出网格g<sub>m,n</sub>主方向区间:</claim-text><claim-text><maths num="0031"><![CDATA[<math><mrow><msub><mi>mainDire</mi><mrow><mo>(</mo><mi>m</mi><mo>,</mo><mi>n</mi><mo>)</mo></mrow></msub><mo>=</mo><mi>max</mi><mo>{</mo><mn>0.6</mn><mo>&times;</mo><mover><msub><mi>H</mi><mrow><mo>(</mo><mi>m</mi><mo>,</mo><mi>n</mi><mo>)</mo></mrow></msub><mo>&OverBar;</mo></mover><mrow><mo>(</mo><mi>t</mi><mo>)</mo></mrow><mo>+</mo><mn>0.4</mn><mo>&times;</mo><mrow><mo>(</mo><mover><msub><mi>H</mi><mrow><mo>(</mo><mi>m</mi><mo>,</mo><mi>n</mi><mo>)</mo></mrow></msub><mo>&OverBar;</mo></mover><mrow><mo>(</mo><mrow><mo>(</mo><mi>t</mi><mo>+</mo><mn>15</mn><mo>)</mo></mrow><mo>%</mo><mn>16</mn><mo>)</mo></mrow><mo>+</mo><mover><msub><mi>H</mi><mrow><mo>(</mo><mi>m</mi><mo>,</mo><mi>n</mi><mo>)</mo></mrow></msub><mo>&OverBar;</mo></mover><mrow><mo>(</mo><mrow><mo>(</mo><mi>t</mi><mo>+</mo><mn>17</mn><mo>)</mo></mrow><mo>%</mo></mrow><mn>16</mn><mo>)</mo></mrow><mo>)</mo><mo>}</mo></mrow></math>]]></maths></claim-text><claim-text>设mainDire<sub>m,n</sub>所对应的区间t设为t<sub>2</sub>,t<sub>2</sub>为网格g<sub>m,n</sub>的主方向;</claim-text><claim-text>3)旋转平移<img file="FDA0000098556590000101.GIF" wi="148" he="67" />使得t<sub>2</sub>处于<img file="FDA0000098556590000102.GIF" wi="122" he="67" />的第5个直方图区间,得到旋转归一化的<img file="FDA0000098556590000103.GIF" wi="148" he="79" /><maths num="0032"><![CDATA[<math><mrow><mover><msub><mi>H</mi><mrow><mo>(</mo><mi>m</mi><mo>,</mo><mi>n</mi><mo>)</mo></mrow></msub><mo>^</mo></mover><mo>=</mo><msubsup><mrow><mo>{</mo><mover><msub><mi>H</mi><mrow><mo>(</mo><mi>m</mi><mo>,</mo><mi>n</mi><mo>)</mo></mrow></msub><mo>^</mo></mover><mrow><mo>(</mo><mi>t</mi><mo>)</mo></mrow><mo>|</mo><mover><msub><mi>H</mi><mrow><mo>(</mo><mi>m</mi><mo>,</mo><mi>n</mi><mo>)</mo></mrow></msub><mo>^</mo></mover><mrow><mo>(</mo><mi>t</mi><mo>)</mo></mrow><mo>=</mo><mover><msub><mi>H</mi><mrow><mo>(</mo><mi>m</mi><mo>,</mo><mi>n</mi><mo>)</mo></mrow></msub><mo>&OverBar;</mo></mover><mrow><mo>(</mo><mrow><mo>(</mo><mi>t</mi><mo>+</mo><mn>20</mn><mo>-</mo><msub><mi>t</mi><mn>1</mn></msub><mo>)</mo></mrow><mo>%</mo><mn>16</mn><mo>)</mo></mrow><mo>}</mo></mrow><mrow><mi>t</mi><mo>=</mo><mn>0</mn></mrow><mn>15</mn></msubsup><mo>,</mo></mrow></math>]]></maths>其中%为取余运算,<img file="FDA0000098556590000105.GIF" wi="117" he="79" />即为g<sub>m,n</sub>的边缘直方图特征;</claim-text><claim-text>遍历整体网格矩阵G中的所有候选目标网格,和1)~3)步算法一致,得到所有候选目标网格的边缘直方图特征集合:<img file="FDA0000098556590000106.GIF" wi="777" he="74" /></claim-text><claim-text>2边缘直方图特征判决器训练</claim-text><claim-text>1)利用第二步灰度直方图判决器训练所选出的选出n幅训练样本图像,并将这n幅训练样本图像进行上述所有判决,然后选取n<sub>3</sub>个这些训练样本图像的候选目标网格中的背景网格作为负训练样本,设为集合<img file="FDA0000098556590000107.GIF" wi="185" he="53" />选取n<sub>3</sub>个这些训练样本图像的条码区域网格作为正训练样本,设为集合<img file="FDA0000098556590000108.GIF" wi="168" he="53" /></claim-text><claim-text>2)利用第六步步骤1中的候选目标网格边缘直方图特征提取算法,提取所有负训练样本集合网格<img file="FDA0000098556590000109.GIF" wi="160" he="53" />与正训练样本集合网格<img file="FDA00000985565900001010.GIF" wi="144" he="53" />的边缘直方图特征,并将这2n<sub>3</sub>组灰度直方图特征记为一个16×2n<sub>3</sub>的矩阵P<sub>3</sub>;</claim-text><claim-text>3)设正样本对应的输出为(1,0),负样本对应的输出为(0,1),则矩阵P<sub>3</sub>对应的输出为一个2×2n<sub>3</sub>的矩阵T<sub>3</sub>;利用matlab2008创建一个BP神经网络newff(),BP神经网络的训练函数为trainlm,输入层到隐层节点的传递函数为tansig,隐层节点到输出层的传递函数为logsig;每组输入元素的最大值和最小值为2n<sub>3</sub>×2的矩阵min max(P<sub>3</sub>),并将最大训练次数定为1000,目标误差定为0.001,隐层节点定为30个;</claim-text><claim-text>4)将矩阵P<sub>3</sub>作为原始输入向量,矩阵T<sub>3</sub>作为输出向量,在matlab2008中利用BP神经网络进行训练,得到输入层到隐层的一个30×16权值矩阵记为netIW1<sub>3</sub>,一个30×1的阈值向量记为netb1<sub>3</sub>;隐层到输出层的一个2×30权值矩阵记为netIW2<sub>3</sub>,一个2×1的阈值向量记为netb2<sub>3</sub>;</claim-text><claim-text>3.边缘直方图特征判决</claim-text><claim-text><img file="FDA00000985565900001011.GIF" wi="107" he="74" />为一个候选目标网格g<sub>m,n</sub>的边缘直方图特征,将其代入训练结果计算对应的判决输出V-EOH<sub>m,n</sub>:</claim-text><maths num="0033"><![CDATA[<math><mrow><mi>V</mi><mo>-</mo><msub><mi>EOH</mi><mrow><mi>m</mi><mo>,</mo><mi>n</mi></mrow></msub><mo>=</mo><mi>log</mi><mi>sig</mi><mrow><mo>(</mo><mi>net</mi><msub><mrow><mi>IW</mi><mn>2</mn></mrow><mn>3</mn></msub><mo>&times;</mo><mi>tan</mi><mi>sig</mi><mrow><mo>(</mo><mi>net</mi><msub><mrow><mi>IW</mi><mn>1</mn></mrow><mn>3</mn></msub><mo>&times;</mo><mover><msub><mi>H</mi><mrow><mo>(</mo><mi>m</mi><mo>,</mo><mi>n</mi><mo>)</mo></mrow></msub><mo>^</mo></mover><mo>+</mo><msub><mrow><mi>netb</mi><mn>1</mn></mrow><mn>3</mn></msub><mo>)</mo></mrow><mo>+</mo><msub><mrow><mi>netb</mi><mn>2</mn></mrow><mn>3</mn></msub><mo>)</mo></mrow><mo>=</mo><mrow><mo>(</mo><msub><mi>e</mi><mrow><mi>m</mi><mo>,</mo><mi>n</mi></mrow></msub><mo>,</mo><msub><mi>f</mi><mrow><mi>m</mi><mo>,</mo><mi>n</mi></mrow></msub><mo>)</mo></mrow><mo>;</mo></mrow></math>]]></maths>同理计算g<sub>m,n</sub>的八邻域内所有候选目标网格的判决输出,将这些判决输出求取平均值得到<img file="FDA0000098556590000112.GIF" wi="231" he="68" />如果<img file="FDA0000098556590000113.GIF" wi="208" he="68" />则候选目标网格g<sub>m,n</sub>属性不变,否则将候选目标网格g<sub>m,n</sub>设为背景网格:g<sub>m,n</sub>[4]=0;第七步,连通域判决1.连通区域类圆度判决经过边缘直方图特征判决后,设候选目标网格的连通区域为z<sub>1</sub>个,连通区域集合记为<img file="FDA0000098556590000114.GIF" wi="151" he="65" />连通域R<sub>z</sub>中的候选目标网格数目为n<sub>z</sub>(1≤n<sub>z</sub>≤p×q)个,若n<sub>z</sub>≤4,R<sub>z</sub>为污染连通区域,将R<sub>z</sub>从<img file="FDA0000098556590000115.GIF" wi="125" he="65" />集合中删除,并将R<sub>z</sub>中所有候选目标区域的属性赋值为0:{g<sub>m,n</sub>[4]=0|g<sub>m,n</sub>∈R<sub>z</sub>};否则进行连通区域类圆度判决,判决算法如第三步步骤1一致;设通过判决的连通域有z<sub>2</sub>(0≤z<sub>2</sub>≤z<sub>1</sub>)个,用集合<img file="FDA0000098556590000116.GIF" wi="125" he="65" />表示;若z<sub>2</sub>≥1,转向第七步步骤2,否则转向第八步;2.连通区域边缘直方图双峰特征判决此步与第三步步骤2一致,设集合<img file="FDA0000098556590000117.GIF" wi="125" he="65" />通过此判决的连通域个数为z<sub>3</sub>(0≤z<sub>3</sub>≤z<sub>2</sub>)个,用集合<img file="FDA0000098556590000118.GIF" wi="125" he="65" />表示;若z<sub>3</sub>≥1,转向第七步步骤3,否则转向第八步;3.连通区域主方向对比判决此步与第三步步骤3一致,将<img file="FDA0000098556590000119.GIF" wi="125" he="65" />中所有通过此级判决的连通域中所有候选目标网格定义为目标网格;否则不予理睬;设此级判决通过的连通域个数为z<sub>4</sub>个,用集合<img file="FDA00000985565900001110.GIF" wi="125" he="65" />表示,其对应的主方向为集合<img file="FDA00000985565900001111.GIF" wi="146" he="82" />对应的包络圆为集合<img file="FDA00000985565900001112.GIF" wi="166" he="82" />4.整体网格矩阵G属性判断若存在g<sub>m,n</sub>[4]=2(g<sub>m,n</sub>∈G),则转向第八步,否则提示本图像中没有二维条码,并结束算法;第八步,聚类生长对于第3步步骤3、第5步步骤3和第7步步骤3中通过连通域判决的<img file="FDA00000985565900001113.GIF" wi="155" he="65" /><img file="FDA00000985565900001114.GIF" wi="127" he="87" />与<img file="FDA00000985565900001115.GIF" wi="151" he="65" />及其所对应的主方向<img file="FDA00000985565900001116.GIF" wi="150" he="82" /><img file="FDA00000985565900001117.GIF" wi="123" he="95" />与<img file="FDA00000985565900001118.GIF" wi="146" he="82" />对应的包络圆<img file="FDA00000985565900001119.GIF" wi="167" he="82" /><img file="FDA00000985565900001120.GIF" wi="141" he="95" />与<img file="FDA0000098556590000121.GIF" wi="166" he="82" />将这几个连通域合并,则有num=c<sub>4</sub>+y<sub>4</sub>+z<sub>4</sub>个连通域,设合并后的连通域为集合<img file="FDA0000098556590000122.GIF" wi="159" he="65" />其对应的主方向为集合<img file="FDA0000098556590000123.GIF" wi="154" he="82" />对应的包络圆为集合<img file="FDA0000098556590000124.GIF" wi="174" he="82" />聚类生长的具体过程如下:1)对于连通域为集合<img file="FDA0000098556590000125.GIF" wi="136" he="65" />中的一个连通域R<sub>x</sub>,以其对应的包络圆<img file="FDA0000098556590000126.GIF" wi="64" he="59" />为基础,以<img file="FDA0000098556590000127.GIF" wi="69" he="108" />长度为一次生长步伐,以方向集<img file="FDA0000098556590000128.GIF" wi="736" he="107" />中的8个方向分别生长;2)设θ(θ∈D)方向一次生长后的包络圆为C<sub>θ</sub>′,计算区域<img file="FDA0000098556590000129.GIF" wi="165" he="62" />的16区间边缘梯度方向直方图<img file="FDA00000985565900001210.GIF" wi="231" he="70" />和<img file="FDA00000985565900001211.GIF" wi="308" he="70" />计算过程与5.3.2连通域边缘直方图双峰特征判决一致;求取欧式距离:<maths num="0034"><![CDATA[<math><mrow><msub><mi>DIS</mi><mi>&theta;</mi></msub><mo>=</mo><msup><mrow><mo>[</mo><munderover><mi>&Sigma;</mi><mrow><mi>t</mi><mo>=</mo><mn>0</mn></mrow><mn>15</mn></munderover><msup><mrow><mo>(</mo><msub><mi>H</mi><msub><mi>C</mi><msub><mi>R</mi><mi>x</mi></msub></msub></msub><mrow><mo>(</mo><mi>t</mi><mo>)</mo></mrow><mo>-</mo><msub><mi>H</mi><mrow><msup><msub><mi>C</mi><mi>&theta;</mi></msub><mo>&prime;</mo></msup><mo>-</mo><msub><mi>C</mi><msub><mi>R</mi><mi>x</mi></msub></msub></mrow></msub><mrow><mo>(</mo><mi>t</mi><mo>)</mo></mrow><mo>)</mo></mrow><mn>2</mn></msup><mo>]</mo></mrow><mfrac><mn>1</mn><mn>2</mn></mfrac></msup><mo>;</mo></mrow></math>]]></maths>3)DIS<sub>θ′</sub>=min{DIS<sub>θ</sub>}所对应的生长方向θ′设为最佳生长方向,求取区域<img file="FDA00000985565900001213.GIF" wi="165" he="62" />的主方向,设为<img file="FDA00000985565900001214.GIF" wi="148" he="58" />求取区域<img file="FDA00000985565900001215.GIF" wi="165" he="62" />的边缘直方图双峰特征,设为<img file="FDA00000985565900001216.GIF" wi="166" he="52" />求取算法与第三步步骤2一致;然后求取区域<img file="FDA00000985565900001217.GIF" wi="165" he="62" />的主方向对比特征,设为<img file="FDA00000985565900001218.GIF" wi="157" he="52" />求取算法与第三步步骤3一致;如果<img file="FDA00000985565900001219.GIF" wi="117" he="58" />与连通域R<sub>x</sub>的主方向<img file="FDA00000985565900001220.GIF" wi="45" he="53" />差异小于或等于1个区间,并且此区域的双峰平均峰度值<img file="FDA00000985565900001221.GIF" wi="308" he="62" />主方向对比<img file="FDA00000985565900001222.GIF" wi="402" he="62" />则此次生长有效,包络圆C<sub>θ</sub>′为新的生长基础,转向步骤2)继续执行;否则生长结束,包络圆C<sub>θ</sub>′为最终R<sub>x</sub>条码区域的包络区间;4)重复步骤1)~3)的过程,直至集合<img file="FDA00000985565900001223.GIF" wi="136" he="65" />中的连通区域全部生长完毕,则整个算法结束。
地址 710072 陕西省西安市友谊西路127号