二維碼解碼部分_第1頁
二維碼解碼部分_第2頁
二維碼解碼部分_第3頁
二維碼解碼部分_第4頁
二維碼解碼部分_第5頁
已閱讀5頁,還剩2頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

zxing源碼分析zxing源碼分析——QR碼局部2023-07-1017:16:03|||Java代碼構(gòu)造:zxing源碼的構(gòu)造還是比較清楚的,有關(guān)QR碼的代碼主要在以下幾個(gè)package中。Java代碼中有生成QR碼的代碼,在C++代碼中是沒有生成局部,只有解析局部。其中qrcode中是編解碼的接口,外部代碼通過這兩個(gè)類來進(jìn)展QR碼的編解碼。detector是用來在攝像頭抓取的圖像中檢測(cè)出QR碼的那局部,并將其提取出來。這局部代碼是解碼的關(guān)鍵,也是可以進(jìn)展優(yōu)化的局部。decoder是依據(jù)QR碼的編碼標(biāo)準(zhǔn)將之前detector中提取出的QR碼符號(hào)進(jìn)展解碼操作,將圖像解析為真實(shí)的信息。QR碼解碼流程:11、將圖像進(jìn)展二值化處理,1、0代表黑、白。2、查找定位符、校正符,然后將原圖像中符號(hào)碼局部取出。〔detector代碼實(shí)現(xiàn)的功能〕3、對(duì)符號(hào)碼矩陣依據(jù)編碼標(biāo)準(zhǔn)進(jìn)展解碼,得到實(shí)際信息〔decoder代碼實(shí)現(xiàn)的功能〕二值化:zxing中條碼的二值化都是使用Binarizer實(shí)現(xiàn),一維碼使用getBlackRow方法,二維碼的getBlackMatrix方法。Binarizer有兩個(gè)生成類,GlobalHistogramBinarizer和HybridBinarizer;這兩個(gè)類對(duì)getBlackMatrix方法的實(shí)現(xiàn)有不同,HybridBinarizer中的實(shí)現(xiàn)對(duì)于某些條件下的圖像有些特別的處理,臨時(shí)沒有看懂,這里只介紹GlobalHistogramBinarizer中二值化的方法。二值化的關(guān)鍵就是定義出黑白的界限,我們的圖像已經(jīng)轉(zhuǎn)化為了灰度圖像,每個(gè)點(diǎn)都是由一個(gè)灰度值來表示,就需要定義出一個(gè)灰度值,大于這個(gè)值就為白〔二值化的關(guān)鍵就是定義出黑白的界限,我們的圖像已經(jīng)轉(zhuǎn)化為了灰度圖像,每個(gè)點(diǎn)都是由一個(gè)灰度值來表示,就需要定義出一個(gè)灰度值,大于這個(gè)值就為白〔0〕,低于這個(gè)值就為黑〔1〕。在GlobalHistogramBinarizer5行〔掩蓋整個(gè)圖像高度〕,每行取中間五分之四作為樣本;以灰度值為X軸,每個(gè)灰度值的像素個(gè)數(shù)為Y軸建立一個(gè)直方圖,從直方圖中取點(diǎn)數(shù)最多的一個(gè)灰度值,然后再去給其他的灰度值進(jìn)展分?jǐn)?shù)計(jì)算,依據(jù)點(diǎn)數(shù)乘以與最多點(diǎn)數(shù)灰度值的距離的平方來進(jìn)展打分,選分?jǐn)?shù)最高的一個(gè)灰度值。接下來在這兩個(gè)灰度值中間選取一個(gè)區(qū)分界限,取的原則是盡量靠近中間并且要點(diǎn)數(shù)越少越好。界限有了以后就簡(jiǎn)潔了,與整幅圖像的每個(gè)點(diǎn)進(jìn)展比較,假設(shè)灰度值比界限小10。提取符號(hào)碼:這局部是解碼的關(guān)鍵局部,解碼力量的凹凸也主要表達(dá)在這里〔不過我感覺二維碼本身設(shè)計(jì)的就比較好,對(duì)圖像扭曲變形的糾錯(cuò)力量比較高,所以代碼局部對(duì)這方面的處理就比較少〕。這局部的目標(biāo)是從像素為單位的原始圖像中提取出符號(hào)碼局部,并轉(zhuǎn)換為模塊為單位的符號(hào)碼矩陣。將二值化之后的矩陣交給Detector,其detect方法就是接口方法。調(diào)用這個(gè)方法就會(huì)返回取好的符號(hào)碼矩陣。下面具體介紹detect方法所做的工作:11、查找定位符查找定位符是FinderPatternFinder這個(gè)類來實(shí)現(xiàn)的。在圖像中每隔iSkip就采樣一行,intiSkip=(3*maxI)/(4*MAX_MODULES);在這一行中將連續(xù)的一樣顏色的像素個(gè)數(shù)計(jì)入數(shù)組中,數(shù)組長(zhǎng)度為5位,即去找黑\白\黑\白\黑的圖像〔如開頭檢測(cè)到黑色計(jì)入數(shù)組[0],直到檢測(cè)到白色之前都將數(shù)組[0]的值+1;檢測(cè)到白色了就開頭在數(shù)組[1]中計(jì)數(shù),以此類推〕55位中像素個(gè)數(shù)是否比例為1:1:3:1:1〔可以有50%的誤差范圍〕,假設(shè)滿足條件就說明找到了定位符的或許位置,將這個(gè)圖像交給位置,將這個(gè)圖像交給handlePossibleCenter方法去找到定位符的中心點(diǎn),方法是先從垂直方向檢測(cè)是否滿足定位符的條件,如滿足就定出Y軸的中心點(diǎn)坐標(biāo)值,然后用這個(gè)坐標(biāo)值去再次檢測(cè)水平方向是否滿足定位符條件,如滿足就定出X軸的中心點(diǎn)坐標(biāo)值。至此就找到了一個(gè)定位符的中心坐標(biāo)。依據(jù)上面所說的步驟找出全部三個(gè)定位符的中心坐標(biāo),接下來開頭定位三個(gè)定位符在符號(hào)中的位置,即左上〔B點(diǎn)〕、左下〔A點(diǎn)〕、右上〔C點(diǎn)〕三個(gè)位置。先通過兩兩之間的距離定出哪個(gè)是左上那一點(diǎn)〔左上那點(diǎn)到其他兩點(diǎn)的距離應(yīng)當(dāng)相差不遠(yuǎn)〕,然后通過計(jì)算BA、BC向量的叉乘定出AC兩點(diǎn)。22、查找校正符通過ABC三點(diǎn)的坐標(biāo)計(jì)算出校正符的可能位置,然后交給AlignmentPatternFinder去查找最靠近右下角的那個(gè)校正符,查找方法與查找定位符的方法根本一樣,假設(shè)找到就返回校正符的中心坐標(biāo),假設(shè)沒有找到也沒關(guān)系,解碼程序可以連續(xù)。3、透視轉(zhuǎn)換,生成最終矩陣找到了三個(gè)定位點(diǎn)和一個(gè)校正符的坐標(biāo)〔校正符沒有找到可以用一個(gè)計(jì)算值來代替〕,符號(hào)圖像的位置就已經(jīng)確定了,現(xiàn)在要進(jìn)展圖像變形,建立起以模塊為單位的符號(hào)矩陣與原圖像之間的關(guān)系,使用的方法是GeorgeWolberg寫的DigitalImageWarping一書中PerspectiveTransform方法〔54-56頁〕。轉(zhuǎn)換關(guān)系確立了就將矩陣〔以模塊為單位的符號(hào)矩陣〕中每一個(gè)點(diǎn)對(duì)應(yīng)到原圖像中的點(diǎn),去看該點(diǎn)是黑是白,并將0、1置填充到矩陣中。這樣就生成了最終的符號(hào)碼。QR符號(hào)碼:有了符號(hào)碼矩陣就依據(jù)QR碼的編碼標(biāo)準(zhǔn)去進(jìn)展解碼。這局部功能是Decode類實(shí)現(xiàn)的。先獵取版本信息,然后獵取到格式信息,從格式信息中取得糾錯(cuò)等級(jí)。然后去讀碼字,讀碼字的方法很簡(jiǎn)潔,從右下角開頭,兩列為單位,從最終一行開頭,先向上讀,讀到頂端再向下,這樣依次

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論