本發明涉及計算機技術領域,特別涉及一種動物耳標矩陣碼的識別方法以及裝置。
背景技術:
為了保證豬、牛、羊等肉類產品的食品安全,從“生產—防疫—檢疫—運輸—屠宰—分銷”等各個環節加強監管,由農業部中國動物疫病預防控制中心牽頭,建設了覆蓋全國的“動物標識及動物產品追溯信息系統”(以下簡稱:追溯系統)。追溯系統將“防偽型矩陣二維碼”印刷在耳標上,每頭牲畜一出生就佩戴耳標,建立起終生唯一的身份標志(耳標號),成為整個信息化溯源系統的基礎。為有效保證追溯系統的平穩運行,農業部規范耳標矩陣碼的號碼分配、生產及分發流程,制訂并頒發了《牲畜耳標技術規范》等技術標準,并定期對耳標生產質量進行抽查。如附圖1所示,為分別用于豬、牛、羊的防偽型動物標識矩陣碼耳標。
但是要注意到,動物耳標上印刷的防偽型矩陣碼,與常見的QRCode、Data Matrix等二維碼在形態上有很大不同,例如動物耳標矩陣碼上沒有常見的二維碼上的定位圖形等,現有的二維碼機器識讀算法,并不能用于識別防偽型動物耳標矩陣碼。
技術實現要素:
本發明所要實現的一個目的是:提出一種動物耳標矩陣碼的識別方法。
根據本發明的一個方面,提供的一種動物耳標矩陣碼的識別方法,包括:獲取動物耳標的編碼區域的圖像;將編碼區域的圖像進行黑白二值化處理;利用投影分割算法,確定二值化處理后的編碼區域中編碼矩陣的行數和列數;根據確定的行數和列數將編碼區域進行網格的劃分;根據各個網格中像素點的像素值對編碼矩陣進行解碼,識別編碼矩陣包含的動物的信息。
根據本發明的另一個方面,提供的一種動物耳標矩陣碼的識別裝置,包括:圖像獲取模塊,用于獲取動物耳標的編碼區域的圖像;二值化處理模塊,用于將編碼區域的圖像進行黑白二值化處理;編碼矩陣分析模塊,用于利用投影分割算法,確定二值化處理后的編碼區域中編碼矩陣的行數和列數;編碼矩陣劃分模塊,用于根據確定的行數和列數將編碼區域進行網格的劃分;解碼模塊,用于根據各個網格中像素點的像素值對編碼矩陣進行解碼,識別編碼矩陣包含的動物的信息。
本發明通過對動物耳標的編碼區域的圖像采集,并利用投影分割法對編碼區域的編碼矩陣進行劃分以及解碼,從而實現對動物耳標矩陣碼的識讀,該方法通用性強,適用于各種能夠采集圖像并進行圖像處理的裝置,應用簡單方便,可以實時解碼,實現即拍即解。
通過以下參照附圖對本發明的示例性實施例的詳細描述,本發明的其它特征及其優點將會變得清楚。
附圖說明
為了更清楚地說明本發明實施例或現有技術中的技術方案,下面將對實施例或現有技術描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發明的一些實施例,對于本領域普通技術人員來講,在不付出創造性勞動的前提下,還可以根據這些附圖獲得其他的附圖。
圖1示出動物耳標的示意圖。
圖2A示出現有技術中QR code二維碼的示意圖。
圖2B示出豬耳標矩陣碼的示意圖。
圖3示出本發明的一個實施例的動物耳標矩陣碼的識別方法的流程示意圖。
圖4A、4B、4C示出本發明的快速頂點定位算法的示意圖。
圖5A示出本發明的進行梯形畸變矯正算法之前的編碼區域的圖像的示意圖。
圖5B示出本發明的進行梯形畸變矯正算法之后的編碼區域的圖像的示意圖。
圖6A示出本發明的投影分割算法的編碼區域的投影示意圖。
圖6B示出本發明的投影分割算法的編碼區域的網格劃分示意圖。
圖7示出本發明的另一個實施例的動物耳標矩陣碼的識別方法的流程示意圖。
圖8示出本發明的一個實施例的動物耳標矩陣碼的識別裝置的結構示意圖。
圖9示出本發明的另一個實施例的動物耳標矩陣碼的識別裝置的結構示意圖。
具體實施方式
下面將結合本發明實施例中的附圖,對本發明實施例中的技術方案進行清楚、完整地描述,顯然,所描述的實施例僅僅是本發明一部分實施例,而不是全部的實施例。以下對至少一個示例性實施例的描述實際上僅僅是說明性的,決不作為對本發明及其應用或使用的任何限制。基于本發明中的實施例,本領域普通技術人員在沒有做出創造性勞動前提下所獲得的所有其他實施例,都屬于本發明保護的范圍。
針對動物耳標矩陣碼與常見二維碼的區別,提出一種動物耳標矩陣碼的識別方法。
發明人發現,動物耳標上的防偽矩陣碼與現有技術中常見的二維碼有很大的不同,例如QR Code、Data Matrix中包含定位圖形或符號,格式信息等,如圖2A所示,以QR Code為例,包括位置探測圖像圖形便于直接確定編碼區域的位置,版本信息和格式信息是用于解碼的輔助信息,定位圖形是用于劃分編碼區域的黑白間隔的定位線,識別時根據這些信息能夠很快的對二維碼中的編碼區域進行定位,進而編碼區域中的黑白格進行確定,最后進行解碼。而動物耳標矩陣碼中不包含這些定位的信息,具體的,以豬的耳標矩陣碼為例,如圖2B所示,耳標上的矩陣碼只包括邊框外靜默區、四周實線邊框、以及數據的編碼區域,而豬的耳標矩陣碼中間還包括物理鉆孔區用于佩戴,應用現有的二維碼識別方法無法對動物耳標上的矩陣碼進行識別,而本方案中的動物耳標矩陣碼的識別方案與現有技術完全不同。
下面結合圖2B和圖3描述本發明動物耳標矩陣碼的識別方法。
圖3為本發明動物耳標矩陣碼的識別方法一個實施例的流程圖。如圖3所示,該實施例的方法包括:
步驟S302,獲取動物耳標的編碼區域的圖像。
具體的,采集動物耳標的圖像,確定動物耳標的圖像中編碼區域的圖像的各個頂點,將各個頂點連接范圍內的圖像確定為編碼區域的圖像,對編碼區域的圖像進行梯形畸變矯正,獲得形狀為矩形,拍攝角度正面垂直的編碼區域的圖像。
其中,采集動物耳標的圖像,例如通過具有拍攝功能的裝置將佩戴于動物耳朵上的耳標拍攝下來形成動物耳標的圖像。例如使用智能手機拍攝動物耳標的過程中需要調用智能手機平臺攝像頭來采集圖像,使用自動對焦技術,使耳標矩陣碼圖像在手機屏幕掃描框中清晰展示后再進行拍攝。當動物耳標處于靜止狀態可以通過調整拍攝裝置只將動物耳標的編碼區域的圖像拍攝下來,而實際應用過程中,拍攝佩戴于動物耳朵上的動物耳標時,通常會將編碼區域以外的環境中的干擾物也拍攝進圖像中,因此,需要進一步確定編碼區域的圖像。
區別于常見的一些二維碼具有位置探測或定位的圖形或符號,動物耳標矩陣碼沒有用于確定編碼區域的圖形或符號,因此,本發明還提供一種用于確定編碼區域的圖像的快速頂點定位方法,確定動物耳標的圖像中編碼區域的圖像的各個頂點,將各個頂點連接范圍內的圖像確定為編碼區域的圖像,具體過程將在后續進行描述。
進一步的,由于拍攝角度的問題可能會導致圖像的旋轉,可以將提取的編碼區域的圖像的一邊進行旋轉,保持底邊水平,由于動物耳標矩陣碼沒有定位圖形或符號,因此無法確保每次確定的底邊為正確的,可以在識別過程中,如果一次旋轉之后無法解碼,可以將編碼區圖像再旋轉至另一邊作為底邊再次進行后續解碼過程,重復上述過程,直至圖形的各邊都作為底邊進行解碼后仍無法識別,則確定解碼失敗。
進一步的,圖像的采集過程可能導致編碼區域的圖像的變形,例如編碼區域的圖像原為正方形拍攝時圖像變形為梯形,不利于后續的解碼過程,因此本發明還提供一種梯形畸變矯正算法,用于將編碼區域的圖像矯正為矩形并且拍攝角度正面垂直,后續將對梯形畸變矯正算法進行具體描述。
步驟S304,將編碼區域的圖像進行黑白二值化處理。
獲得形狀標準,拍攝角度正面垂直的編碼區域的圖像后(如圖2B中所示),則對圖像進行二值化處理,將編碼區域的圖像處理成只包含黑色像素點和白色像素點的圖像。
步驟S306,利用投影分割算法,確定二值化處理后的編碼區域中編碼矩陣的行數和列數。
其中,投影分割算法將在后續進行描述。
步驟S308,根據確定的行數和列數將編碼矩陣進行網格的劃分。
其中,對編碼矩陣進行網格的劃分,則可以將編碼矩陣劃分不同的黑白方格。
步驟S310,根據各個網格中像素點的像素值對編碼矩陣進行解碼,識別編碼矩陣包含的動物的信息。
具體的,計算各個網格中像素點的像素值之和或像素平均值,將像素值之和或像素平均值與預設值進行對比,如果高于預設值則該網格還原為1,如果低于預設值則該網格還原為0,確定編碼矩陣的二進制值,按照預設解碼規則對編碼矩陣的二進制值進行解碼。耳標矩陣碼中黑色像素點的灰度值為255,白色像素點的灰度值為0,理想的情況下,劃分的編碼區域中黑方格中只有黑色像素點,白方格中只有白色像素點,但是圖像處理過程中由于采集的圖像的亮度以及劃分網格的過程可能存在偏差等,可以首先處理得到圖像的整體亮度偏移,然后使用偏移值來修正閾值等方式使得解碼更加準確。相對于常見的QRCode等二維碼,耳標矩陣碼可以儲存更多的數據,具有容量奇偶校驗證和錯誤碼修改等特點,其錯誤檢測和校正率高達15%至25%,編碼冗余度很高,因此,采用本方案可以較為準確的對動物耳標矩陣碼進行識別。
上述實施例的方法通過對動物耳標的編碼區域的圖像采集,并利用投影分割法對編碼區域的編碼矩陣進行劃分以及解碼,從而實現對動物耳標矩陣碼的識讀,該方法通用性強,適用于各種能夠采集圖像并進行圖像處理的裝置,應用簡單方便,可以實時解碼,實現即拍即解。
上述實施例的方法中提到本方案中應用快速定點定位算法提取動物耳標中編碼區域的圖像,應用梯形畸變矯正算法對編碼區域的圖像進行矯正,應用投影分割算法確定編碼矩陣的行數和列數,下面依次對三種算法進行描述。
下面結合圖4A、圖4B和圖4C描述本發明中的快速頂點定位算法。
快速頂點定位算法包括以下步驟:
(1)在動物耳標的圖像的頂點處分別作平行于動物耳標的圖像對角線的直線。
以拍攝圖像為矩形為例,如圖4A所示,經過動物耳標的圖像的左上頂點,畫一條斜45°(從右上到左下)的直線,其他三個頂點采用同樣的方式做平行于對角線的直線。
(2)將直線向動物耳標的圖像的中心移動,并檢測移動過程中與直線重合的像素點。
如圖4A所示,將四條直線沿箭頭所指方向分別向動物耳標的圖像的中心移動,移動過程中直線會與圖像中的像素點重合,檢測這些重合的像素點的像素特征進行判斷。
(3)如果與直線重合的一個像素點的像素值高于閾值,且滿足該重合像素點周圍連續角度范圍內的像素點的像素值高于閾值,且除該連續角度范圍外的像素點的像素值低于閾值的條件,則將該像素點確定為編碼區域的圖像的頂點。
如圖4B所示,直線移動過程中檢測重合的黑色像素點,由于圖像亮度等的影響,需要設置閾值,將RGB值大于閾值的像素點識別為黑色像素點,進一步檢測該像素點周圍的像素點的像素特征,參考圖2B中的圖像可以看出編碼區域頂點的像素點具有以下特征,即周圍連續90度范圍內的像素點均為黑色像素點而周圍靜默區270度范圍內的像素點均為白色像素點。基于這一特征檢測與直線重合的黑色像素點周圍像素點的特征,可以將拍攝進圖像的其他干擾物的像素點排除。若未檢測到黑點,則將線段延對角線方向平行推進,重新檢測,逐步確定編碼區域的各個頂點,如圖4C所示。
(4)將各個頂點連接范圍內的圖像確定為編碼區域的圖像。
需要說明的是,實際操作時是按照直線的方向和移動過程依次檢測圖像中的各個像素點。也可以選擇其他的方式依次檢測圖像中的各個像素點,例如將與動物耳標圖像的四條邊重合的四條直線向中心平行移動,并檢測移動過程中與直線重合的像素點是否符合條件或者按照一定的順序依次檢測圖像中的各個像素點是否滿足條件。考慮到拍攝過程中圖像的各種拍攝角度,采用本方案的像素點的檢測方法可以更快的檢測到編碼區域的頂點。
下面結合圖5A和圖5B描述本發明的梯形畸變矯正算法。
梯形畸變矯正算法包括以下步驟:
(1)根據矯正前編碼區域的圖像的各個頂點的坐標值,確定矯正后編碼區域的圖像的各個頂點的坐標值。
發明人經過反復測試,本算法中應用的透視變換公式如下:
如圖5A中所示,矯正前編碼區域的圖像變形為梯形。建立坐標系,假設矯正前圖像四個頂點坐標為(x1,y1),(x2,y2),(x3,y3),(x4,y4),假設編碼區域圖像為正方形這一特征,根據矯正前的四個頂點的坐標即可獲知矯正后編碼區域的圖像的各個頂點的坐標值(x′1,y′1),(x′2,y′2),(x′3,y′3),(x′4,y′4)。
(2)根據矯正前各個頂點的坐標值和矯正后各個頂點的坐標值確定透視變換公式的參數。
將矯正前和矯正后各個頂點的坐標值帶入公式(1)中,可以得到以下兩個方程組:
進而,可以求得透視變換公式中的參數a,b,c,d和m,n,p,q。
(3)根據透視變換公式將矯正前編碼區域的圖像的各個像素點的坐標值映射為矯正后編碼區域的圖像的各個像素點的坐標值。
確定透視變換公式中的參數a,b,c,d和m,n,p,q之后,根據透視變換公式即可將矯正前編碼區域中除四個頂點以外的任意一點(x,y)變換后為矯正后的圖像的坐標(x′,y′),進而得到如圖5B中的圖像。進行矯正后的圖像中可能存在一些空白點即無法通過矯正前的像素點獲得的點,這些點可以采用線性插值法進行填充。
上述實施例的方法,可以矯正拍攝過程中導致的圖像的變形,使得解碼更加準確。
下面結合圖6A和圖6B描述本發明的投影分割算法。
投影分割算法包括以下步驟:
(1)對于二值化處理后的編碼區域的圖像中每一行的像素點的像素值進行累加,并形成水平投影直方圖,水平投影直方圖由多個直條組成。
如圖6A所示,如果兩行像素的累計值相等或相差不大,很明顯這應該是采樣在同一列方格內的兩行像素(因為每一個黑白方格都相同,灰度值累計肯定一樣),否則若相差很大,可以判斷這行像素是采樣在邊線處。因此,可以形成如圖6A中所示的直方圖。
(2)根據水平投影直方圖包含的直條確定編碼矩陣的行數。
具體的,利用水平投影直方圖的總寬度除以直條的寬度得到編碼矩陣的行數的估計值,將估計值與不同規格編碼矩陣的行數進行對比,將估計值趨近的規格的行數確定為編碼矩陣的行數。
直條的寬度可以根據水平投影直方圖相鄰的波峰(或波谷)的距離獲得,記為h,例如,若相鄰的連續50個采樣行,其投影累計值都相同,則可以推斷方格的寬度應該為50個像素,即h為50。但實際應用過程,由于各種因素的影響,相鄰的50行的像素值總會有變化,不可能每次都是整整50個像素處階躍,有可能是48或49像素,也可能51或52像素,這都是正常的,可以根據這些值進行歸類聚合,綜合獲得最終的直條的寬度值。水平投影直方圖的總寬度為兩端的波峰的距離記為H,那么編碼矩陣的行數為N=H/h-2,其中,由于直方圖兩端的直條表示邊框的像素累加值,因此需要減去2獲得編碼矩陣的行數。目前動物耳標的編碼矩陣為16行16列和20行20列,計算得到N之后,將N更接近的規格作為編碼矩陣的行數,例如N為16.5,則確定編碼矩陣的行數N′為16。確定編碼矩陣的行數N′之后,可以將編碼區域平均分成N′+2行,2為邊框數,采用相同的方法確定編碼矩陣的列數后即可將編碼區域劃分為不同的網格,如圖6B所示。
(3)對于二值化處理后的編碼區域的圖像中每一列的像素點的像素值進行累加,并形成豎直投影直方圖,豎直投影直方圖由多個直條組成。
(4)根據豎直投影直方圖包含的直條確定編碼矩陣的列數。
具體的,利用豎直投影直方圖的總寬度除以直條的寬度得到矩形碼的列數的估計值,將估計值與不同規格編碼矩陣的列數進行對比,將估計值趨近的規格的行數確定為編碼矩陣的列數。編碼矩陣的列數可以參考前述編碼矩陣的行數的確定方法。
需要說明的是,確定編碼矩陣行列數的過程中若統計的直條寬度規律不明顯,很可能是在前面處理過程中存在干擾點,引起頂點判斷錯誤或其他錯誤。實際應用程序時,為了加快速度,往往就可以直接判定編碼矩陣行列數確定失敗,進入下一輪算法執行,而不必非要解碼失敗才返回。
上述實施例的方法,可以有效的解決動物耳標矩陣碼由于沒有定位圖形或符號而無法確定行列數的問題,能夠實線動物耳標矩陣碼的準確解碼。
本發明的動物耳標矩陣碼的識別方法適用于各種具備圖像采集并具有一定圖像處理能力的裝置,例如智能手機,平板電腦等,通過增加相應的動物耳標矩陣碼的解碼軟件或應用,可以實現即拍即解,實時獲取動物耳標的信息。
下面以智能手機為例結合圖7,描述本發明動物耳標矩陣碼的識別方法的一個應用例。
步驟S702,調用智能手機平臺攝像頭來采集動物耳標的圖像,使用自動對焦技術,使動物耳標的圖像在手機屏幕掃描框中清晰展示。
步驟S704,根據動物耳標矩陣碼的特征,從采集的動物耳標的圖像中分析和鎖定動物耳標的編碼區域,執行快速頂點定位算法,確定頂點并提取出編碼區。
其中,快速頂點定位算法參考前述實施例。
步驟S706,對提取出的編碼區域的圖像進行旋轉處理,旋轉至編碼區域的底邊保持水平。
其中,如果一次旋轉之后無法解碼,可以將編碼區圖像再旋轉至另一邊作為底邊再次進行后續解碼過程,重復上述過程,直至圖形的各邊都作為底邊進行解碼后仍無法識別,則確定解碼失敗。
步驟S708,對提取出的編碼區域的圖像進行梯形畸變矯正,矯正至編碼區域的圖像為正方形、拍攝角度為正面垂直。
步驟S710,對矯正過的編碼區域的圖像做黑白二值化處理。
步驟S712,利用投影分割算法確定編碼矩陣的行數和列數,定位行和列的邊緣,使用采樣網格對編碼區域進行分割。
步驟S714,對網格線分割的各個網中的像素點的像素值與閾值進行比對,從編碼區域的圖像中還原得到由0和1組成的編碼矩陣。
步驟S716,按照防偽型動物標識耳標矩陣碼的解碼規則,解碼二進制的編碼矩陣,抽取出動物類型、區縣id碼、溯源流水號這三部分內容,將區縣id碼轉化為行政區域碼后,得到最終的動物耳標號并輸出和顯示。
本發明還提供一種動物耳標矩陣碼的識別裝置,下面結合圖8進行描述。
圖8為本發明動物耳標矩陣碼的識別裝置一個實施例的結構圖。如圖8所示,該裝置80包括:
圖像獲取模塊802,用于獲取動物耳標的編碼區域的圖像。
二值化處理模塊804,用于將編碼區域的圖像進行黑白二值化處理。
編碼矩陣分析模塊806,用于利用投影分割算法,確定二值化處理后的編碼區域中編碼矩陣的行數和列數。
編碼矩陣劃分模塊808,用于根據確定的行數和列數將編碼區域進行網格的劃分。
解碼模塊810,用于根據各個網格中像素點的像素值對編碼矩陣進行解碼,識別編碼矩陣包含的動物的信息。
具體的,解碼模塊810,用于計算各個網格中像素點的像素值之和或像素平均值,將像素值之和或像素平均值與預設值進行對比,如果高于預設值則該網格還原為1,如果低于預設值則該網格還原為0,確定編碼矩陣的二進制值,按照預設解碼規則對編碼矩陣的二進制值進行解碼。
下面結合圖9描述本發明動物耳標矩陣碼的識別裝置的另一個實施例。
圖9為本發明動物耳標矩陣碼的識別裝置一個實施例的結構圖。如圖9所示,
圖像獲取模塊802包括:
圖像采集單元8021,用于采集動物耳標的圖像。
編碼區域確定單元8022,用于確定動物耳標的圖像中編碼區域的圖像的各個頂點,將各個頂點連接范圍內的圖像確定為編碼區域的圖像。
具體的,編碼區域確定單元8022,用于在動物耳標的圖像的頂點處分別作平行于動物耳標的圖像對角線的直線,將直線向動物耳標的圖像的中心移動,并檢測移動過程中與直線重合的像素點,如果與直線重合的一個像素點的像素值高于閾值,且滿足該重合像素點周圍連續角度范圍內的像素點的像素值高于閾值,且除該連續角度范圍外的像素點的像素值低于閾值的條件,則將該像素點確定為編碼區域的圖像的頂點,將各個頂點連接范圍內的圖像確定為編碼區域的圖像。
圖像矯正單元8023,用于對編碼區域的圖像進行梯形畸變矯正,獲得形狀為矩形,拍攝角度正面垂直的編碼區域的圖像。
具體的,圖像矯正單元8023,用于根據矯正前編碼區域的圖像的各個頂點的坐標值,確定矯正后編碼區域的圖像的各個頂點的坐標值,根據矯正前各個頂點的坐標值和矯正后各個頂點的坐標值確定透視變換公式的參數,根據透視變換公式將矯正前編碼區域的圖像的各個像素點的坐標值映射為矯正后編碼區域的圖像的各個像素點的坐標值。
在一個實施例中,如圖9所示,編碼矩陣分析模塊806包括:
水平投影單元8061,用于對于二值化處理后的編碼區域的圖像中每一行的像素點的像素值進行累加,并形成水平投影直方圖,水平投影直方圖由多個直條組成。
編碼矩陣行數確定單元8062,用于根據水平投影直方圖包含的直條確定編碼矩陣的行數。
具體的,編碼矩陣行數確定單元,用于利用水平投影直方圖的總寬度除以直條的寬度得到編碼矩陣的行數的估計值,將估計值與不同規格編碼矩陣的行數進行對比,將估計值趨近的規格的行數確定為編碼矩陣的行數。
豎直投影單元8063,用于對于二值化處理后的編碼區域的圖像中每一列的像素點的像素值進行累加,并形成豎直投影直方圖,豎直投影直方圖由多個直條組成。
編碼矩陣列數確定單元8064,用于根據豎直投影直方圖包含的直條確定編碼矩陣的列數。
具體的,編碼矩陣列數確定單元8064,用于利用豎直投影直方圖的總寬度除以直條的寬度得到矩形碼的列數的估計值,將估計值與不同規格編碼矩陣的列數進行對比,將估計值趨近的規格的行數確定為編碼矩陣的列數。
本領域普通技術人員可以理解實現上述實施例的全部或部分步驟可以通過硬件來完成,也可以通過程序來指令相關的硬件完成,所述的程序可以存儲于一種計算機可讀存儲介質中,上述提到的存儲介質可以是只讀存儲器,磁盤或光盤等。
以上所述僅為本發明的較佳實施例,并不用以限制本發明,凡在本發明的精神和原則之內,所作的任何修改、等同替換、改進等,均應包含在本發明的保護范圍之內。