本發(fā)明圖像處理,具體涉及根據(jù)圖像對(duì)二維碼進(jìn)行定位的方法及系統(tǒng)。
背景技術(shù):
與條形碼相比,二維碼具有信息容量大、可靠性高、保密性及安全性好等多種優(yōu)點(diǎn),因此二維碼技術(shù)在工業(yè)領(lǐng)域獲得了飛速發(fā)展和廣泛應(yīng)用。二維碼技術(shù)應(yīng)用的關(guān)鍵在于二維碼識(shí)別,即通過一些掃描設(shè)備獲取條碼信息,然后進(jìn)行解碼。目前,二維碼識(shí)別大多依賴于具體的識(shí)別設(shè)備,并且需要人工對(duì)準(zhǔn)待識(shí)別二維碼,需要人工干預(yù)。近年來隨著數(shù)字圖像處理技術(shù)的發(fā)展,出現(xiàn)了基于相機(jī)攝像的二維碼識(shí)別方式,在獲取到二維碼的圖像后,對(duì)二維碼的自動(dòng)識(shí)別通常包括:(1)條形碼的自動(dòng)檢測(cè)定位;(2)條碼圖像處理;(3)二維碼的解碼。
二維碼的自動(dòng)檢測(cè)定位是條碼識(shí)別的首要步驟,也是一個(gè)復(fù)雜的過程。由于在二維碼拍攝過程中,二維碼往往和文本或者其他圖案混合在一起,二維碼僅僅是拍攝圖像的一部分,在定位過程中,必須要過濾掉文本和其他圖案,定位出二維碼。更有甚者,一次拍攝可能拍攝到多個(gè)二維碼圖像,在后續(xù)定位過程中,必須要將此多個(gè)二維碼從背景中識(shí)別出來并逐個(gè)進(jìn)行定位。因此,如何在復(fù)雜圖像中自動(dòng)定位并識(shí)別二維碼是亟待解決的問題。
技術(shù)實(shí)現(xiàn)要素:
本申請(qǐng)?zhí)峁┮环N二維碼定位方法及系統(tǒng),能夠在復(fù)雜圖像中自動(dòng)定位出二維碼。
根據(jù)第一方面,一種實(shí)施例中提供一種二維碼定位方法,包括:
輸入圖像數(shù)據(jù);
利用二維碼數(shù)據(jù)區(qū)的邊緣信息對(duì)圖像數(shù)據(jù)進(jìn)行預(yù)篩選,確定可能包含二維碼的圖像區(qū)域作為候選區(qū)域,所述邊緣信息是指灰度值具有突變的區(qū)域;
對(duì)每個(gè)候選區(qū)域,利用待定位二維碼的定位圖形確定二維碼外邊界的大致位置,從而獲得二維碼的粗略定位;
根據(jù)二維碼外邊界的大致位置確定出二維碼的精確邊界,從而獲得二維碼的精確定位。
根據(jù)第二方面,一種實(shí)施例中提供一種二維碼定位系統(tǒng),包括:
圖形獲取單元,用于輸入圖像數(shù)據(jù);
預(yù)篩選單元,用于利用二維碼數(shù)據(jù)區(qū)的邊緣信息對(duì)圖像數(shù)據(jù)進(jìn)行預(yù)篩選,確定可能包含二維碼的圖像區(qū)域作為候選區(qū)域,所述邊緣信息是指灰度值具有突變的區(qū)域;
粗略定位單元,用于對(duì)每個(gè)候選區(qū)域,利用待定位二維碼的定位圖形確定二維碼外邊界的大致位置,從而獲得二維碼的粗略定位;
精確定位單元,用于根據(jù)二維碼外邊界的大致位置確定出二維碼的精確邊界,從而獲得二維碼的精確定位。
上述實(shí)施例中,基于圖像數(shù)據(jù)進(jìn)行二維碼定位,定位過程包括預(yù)篩選、粗定位和精確定位,通過將圖像的邊緣信息和紋理信息相結(jié)合,進(jìn)行預(yù)篩選,獲取可能的二維碼區(qū)域,然后結(jié)合二維碼的定位圖形進(jìn)行粗定位,最后在粗定位的基礎(chǔ)上確定出二維碼的精確邊界,從而獲得二維碼的精確定位。這種定位方式可自動(dòng)對(duì)圖像中的二維碼進(jìn)行定位,使得在對(duì)二維碼定位時(shí)不需要人工進(jìn)行干涉即可排除圖像中復(fù)雜背景的干擾,而且通過預(yù)篩選和粗定位,減少了自動(dòng)定位過程中的數(shù)據(jù)處理量。
附圖說明
圖1為Data Matrix二維碼的示意圖;
圖2為一種實(shí)施例的二維碼識(shí)別設(shè)備的結(jié)構(gòu)示意圖;
圖3為一種實(shí)施例中二維碼定位流程圖;
圖4為預(yù)篩選的一種具體實(shí)施方式的流程圖;
圖5為將整個(gè)圖像數(shù)據(jù)劃分成若干數(shù)據(jù)塊的示意圖;
圖6為Data Matrix二維碼的定位圖形的示意圖;
圖7為粗定位的一種具體實(shí)施方式的流程圖;
圖8為一種具體實(shí)施例中獲得的虛邊矩形區(qū)域的示意圖;
圖9為精確定位的一種具體實(shí)施方式的流程圖;
圖10a為兩條實(shí)線外邊界的掃描區(qū)域的示意圖;
圖10b為兩條虛線外邊界的掃描區(qū)域的示意圖;
圖11為一種實(shí)施例的定位系統(tǒng)的結(jié)構(gòu)示意圖。
具體實(shí)施方式
二維碼可通過各種編碼方式產(chǎn)生,為方便二維碼的定位,每種二維碼都有各自的定位特征,本文中稱為定位圖形,定位圖形用于條碼符號(hào)定位和確定條碼結(jié)構(gòu)信息,也可用于解決符號(hào)定位和失真問題,定位圖形的四周是空白區(qū),用于將條碼與背景分離。例如Data Matrix二維碼,如圖1所示,完整的Data Matrix二維碼10呈現(xiàn)為一矩形的二維碼圖形,具有四條邊,兩條相互垂直的實(shí)線外邊界11和兩條相互垂直的虛線外邊界12,中間是黑白相間的數(shù)據(jù)單元構(gòu)成的數(shù)據(jù)區(qū)13。在本發(fā)明實(shí)施例中,在對(duì)圖像中的二維碼進(jìn)行定位時(shí),首先將圖像的邊緣信息和紋理信息相結(jié)合,進(jìn)行預(yù)篩選,獲取可能的二維碼區(qū)域,然后結(jié)合二維碼的定位圖形(Pattern Finder)進(jìn)行粗定位,最后在粗定位的基礎(chǔ)上確定出二維碼的精確邊界,從而獲得二維碼的精確定位。
下面以Data Matrix二維碼為例通過具體實(shí)施方式結(jié)合附圖對(duì)本發(fā)明作進(jìn)一步詳細(xì)說明。
實(shí)施例一:
請(qǐng)參考圖2,二維碼識(shí)別設(shè)備包括圖像采集模塊20和圖像處理模塊40,圖像采集模塊20可以是工業(yè)相機(jī)、手機(jī)攝像頭等,將采集的圖像數(shù)據(jù)通過網(wǎng)口或者USB傳送給圖像處理模塊40,在另外的實(shí)施例中,二維碼識(shí)別設(shè)備也可以不包括圖像采集模塊20,圖像數(shù)據(jù)也可以直接從本地圖片載入到圖像處理模塊40,或通過有線或無線網(wǎng)絡(luò)從其他服務(wù)器下載到圖像處理模塊40。
圖像處理模塊40包括圖像質(zhì)量評(píng)估系統(tǒng)41、預(yù)處理系統(tǒng)42、定位系統(tǒng)43、圖像校正及增強(qiáng)系統(tǒng)44和解碼系統(tǒng)45。
圖像質(zhì)量評(píng)估系統(tǒng)41對(duì)輸入圖像的對(duì)比度、光照非線性變化、模糊程度進(jìn)行打分,分?jǐn)?shù)的取值范圍可設(shè)為0~1,并將打分結(jié)果傳遞給預(yù)處理系統(tǒng)42。對(duì)比度評(píng)價(jià)采用區(qū)域?qū)Ρ榷刃问?,將圖像分割為若干個(gè)部分,在每個(gè)區(qū)域中內(nèi)計(jì)算灰度的最大值與最小值之差,再除以最大值,即
其中f(xi,yi)為區(qū)域j中坐標(biāo)(xi,yi)處的灰度值。獲得各個(gè)區(qū)域的對(duì)比度后,對(duì)所有像素區(qū)域的對(duì)比度求平均值,作為整個(gè)圖像的對(duì)比度打分。圖像的對(duì)比度估計(jì)也可以選擇基于直方圖最暗值(最小反射率)和其最亮值(最大反射率)之間中點(diǎn)的一種極其簡(jiǎn)單的方法對(duì)圖像進(jìn)行打分。
對(duì)光照的非線性變化進(jìn)行打分時(shí),將圖像分解為兩部分:亮度圖像i(x,y)和反射圖像r(x,y),根據(jù)反射圖像對(duì)圖像的非線性變化進(jìn)行打分。
圖像的模糊程度評(píng)價(jià)主要對(duì)邊緣的擴(kuò)散寬度進(jìn)行分析,通常圖像越模糊,邊緣擴(kuò)散寬度越大,圖像越清晰,圖像邊緣擴(kuò)散寬度越窄,根據(jù)圖像邊緣的擴(kuò)散寬度進(jìn)行打分。
圖像質(zhì)量評(píng)估系統(tǒng)41的處理結(jié)果傳遞給預(yù)處理系統(tǒng)42。預(yù)處理系統(tǒng)根據(jù)圖像質(zhì)量評(píng)估的得分進(jìn)行判斷,若得分小于設(shè)定閾值,則進(jìn)行直方圖均衡化和頻率濾波處理,增強(qiáng)圖像的對(duì)比度,減少光照的非線性變化。預(yù)處理后的圖像數(shù)據(jù)將傳給定位系統(tǒng)43。若得分大于或等于設(shè)定閾值,則預(yù)處理系統(tǒng)42直接將圖像數(shù)據(jù)傳給定位系統(tǒng)43。
定位系統(tǒng)43用于在圖像數(shù)據(jù)中查找二維碼區(qū)域,當(dāng)在圖像數(shù)據(jù)中查找出二維碼區(qū)域后對(duì)二維碼進(jìn)行定位,后面將對(duì)定位系統(tǒng)43進(jìn)行詳細(xì)說明。
圖像校正及增強(qiáng)系統(tǒng)44根據(jù)定位系統(tǒng)43定位出的二維碼進(jìn)行圖像校正及增強(qiáng),圖像校正主要用于消除梯形畸變,進(jìn)行透視校正,減小因二維碼圖像透視效果導(dǎo)致的解碼誤差。圖像增強(qiáng)主要用于增強(qiáng)二維碼所在圖像區(qū)域的對(duì)比度,為二值化做準(zhǔn)備,提高二維碼解碼區(qū)域的對(duì)比度,從而提高解碼的準(zhǔn)確率。
解碼系統(tǒng)45用于對(duì)二維碼的數(shù)據(jù)區(qū)進(jìn)行識(shí)別,按照編碼規(guī)則對(duì)二維碼進(jìn)行解碼,在一種具體實(shí)施例中,解碼按照國(guó)際標(biāo)準(zhǔn)ISO/IEC 16022進(jìn)行。
本領(lǐng)域技術(shù)人員可以理解,在有的實(shí)施例中,圖像處理模塊40也可以沒有圖像質(zhì)量評(píng)估系統(tǒng)41、預(yù)處理系統(tǒng)42和圖像校正及增強(qiáng)系統(tǒng)44中的一個(gè)或多個(gè)。
本實(shí)施例中,定位系統(tǒng)43在圖像數(shù)據(jù)中進(jìn)行二維碼定位的方法如圖3所示,包括以下步驟:
步驟100,輸入圖像數(shù)據(jù)。定位系統(tǒng)43得到的圖像數(shù)據(jù)中可能包含二維碼圖形,也可能不包含二維碼圖形,也可能包含多個(gè)二維碼圖形。
步驟110,預(yù)篩選。本步驟中,利用二維碼數(shù)據(jù)區(qū)的邊緣信息對(duì)圖像數(shù)據(jù)進(jìn)行預(yù)篩選,確定可能包含二維碼的圖像區(qū)域作為候選區(qū)域,其中邊緣信息是指像素灰度值具有突變的區(qū)域。預(yù)篩選的一種具體實(shí)施方式如圖4所示,包括以下步驟:
步驟111,劃分?jǐn)?shù)據(jù)塊。將整個(gè)圖像數(shù)據(jù)劃分成M×N個(gè)數(shù)據(jù)塊,M和N可以相等,也可以不等,如圖5所示,每個(gè)數(shù)據(jù)塊中包含c×d個(gè)像素,c和d可以相等,也可以不等。下面對(duì)每個(gè)數(shù)據(jù)塊進(jìn)行分析。
步驟112,檢測(cè)各數(shù)據(jù)塊中的邊緣信息。本步驟中主要利用二維碼的數(shù)據(jù)區(qū)特征進(jìn)行邊緣檢測(cè)。相比于圖像的其他背景,數(shù)據(jù)區(qū)由若干黑白相間的數(shù)據(jù)單元構(gòu)成,因此會(huì)形成大量的邊緣信息。邊緣信息可以利用一階信息或者二階信息進(jìn)行檢測(cè)。若根據(jù)一階信息進(jìn)行邊緣檢測(cè),可采用例如Sobel、Canny等算法進(jìn)行檢測(cè),根據(jù)閾值進(jìn)行篩選,從而檢測(cè)出邊緣信息;若根據(jù)二階信息進(jìn)行邊緣檢測(cè),則可選擇二階信息等于零的點(diǎn)作為邊緣點(diǎn)。本實(shí)施例中,為減少計(jì)算量,邊緣信息檢測(cè)可采用以下算法:
首先計(jì)算每一像素的灰度梯度。對(duì)于一二維圖像而言,每一像素點(diǎn)可能在X維度產(chǎn)生灰度突變,也可能在Y維度產(chǎn)生灰度突變,通過以下公式計(jì)算每一像素的梯度幅值。
式中i(x,y)為圖像在像素點(diǎn)(x,y)處的灰度值,gx(x,y),gy(x,y)為灰度梯度在x,y方向的分量。像素點(diǎn)的梯度幅值為:
像素點(diǎn)的邊緣角度為:
本領(lǐng)域技術(shù)人員應(yīng)當(dāng)理解,在另外的實(shí)施例中也可以采用其他的算法計(jì)算像素點(diǎn)的梯度幅值,例如在預(yù)定方向上將相鄰兩像素點(diǎn)的灰度值相減得到梯度幅值。
計(jì)算出各像素點(diǎn)的梯度幅值后,將像素點(diǎn)的梯度幅值和第二設(shè)定閾值進(jìn)行比較,如果梯度幅值大于第二設(shè)定閾值,則認(rèn)為該像素點(diǎn)為一個(gè)邊緣點(diǎn),本文中也稱為一個(gè)邊緣信息。
步驟113,根據(jù)邊緣信息計(jì)算各數(shù)據(jù)塊中的邊緣參數(shù)。邊緣參數(shù)包括邊緣頻率和邊緣角度差,邊緣頻率是指數(shù)據(jù)塊中檢測(cè)到的邊緣信息的個(gè)數(shù),即數(shù)據(jù)塊中梯度幅值大于第二設(shè)定閾值的邊緣點(diǎn)的個(gè)數(shù),用fi表示第i個(gè)數(shù)據(jù)塊的邊緣頻率。第二設(shè)定閾值設(shè)置時(shí)可以按照下述原則:若對(duì)比度較強(qiáng),則該閾值取值較大,若對(duì)比度較差,則該閾值較小。由于二維碼的數(shù)據(jù)區(qū)由黑白數(shù)據(jù)單元按照編碼規(guī)則混雜構(gòu)成,因此數(shù)據(jù)區(qū)會(huì)形成較多邊緣信息。
邊緣角度差采用以下方法計(jì)算:
統(tǒng)計(jì)數(shù)據(jù)塊的邊緣角度的直方圖,可對(duì)直方圖進(jìn)行濾波處理,避免噪聲的影響,然后計(jì)算直方圖中明顯波峰之間的角度差,該角度差記為邊緣角度差αi。
對(duì)于二維碼區(qū)域,其邊緣角度的直方圖會(huì)有兩個(gè)明顯的波峰,且兩個(gè)波峰的角度差接近90°。因此,統(tǒng)計(jì)的數(shù)據(jù)塊的邊緣角度差αi越接近90°,數(shù)據(jù)塊中含有二維碼的幾率越大。
本領(lǐng)域技術(shù)人員應(yīng)當(dāng)理解,在另外的實(shí)施例中,也可以定義邊緣參數(shù)包含更多個(gè)與邊緣信息相關(guān)的參數(shù),或定義邊緣參數(shù)包含邊緣頻率和邊緣角度差中的一個(gè)。
步驟114,根據(jù)各數(shù)據(jù)塊的邊緣參數(shù)判斷該數(shù)據(jù)塊是否是與二維碼相關(guān)的數(shù)據(jù)塊,即判斷數(shù)據(jù)塊中是否可能含有二維碼或二維碼的一部分。本實(shí)施例中采用以下步驟判斷數(shù)據(jù)塊中是否與二維碼相關(guān):
將數(shù)據(jù)塊內(nèi)的像素進(jìn)行二值化處理,統(tǒng)計(jì)數(shù)據(jù)塊內(nèi)黑白像素的比例,得到第一比例,記為ri;
統(tǒng)計(jì)數(shù)據(jù)塊的邊緣頻率與劃分的所有數(shù)據(jù)塊數(shù)量的比值,得到計(jì)算邊緣所占百分比,記為第二比例,即:
統(tǒng)計(jì)數(shù)據(jù)塊的邊緣角度差與90度的比值,得到第三比例,即:
計(jì)算第一比例、第二比例和第三比例的加權(quán)和,得到該數(shù)據(jù)塊的相關(guān)性得分:
score=w1eratio+w2αratio+w3ri (7)
其中,w1,w2,w3分別為各比例的權(quán)重。
將相關(guān)性得分score與第三設(shè)定閾值進(jìn)行比較,根據(jù)比較結(jié)果標(biāo)記該數(shù)據(jù)塊,如果該數(shù)據(jù)塊的相關(guān)性得分score大于第三設(shè)定閾值,則將該數(shù)據(jù)塊的屬性標(biāo)記為True,表示該數(shù)據(jù)塊中可能包含二維碼或二維碼的一部分,與二維碼相關(guān),否則將該數(shù)據(jù)塊的屬性標(biāo)記為False,表示該數(shù)據(jù)塊與二維碼無關(guān),屬于背景部分。
本領(lǐng)域技術(shù)人員應(yīng)當(dāng)理解,在其它的具體實(shí)施例中,也可以采用其它方法判斷數(shù)據(jù)塊是否是與二維碼相關(guān),例如只根據(jù)邊緣頻率判斷數(shù)據(jù)塊是否是與二維碼相關(guān),如果一個(gè)數(shù)據(jù)塊中的邊緣頻率小于一定閾值,說明該數(shù)據(jù)塊中可能不含有數(shù)據(jù)區(qū),即該數(shù)據(jù)塊中可能沒有二維碼。
步驟115,將所有與二維碼相關(guān)的數(shù)據(jù)塊進(jìn)行連通處理,得到連通區(qū)域。
本實(shí)施例中,在將數(shù)據(jù)塊進(jìn)行區(qū)域連通分析時(shí),為了縮小區(qū)域連通性分析的時(shí)間,重新生成一幅圖,每個(gè)數(shù)據(jù)塊用一個(gè)灰度值代表,若數(shù)據(jù)塊屬性為True,則灰度值設(shè)置為255,若數(shù)據(jù)塊屬性為False,則灰度值設(shè)置為0。在進(jìn)行連通時(shí)僅對(duì)灰度值為255的數(shù)據(jù)塊進(jìn)行連通處理,獲得的連通區(qū)域記為Ri。
步驟116,判斷連通區(qū)域大小是否符合第一設(shè)定閾值,如果是,則該連通區(qū)域?yàn)榭赡馨S碼的候選區(qū)域,否則對(duì)該連通區(qū)域不做處理。步驟115中獲得的連通區(qū)域可能有一個(gè),也可能有多個(gè),可能有的大,有的小,可能是包含二維碼的區(qū)域,也可能是雜亂的背景,為減少后續(xù)的處理量,需要對(duì)連通區(qū)域先進(jìn)行判斷。本實(shí)施例中,由于Data Matrix二維碼為矩形,因此判斷連通區(qū)域是否符合矩形的邊長(zhǎng)范圍。
例如,對(duì)獲得的第i個(gè)連通區(qū)域Ri,首先對(duì)連通區(qū)域Ri做最小外接矩形,得到其最小外接矩形的長(zhǎng)度和寬度分別為leni和widi。
然后將leni和widi與設(shè)定閾值進(jìn)行比較,若l1≤leni≤l2,w1≤widi≤w2,則連通區(qū)域Ri作為定位區(qū)域的候選區(qū)域,否則忽略該區(qū)域,其中l(wèi)1,l2為區(qū)域長(zhǎng)度的下限閾值和上限閾值,w1,w2為區(qū)域?qū)挾鹊南孪揲撝岛蜕舷揲撝怠?/p>
獲得候選區(qū)域后請(qǐng)?jiān)俅螀⒖紙D3,對(duì)候選區(qū)域執(zhí)行步驟120,進(jìn)行粗定位處理。
在步驟120中,對(duì)每個(gè)候選區(qū)域,利用待定位二維碼的定位圖形確定二維碼外邊界的大致位置,從而獲得二維碼的粗略定位。
本實(shí)施例定義的Data Matrix二維碼的定位圖形是一個(gè)模塊的寬度,是數(shù)據(jù)區(qū)的邊界,其包括兩條垂直相交的實(shí)線外邊界信息和兩條垂直相交的虛線外邊界信息,如圖6所示,其中全部由深色模塊組成的鄰邊構(gòu)成了一個(gè)“L”形實(shí)線外邊界14,“L”邊對(duì)邊由交替的深淺模塊組成的兩條鄰邊又構(gòu)成了虛線外邊界15,實(shí)線外邊界14和虛線外邊界15圍合成的矩形的四周是空白區(qū),用于將二維碼和背景分離。在一種具體實(shí)施例中,利用Data Matrix二維碼的定位圖形確定二維碼外邊界的大致位置的過程如圖7所示,包括以下步驟:
步驟121,從候選區(qū)域中提取線段。
線段提取可以有兩種方法可以選擇,一種是Hough變換法,一種是區(qū)域增長(zhǎng)法。無論是Hough變換法還是區(qū)域增長(zhǎng)法,處理的都是候選區(qū)域Ri所對(duì)應(yīng)圖像部分的信息。區(qū)域增長(zhǎng)法主要利用邊緣角度的方向進(jìn)行增長(zhǎng),首先在候選區(qū)域Ri中根據(jù)邊緣信息找出種子點(diǎn),具體是在候選區(qū)域中找出梯度幅值最大的點(diǎn)作為種子點(diǎn),然后在種子點(diǎn)的8鄰域內(nèi)搜索滿足角度條件的邊緣點(diǎn)加入到增長(zhǎng)區(qū)域,該角度條件為:
|θregion-θi|≤τ (8)
式中θregion為增長(zhǎng)區(qū)域的角度,θi為8鄰域中像素點(diǎn)的邊緣角度。初始的增長(zhǎng)區(qū)域只有一個(gè)種子點(diǎn),因此,增長(zhǎng)區(qū)域的初始角度為種子點(diǎn)的邊緣角度。
每增加一個(gè)點(diǎn)到增長(zhǎng)區(qū)域中,則更新增長(zhǎng)區(qū)域的角度為:
將新增長(zhǎng)的點(diǎn)作為種子點(diǎn)繼續(xù)增長(zhǎng),直至新的種子點(diǎn)的8鄰域中沒有像素點(diǎn)滿足角度條件時(shí)結(jié)束增長(zhǎng),對(duì)增長(zhǎng)區(qū)域中的點(diǎn)進(jìn)行直線擬合,例如利用最小二乘法擬合,從而提取出線段。
在候選區(qū)域Ri的未被增長(zhǎng)的像素點(diǎn)中再次查找出梯度幅值最大的點(diǎn)作為種子點(diǎn),開始下一線段的區(qū)域增長(zhǎng),采用同樣的方法提取出下一條線段。如此提取出候選區(qū)域Ri中的所有線段。
線段提取后可以獲得如下信息:每個(gè)線段的重心(cxi,cyi),線段的長(zhǎng)度li,線段的單位方向向量(nxi,nyi),根據(jù)這些信息可以計(jì)算出線段的端點(diǎn)(px1,py1)和(px2,py2)。
將提取出的所有線段加入線段列表,然后進(jìn)行線段篩選,線段篩選包括兩方面,第一是對(duì)線段長(zhǎng)度的篩選,第二是對(duì)線段數(shù)量的篩選。
步驟122,判斷線段的長(zhǎng)度是否符合要求。
根據(jù)定位圖形,實(shí)線外邊界應(yīng)具有一個(gè)長(zhǎng)度范圍,即長(zhǎng)度上限lupper和長(zhǎng)度下限llower,如果線段的長(zhǎng)度大于長(zhǎng)度上限lupper或者小于長(zhǎng)度下限llower,則將該線段從線段列表中刪除,從而篩選出長(zhǎng)度符合實(shí)線外邊界長(zhǎng)度范圍的線段。
步驟123,判斷線段列表中線段的數(shù)量是否小于兩條,如果是,則放棄該候選區(qū)域,否則對(duì)該候選區(qū)域進(jìn)行執(zhí)行步驟124。
步驟124,“L”形線段匹配?!癓”形線段匹配包括兩方面,第一是角度閾值的匹配,即在候選區(qū)域的線段中篩選出相交且夾角滿足角度閾值的兩條線段,其判斷式為:α1<α<α2,其中α1,α2為角度閾值,α為兩線段的夾角,如果是,則兩線段滿足角度閾值。第二是相對(duì)長(zhǎng)度的匹配,即將兩條線段的長(zhǎng)度分別記為l1,l2,l1>l2,判斷是否滿足l1/l2<τ1,其中τ1為用戶設(shè)置的閾值。當(dāng)上述兩方面都滿足時(shí),則當(dāng)前判斷的兩條線段可能是“L”形線段,然后執(zhí)行步驟125,如果上述兩方面有其中一個(gè)不滿足,則當(dāng)前判斷的兩條線段不是“L”形線段,則選取另外兩條線段再執(zhí)行步驟124進(jìn)行判斷,直到篩選出全部的“L”形線段。每?jī)蓷l“L”形線段可能對(duì)應(yīng)著一個(gè)二維碼。
步驟125,獲取“L”形線段的長(zhǎng)度以及三個(gè)頂點(diǎn)的位置坐標(biāo)?!癓”形邊的三個(gè)頂點(diǎn)分別記為(xi,yi)(i=1,2,3),兩條線段的長(zhǎng)度記為len1,len2并且len1>len2。從而確定出該候選區(qū)域中所有二維碼的兩條實(shí)線外邊界的大致位置。
步驟126,虛邊提取。本實(shí)施例中,根據(jù)“L”形線段的長(zhǎng)度以及三個(gè)頂點(diǎn)的位置坐標(biāo),以及定位圖形中實(shí)線外邊界和虛線外邊界的位置關(guān)系確定出兩條虛線外邊界所在的矩形區(qū)域,具體包括以下步驟:
如圖8所示,根據(jù)“L”形邊信息,分別偏移一定距離獲取虛邊的矩形區(qū)域,矩形區(qū)域信息分別用矩形的左上點(diǎn)和右下點(diǎn)表示,假定“L”形邊的豎邊的上頂點(diǎn)坐標(biāo)為(x1,y1),“L”形邊的橫邊的由頂點(diǎn)坐標(biāo)為(x3,y3),兩邊的交點(diǎn)坐標(biāo)為(x2,y2),偏移距離為τ,則圖8中上側(cè)的矩形區(qū)域可表示為:
regionupper={x1-τ,y1-τ,x1+len1+τ,y1+len1-len2+τ} (10)
圖8中右側(cè)的矩形區(qū)域可以表示為:
regionright={x1+len2-len1-τ,y1-len1-τ,x3+τ,y3+τ} (11)
其中τ為用戶設(shè)置的參數(shù)。從而獲得二維碼兩條虛線外邊界所在的大致區(qū)域,可以初步認(rèn)為虛線外邊界位于矩形區(qū)域沿長(zhǎng)度方向的中線位置。
在其它實(shí)施例中,也可以通過其它方法確定兩條虛線外邊界的大致位置。
根據(jù)上述步驟,可提取到的兩條實(shí)線外邊界和兩條虛線外邊界,將兩條實(shí)線外邊界和兩條虛線外邊界圍合的區(qū)域作為候選二維碼區(qū)域。
在優(yōu)選的實(shí)施例中,在步驟126之后還可以包括步驟127,分別沿著矩形區(qū)域的短邊方向查找角點(diǎn),所述角點(diǎn)是指兩條邊緣線的交點(diǎn);判斷角點(diǎn)數(shù)量與虛線的矩形區(qū)域的面積比值是否大于第四設(shè)定閾值,如果是,則執(zhí)行步驟128保留該候選二維碼區(qū)域以對(duì)其進(jìn)行精確定位,否則執(zhí)行步驟129,丟棄該候選二維碼區(qū)域,不再對(duì)其進(jìn)行精確定位。
請(qǐng)?jiān)賲⒖紙D3,對(duì)候選二維碼區(qū)域執(zhí)行步驟130,對(duì)二維碼進(jìn)行精確定位。
在步驟130中,根據(jù)二維碼外邊界的大致位置確定出二維碼的精確邊界,從而獲得二維碼的精確定位,其具體處理流程如圖9所示,包括以下步驟:
步驟131,分別從實(shí)線外邊界和虛線外邊界的大致位置向兩側(cè)偏移Δa個(gè)像素,生成掃描區(qū)域。如圖10a所示,兩條水平線所夾區(qū)域16和兩條垂直線所夾區(qū)域17分別為兩條實(shí)線外邊界的掃描區(qū)域。如圖10b所示,兩條水平線所夾區(qū)域18和兩條垂直線所夾區(qū)域19分別為兩條虛線外邊界的掃描區(qū)域。
步驟132,在掃描區(qū)域內(nèi)沿圖中箭頭所示方向掃描邊緣點(diǎn),并將獲取的邊緣點(diǎn)分組分別保存在pleft,pright,pupper,plower中。
步驟133,將各組的邊緣點(diǎn)進(jìn)行直線擬合(例如最小二乘法),經(jīng)迭代可得到最優(yōu)直線,從而分別得到實(shí)線外邊界和虛線外邊界的精確位置。
步驟134,計(jì)算兩條實(shí)線外邊界和兩條虛線外邊界的四個(gè)交點(diǎn)的位置坐標(biāo)。
經(jīng)過上述步驟后,可得到二維碼的四條邊的精確位置。
本領(lǐng)域技術(shù)人員應(yīng)當(dāng)理解,在其他的具體實(shí)施例中,也可采用其他的方法在實(shí)線外邊界和虛線外邊界的大致位置精確確定出兩條實(shí)線外邊界和兩條虛線外邊界的位置。
實(shí)施例二:
本實(shí)施例中,如圖11所示,定位系統(tǒng)包括圖形獲取單元431、預(yù)篩選單元432、粗略定位單元433和精確定位單元434。
圖形獲取單元431用于輸入圖像數(shù)據(jù)。
預(yù)篩選單元432用于利用二維碼數(shù)據(jù)區(qū)的邊緣信息對(duì)圖像數(shù)據(jù)進(jìn)行預(yù)篩選,確定可能包含二維碼的圖像區(qū)域作為候選區(qū)域,所述邊緣信息是指灰度值具有突變的區(qū)域。在一具體實(shí)例中,預(yù)篩選單元432包括分塊子單元4321、邊緣檢測(cè)子單元4322、邊緣參數(shù)計(jì)算子單元4323、第一判斷子單元4324、連通子單元4325和第二判斷子單元4326。
分塊子單元4321用于將圖像數(shù)據(jù)劃分成若干個(gè)數(shù)據(jù)塊。
邊緣檢測(cè)子單元4322用于檢測(cè)各數(shù)據(jù)塊中的邊緣信息。在一種具體實(shí)施例中,邊緣檢測(cè)子單元4322通過以下方式檢測(cè)邊緣信息:計(jì)算各像素點(diǎn)在第一維度和第二維度的梯度分量,根據(jù)梯度分量計(jì)算各像素點(diǎn)的梯度幅值,將像素點(diǎn)的梯度幅值和第二設(shè)定閾值進(jìn)行比較,如果梯度幅值大于第二設(shè)定閾值,則認(rèn)為該像素點(diǎn)為一個(gè)邊緣信息。
邊緣參數(shù)計(jì)算子單元4323用于根據(jù)邊緣信息計(jì)算各數(shù)據(jù)塊中的邊緣參數(shù),在一具體實(shí)施例中,邊緣參數(shù)包括邊緣頻率和邊緣角度差中的至少一個(gè),邊緣頻率為數(shù)據(jù)塊內(nèi)梯度幅值大于第二設(shè)定閾值的邊緣信息的個(gè)數(shù);邊緣角度差通過以下方式獲得:根據(jù)梯度分量計(jì)算各像素點(diǎn)的邊緣角度,統(tǒng)計(jì)數(shù)據(jù)塊的邊緣角度的直方圖,計(jì)算直方圖中明顯波峰之間的角度差,該角度差為邊緣角度差。
第一判斷子單元4324用于根據(jù)各數(shù)據(jù)塊的邊緣參數(shù)判斷該數(shù)據(jù)塊是否是與二維碼相關(guān)的數(shù)據(jù)塊。在一具體實(shí)施例中,第一判斷子單元4324用于將數(shù)據(jù)塊內(nèi)的像素進(jìn)行二值化處理,統(tǒng)計(jì)數(shù)據(jù)塊內(nèi)黑白像素的比例,得到第一比例;統(tǒng)計(jì)數(shù)據(jù)塊的邊緣頻率與劃分的所有數(shù)據(jù)塊數(shù)量的比值,得到第二比例;統(tǒng)計(jì)數(shù)據(jù)塊的邊緣角度差與90度的比值,得到第三比例;計(jì)算第一比例、第二比例和第三比例的加權(quán)和,得到該數(shù)據(jù)塊的相關(guān)性得分;將相關(guān)性得分與第三設(shè)定閾值進(jìn)行比較,根據(jù)比較結(jié)果標(biāo)記該數(shù)據(jù)塊是否是與二維碼相關(guān)的數(shù)據(jù)塊。
連通子單元4325用于將所有與二維碼相關(guān)的數(shù)據(jù)塊進(jìn)行連通處理,得到連通區(qū)域。
第二判斷子單元4326用于判斷連通區(qū)域大小是否符合第一設(shè)定閾值,如果是,則該連通區(qū)域?yàn)榭赡馨S碼的候選區(qū)域。
粗略定位單元433用于對(duì)每個(gè)候選區(qū)域,利用待定位二維碼的定位圖形確定二維碼外邊界的大致位置,從而獲得二維碼的粗略定位。在一具體實(shí)例中,如圖11所示,粗略定位單元433包括線段提取子單元4331、實(shí)線粗定位子單元4332和虛線粗定位子單元4333,線段提取子單元4331用于從候選區(qū)域中提取線段。實(shí)線粗定位子單元4332用于根據(jù)定位圖形,篩選出長(zhǎng)度符合實(shí)線外邊界長(zhǎng)度范圍的線段;判斷符合實(shí)線外邊界長(zhǎng)度范圍的線段的數(shù)量是否小于兩條,如果是,則放棄該候選區(qū)域,否則在候選區(qū)域的線段中進(jìn)行“L”形線段匹配,并獲取“L”形線段的長(zhǎng)度以及三個(gè)頂點(diǎn)的位置坐標(biāo),從而確定出該候選區(qū)域中所有二維碼的兩條實(shí)線外邊界的大致位置。虛線粗定位子單元4333用于根據(jù)“L”形線段的長(zhǎng)度以及三個(gè)頂點(diǎn)的位置坐標(biāo),以及定位圖形中實(shí)線外邊界和虛線外邊界的位置關(guān)系確定出兩條虛線外邊界所在的矩形區(qū)域。兩條實(shí)線外邊界和兩條虛線外邊界圍合的區(qū)域?yàn)楹蜻x二維碼區(qū)域。
在另一具體實(shí)例中,如圖11所示,粗略定位單元433還包括再篩選子單元4334,再篩選子單元4334用于在確定出兩條虛線外邊界所在的矩形區(qū)域后分別沿著所述矩形區(qū)域的短邊方向查找角點(diǎn),角點(diǎn)是指兩條邊緣線的交點(diǎn),判斷角點(diǎn)數(shù)量與矩形區(qū)域的面積比值是否大于第四設(shè)定閾值,如果是,則保留該候選二維碼區(qū)域以對(duì)其進(jìn)行精確定位,否則丟棄該候選二維碼區(qū)域,不再對(duì)其進(jìn)行精確定位。
精確定位單元434用于根據(jù)二維碼外邊界的大致位置確定出二維碼的精確邊界,從而獲得二維碼的精確定位。在一具體實(shí)例中,如圖11所示,精確定位單元434包括偏移子單元4341、掃描子單元4342、擬合子單元4343和交點(diǎn)坐標(biāo)計(jì)算子單元4344。偏移子單元4341用于分別從實(shí)線外邊界和虛線外邊界的粗略位置向兩側(cè)偏移預(yù)定像素,生成掃描區(qū)域。掃描子單元4342用于在掃描區(qū)域內(nèi)沿預(yù)定方向掃描邊緣點(diǎn),并將獲取的邊緣點(diǎn)分組保存。擬合子單元4343用于將各組的邊緣點(diǎn)進(jìn)行直線擬合,分別得到實(shí)線外邊界和虛線外邊界的精確位置。交點(diǎn)坐標(biāo)計(jì)算子單元4344用于計(jì)算兩條實(shí)線外邊界和兩條虛線外邊界的四個(gè)交點(diǎn)的位置坐標(biāo)。
本領(lǐng)域技術(shù)人員可以理解,上述實(shí)施方式中各種方法的全部或部分步驟可以通過程序來指令相關(guān)硬件完成,該程序可以存儲(chǔ)于一計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)中,存儲(chǔ)介質(zhì)可以包括:只讀存儲(chǔ)器、隨機(jī)存儲(chǔ)器、磁盤或光盤等。
以上應(yīng)用了具體個(gè)例對(duì)本發(fā)明進(jìn)行闡述,只是用于幫助理解本發(fā)明,并不用以限制本發(fā)明。對(duì)于本發(fā)明所屬技術(shù)領(lǐng)域的技術(shù)人員,依據(jù)本發(fā)明的思想,還可以做出若干簡(jiǎn)單推演、變形或替換。