標在柱面上的AR碼的魯棒識別方法與流程
2023-06-21 17:38:11 1

本發明涉及一種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碼的編碼值。