本發(fā)明涉及圖像處理領(lǐng)域,尤其涉及圖像感興趣區(qū)域腐蝕的實現(xiàn)。
背景技術(shù):
形態(tài)學(xué)腐蝕算法是圖像處理領(lǐng)域中常用的預(yù)處理算法,主要用于縮小感興趣區(qū)域、獲取邊緣、連接不同區(qū)域以便于后續(xù)處理等。
目前已有的感興趣區(qū)域腐蝕算法,針對圖像的像素點進行操作,其像素點表示方法可分為兩種:1)每個像素點采用八位表示,即像素值可取0到255;2)每個像素點采用1位表示,即像素值為0與1。這兩種像素表示方法在進行腐蝕操作時原理基本一致,數(shù)學(xué)表達式為:表示用結(jié)構(gòu)元B對感興趣區(qū)域A進行腐蝕,表達式的意思是結(jié)構(gòu)元(即結(jié)構(gòu)元B關(guān)于其原點的鏡像)在感興趣區(qū)域A所在的圖像內(nèi)平移,結(jié)構(gòu)元完全包含于感興趣區(qū)域A的所有位置的集合即為腐蝕所得結(jié)果。其中,方法1)比方法2)慢,因為計算機對一位的訪問與計算的速度要快于八位;另外,方法1)的內(nèi)存占用量是方法2)的八倍。
現(xiàn)有基于像素點的操作方法存在速度慢、占用內(nèi)存大、對感興趣區(qū)域的操作受圖像的寬高限制、需訪問圖像內(nèi)所有像素點等缺點。也就是說,現(xiàn)有的感興趣區(qū)域腐蝕算法耗時長且占用內(nèi)存多,對處于圖像邊界的像素點腐蝕會受限制。另一方面,針對像素點進行操作的算法通常采用直徑較小的結(jié)構(gòu)元,對于腐蝕結(jié)構(gòu)元直徑超過3個像素甚至幾十上百個像素時就需通過多次調(diào)用算子實現(xiàn),其耗時也會成幾十上百倍增長。在實際工業(yè)應(yīng)用中往往要求實時對圖像進行處理,對算法的耗時要求嚴(yán)格,現(xiàn)有的這種算法難以滿足實際應(yīng)用的需要。
技術(shù)實現(xiàn)要素:
本發(fā)明要解決的技術(shù)問題在于,針對現(xiàn)有技術(shù)的上述缺陷,提出一種基于行程編碼的快速區(qū)域腐蝕算法,能夠有效地降低內(nèi)存占用,并縮短耗時。
本發(fā)明為解決其技術(shù)問題所提供的一種基于行程編碼的快速區(qū)域腐蝕算法,該算法包括:
對圖像感興趣區(qū)域進行行程編碼;
選取矩形結(jié)構(gòu)元對編碼后的感興趣區(qū)域進行腐蝕操作;
其中,該腐蝕操作表示為矩形結(jié)構(gòu)元鏡像后所有像素點相對于其原點的向量對感興趣區(qū)域各行程平移結(jié)果的交集。
進一步地,所述腐蝕操作具體包括:
求取矩形結(jié)構(gòu)元列方向腐蝕向量及行方向腐蝕向量;
使用所述列方向腐蝕向量對感興趣區(qū)域進行列方向腐蝕操作;
使用所述行方向腐蝕向量對列方向腐蝕操作后的感興趣區(qū)域進行行方向腐蝕操作;
對行方向腐蝕操作的結(jié)果求交集;
其中,列方向腐蝕向量包括矩形結(jié)構(gòu)元起始列任一像素、終止列任一像素相對于原點向量的列方向分量;行方向腐蝕向量包括矩形結(jié)構(gòu)元各行任一像素相對于原點向量的行方向分量;矩形結(jié)構(gòu)元的原點是該矩形結(jié)構(gòu)元的重心。
進一步地,所述腐蝕操作也可以包括:
求取矩形結(jié)構(gòu)元行方向腐蝕向量及列方向腐蝕向量;
使用所述行方向腐蝕向量對感興趣區(qū)域進行行方向腐蝕操作;
使用所述列方向腐蝕向量對行方向腐蝕操作后的感興趣區(qū)域進行列方向腐蝕操作;
對列方向腐蝕操作的結(jié)果求交集;
其中,行方向腐蝕向量包括矩形結(jié)構(gòu)元起始行任一像素、終止行任一像素相對于原點向量的行方向分量;列方向腐蝕向量包括矩形結(jié)構(gòu)元各列任一像素相對于原點向量的列方向分量;矩形結(jié)構(gòu)元的原點是該矩形結(jié)構(gòu)元的重心。
本發(fā)明同時提供一種基于行程編碼的快速區(qū)域腐蝕裝置,該裝置包括:
第一模塊,用于對圖像感興趣區(qū)域進行行程編碼;
第二模塊,用于選取矩形結(jié)構(gòu)元對編碼后的感興趣區(qū)域進行腐蝕操作,所述腐蝕操作表示為矩形結(jié)構(gòu)元鏡像后所有像素點相對于其原點的向量對感興趣區(qū)域各行程平移結(jié)果的交集。
進一步地,所述第二模塊包括:
向量求取單元,用于求取矩形結(jié)構(gòu)元列方向腐蝕向量及行方向腐蝕向量;
腐蝕操作單元,用于使用所述列方向腐蝕向量對感興趣區(qū)域進行列方向腐蝕操作;使用所述行方向腐蝕向量對列方向腐蝕操作后的感興趣區(qū)域進行行方向腐蝕操作;并對行方向腐蝕操作的結(jié)果求交集;
其中,列方向腐蝕向量包括矩形結(jié)構(gòu)元起始列任一像素、終止列任一像素相對于原點向量的列方向分量;行方向腐蝕向量包括矩形結(jié)構(gòu)元各行任一像素相對于原點向量的行方向分量;矩形結(jié)構(gòu)元的原點是該矩形結(jié)構(gòu)元的重心。
進一步地,所述第二模塊也可以包括:
向量求取單元,用于求取矩形結(jié)構(gòu)元行方向腐蝕向量及列方向腐蝕向量;
腐蝕操作單元,用于使用所述行方向腐蝕向量對感興趣區(qū)域進行行方向腐蝕操作;使用所述列方向腐蝕向量對行方向腐蝕操作后的感興趣區(qū)域進行列方向腐蝕操作;對列方向腐蝕操作的結(jié)果求交集;
其中,行方向腐蝕向量包括矩形結(jié)構(gòu)元起始行任一像素、終止行任一像素相對于原點向量的行方向分量;列方向腐蝕向量包括矩形結(jié)構(gòu)元各列任一像素相對于原點向量的列方向分量;矩形結(jié)構(gòu)元的原點是該矩形結(jié)構(gòu)元的重心。
本發(fā)明的有益效果在于,通過對圖像感興趣區(qū)域進行行程編碼,將結(jié)構(gòu)元對感興趣區(qū)域的腐蝕由針對圖像像素點的操作方式轉(zhuǎn)換為針對行程的操作方式,降低了內(nèi)存占用,提高了運算效率;同時通過選取矩形結(jié)構(gòu)元對圖像的感興趣區(qū)域進行腐蝕,將腐蝕操作表示為矩形結(jié)構(gòu)元鏡像后所有像素點相對于其原點的向量對感興趣區(qū)域各行程平移結(jié)果的交集,由于矩形結(jié)構(gòu)元自身的形狀特點,使得向量對感興趣區(qū)域各行程的平移過程更為簡化,進一步縮短耗時,使腐蝕的實現(xiàn)更為高效。同時本發(fā)明的算法對矩形結(jié)構(gòu)元的大小變化不敏感,無論采用3×3結(jié)構(gòu)元還是100×100結(jié)構(gòu)元對圖像區(qū)域進行腐蝕耗時增加不明顯,占用內(nèi)存在很大程度上得以減少。
附圖說明
下面將結(jié)合附圖及實施例對本發(fā)明作進一步說明,附圖中:
圖1為本發(fā)明的行程編碼示意圖;
圖2為本發(fā)明的行程編碼流程圖;
圖3為本發(fā)明的矩形結(jié)構(gòu)元示意圖;
圖4為本發(fā)明算法的流程示意圖;
圖5為本發(fā)明列方向腐蝕向量對感興趣區(qū)域腐蝕作用示意圖;
圖6為本發(fā)明算法采用圖3所示矩形結(jié)構(gòu)元進行腐蝕的結(jié)果示意圖。
具體實施方式
現(xiàn)結(jié)合附圖,對本發(fā)明的較佳實施例作詳細(xì)說明。
本發(fā)明提出一種基于行程編碼的快速區(qū)域腐蝕算法,其對圖像進行行程編碼,所有操作均針對編碼后的圖像。雖然沒有針對像素點操作的腐蝕算法直觀,但是其速度與內(nèi)存占用卻優(yōu)于針對像素點操作的算法,而且脫離了圖像例如:寬、高,與區(qū)域形狀的限制。本發(fā)明算法適用的技術(shù)領(lǐng)域包括,但不限于:圖像處理Blob分析時縮小感興趣區(qū)域、與膨脹算法組合成開閉操作及求區(qū)域幾何特征參數(shù)等。
本發(fā)明算法包括:對圖像感興趣區(qū)域進行行程編碼;以及選取矩形結(jié)構(gòu)元對編碼后的感興趣區(qū)域進行腐蝕操作。
首先對圖像感興趣區(qū)域進行行程編碼。不同灰度值的像素點組合在一起構(gòu)成圖像,由于像素點灰度值的不同使得圖像呈現(xiàn)出不同的圖案,圖像處理中常需要對圖像進行分割以獲得感興趣的區(qū)域?,F(xiàn)有算法中感興趣區(qū)域通常直接用像素點表示,例如:開源庫OpenCV的ROI,像素點表示感興趣區(qū)域存在的一個弊端是內(nèi)存占用大。以8位深度的灰度圖來說,若一片感興趣區(qū)域含30萬個像素點,則其內(nèi)存占用量MemoryUsage=300000bytes,約為292KB,若采用行程編碼方式,內(nèi)存占用量可能低至3KB,二者相差近100倍,可見行程編碼圖像對減少程序資源的占用是有效的。
行程可分為行行程與列行程兩種,行行程結(jié)構(gòu)包含行程所在行號Row、行程起始列Cb與行程終止列Ce;列行程包含行程所在列號Col、行程起始行Rb與行程終止行Re。
本發(fā)明的行程編碼既可以基于行行程實現(xiàn),也可以基于列行程實現(xiàn)。以基于行行程進行編碼為例,感興趣區(qū)域的每一行中連續(xù)像素點組成的一段區(qū)域稱為一個行程。唯一標(biāo)示一個行程需提供行號,起始列與終止列。一個行程內(nèi)包含的像素的點數(shù)沒有限制。若一個行程的每個分量用兩個字節(jié)表示,則一個行程占6個字節(jié)。每一片感興趣區(qū)域由有限個行程組成。每一行也可能包含若干個行程。參見圖1,圖1為本發(fā)明的行程編碼示意圖,圖中每一個方格代表一個像素,作為一個例舉,圖1示出了其中的一個像素101,兩個行程103、105以及感興趣區(qū)域107。
參見圖2,圖2為本發(fā)明的行程編碼流程圖。感興趣區(qū)域的行程編碼過程具體包括以下步驟:
S201、圖像分割獲得感興趣區(qū)域。即,通過閾值分割等圖像分割方法獲得感興趣區(qū)域。
S202、申請內(nèi)存。即,在計算設(shè)備中開辟一片內(nèi)存用以保存行程。
S203、感興趣區(qū)域行程編碼。即,從感興趣區(qū)域最小行最小列像素點開始依次按行取連續(xù)像素片段的行號Row、起始列Cb與終止列Ce,獲得第一個行程并保存在開辟的內(nèi)存中;逐行逐列將整個感興趣區(qū)域編碼為行程表示。
S204、判斷前述步驟S202開辟的內(nèi)存是否足夠,夠的話,執(zhí)行步驟S206,不夠的話,執(zhí)行步驟S205。
S205、重新申請內(nèi)存則需重新開辟一片大內(nèi)存并將原有數(shù)據(jù)復(fù)制至此段內(nèi)存中,釋放原有內(nèi)存。
S206、編碼完成結(jié)束編碼。
經(jīng)過上述步驟后,感興趣區(qū)域被編碼為行程表示方式,并且所有行程按照行順序依次保存,每行的所有行程又嚴(yán)格按照列順序保存。
接下來,選取矩形結(jié)構(gòu)元對編碼后的感興趣區(qū)域進行腐蝕操作。
參見圖3,圖3為本發(fā)明矩形結(jié)構(gòu)元的示意圖,O點為矩形結(jié)構(gòu)元的原點,本實施例選取矩形結(jié)構(gòu)元的重心作為其原點。腐蝕算法采用的是將矩形結(jié)構(gòu)元的像素點相對于其原點鏡像后的結(jié)果。設(shè)矩形結(jié)構(gòu)元為B,鏡像后的結(jié)果為結(jié)構(gòu)元感興趣區(qū)域為A。直觀理解腐蝕指的是在整個圖像區(qū)域內(nèi)平移結(jié)構(gòu)元所有完全包含于感興趣區(qū)域A的結(jié)構(gòu)元原點位置組成的集合即為腐蝕結(jié)果,數(shù)學(xué)表達式為第一公式:若感興趣區(qū)域A所在圖像含有m個像素點,矩形結(jié)構(gòu)元B含n個像素點,則算法的復(fù)雜度為O(mn)。
本發(fā)明在此做了一次巧妙的變換:采用矩形結(jié)構(gòu)元B腐蝕感興趣區(qū)域A還可表示為結(jié)構(gòu)元所有像素點相對于其原點的向量對感興趣區(qū)域A的平移結(jié)果的交集。數(shù)學(xué)表達式為第二公式:其中,向量如圖3中的箭頭所示。感興趣區(qū)域A經(jīng)過行程編碼后,可表示為結(jié)構(gòu)元所有像素點相對于其原點的向量對感興趣區(qū)域A各行程的平移結(jié)果的交集。由于矩形結(jié)構(gòu)元的原點為其重心,因此B的鏡像為矩形結(jié)構(gòu)元本身,因此本實施例中采用矩形結(jié)構(gòu)元B腐蝕感興趣區(qū)域A實際可以表示為矩形結(jié)構(gòu)元B所有像素點相對于其原點的向量對感興趣區(qū)域A各行程的平移結(jié)果的交集。
矩形結(jié)構(gòu)元B中任一像素點相對于其原點的向量均可分解為中任一列方向分量與任一行方向分量的集合。由于向量存在重合,如向量與重合了部分,它們共同作用的結(jié)果與最大向量單獨作用的結(jié)果相同,若將矩形結(jié)構(gòu)元B視為行程編碼結(jié)構(gòu),則對于其任一行程而言,只需計算該行程起始點與終止點像素相對于其原點的向量對感興趣區(qū)域A平移結(jié)果的交集即可。而矩形結(jié)構(gòu)元自身特定的形狀決定,其每一行程的起始列cb、終止列ce分別相同,如圖3中的向量及分別相同,因此無論矩形結(jié)構(gòu)元大小,在列方向只需一次計算矩形結(jié)構(gòu)元B對感興趣區(qū)域A的平移,得到A’,即針對感興趣區(qū)域A的行程,可以同時改變一次其cb、ce的值(如圖3中的向量等十個向量共35個像素點只需一次計算)。最后腐蝕結(jié)果則為所有行方向分量對區(qū)域A’平移的交集。
因此,圖3中與的作用進一步合并的結(jié)果就是,矩形結(jié)構(gòu)元對感興趣區(qū)域列方向的腐蝕只需計算對cb的右移與對ce的左移即可,row保持不變;矩形結(jié)構(gòu)元對感興趣區(qū)域行方向的腐蝕中,與雖然不能合并,但只需對row進行改變,最終可以以最少的計算量實現(xiàn)腐蝕。與采用任意形狀結(jié)構(gòu)元對感興趣區(qū)域進行腐蝕的通用算法及針對像素點的算法相比,本發(fā)明對感興趣區(qū)域一個行程列方向平移的計算量由1.5個像素點計算量減少為1個(只改變了cb與ce值,無需改變row的值,單像素點的平移需改變坐標(biāo)R與C的值),且行方向平移計算量由1.5個像素點計算量減少為0.5個(只改變row的值)。
假設(shè)矩形結(jié)構(gòu)元B與感興趣區(qū)域A均為方形,矩形結(jié)構(gòu)元B邊長為L個像素,感興趣區(qū)域A邊長為N個像素,則基于像素點的腐蝕算法復(fù)雜度為O(L2N2),采用任意形狀結(jié)構(gòu)元對感興趣區(qū)域進行腐蝕的通用算法復(fù)雜度為O(3LN),而本發(fā)明算法復(fù)雜度為O((1+0.5L)N)。假設(shè)L為3,本發(fā)明算法的速度將是采用任意形狀結(jié)構(gòu)元對感興趣區(qū)域進行腐蝕通用算法的3.6倍,是基于像素點腐蝕算法的3.6N倍;若L為10,本發(fā)明算法速度將是采用任意形狀結(jié)構(gòu)元對感興趣區(qū)域進行腐蝕通用算法的5倍,是基于像素點腐蝕算法的16.7N倍??梢?,本發(fā)明采用矩形結(jié)構(gòu)元對感興趣區(qū)域進行腐蝕的算法復(fù)雜度得到降低,時間消耗大大減少,在結(jié)構(gòu)元及感興趣區(qū)域較大的情況下尤為突出。
參見圖4,本發(fā)明算法具體包括以下步驟:
A.對目標(biāo)圖像進行圖像分割,獲得感興趣區(qū)域。首先,選取一適當(dāng)?shù)拈撝担缓蟊闅v目標(biāo)圖像中所有像素點,滿足閾值要求的則為感興趣區(qū)域像素點,最后將所有感興趣區(qū)域的像素點標(biāo)記并保存即形成感興趣區(qū)域。
B.對感興趣區(qū)域進行行程編碼。以感興趣區(qū)域最小行最小列像素點為第一個行程的起始點,依次按行提取連續(xù)的像素點片段為一個行程,直至完成整個感興趣區(qū)域的編碼,編碼步驟參見圖1與圖2。
C.選取矩形結(jié)構(gòu)元對感興趣區(qū)域進行腐蝕操作,其具體腐蝕過程如下:
C1.求矩形結(jié)構(gòu)元的列方向腐蝕向量如圖3中列方向腐蝕向量即矩形結(jié)構(gòu)元起始列任一像素、終止列任一像素相對于原點向量的列方向分量;
C2.使用對感興趣區(qū)域A進行列方向腐蝕操作,得結(jié)果A’,如圖5所示,其中細(xì)實線表示原始的感興趣區(qū)域A,粗實線表示左右平移后的區(qū)域,虛線為交集即列方向腐蝕操作結(jié)果A’。設(shè)感興趣區(qū)域A中每一個行程的起始列與終止列分別為cb、ce,A’中的每一個行程的起始列與終止列分別為cb’、ce’,則:
C3.求矩形結(jié)構(gòu)元的行方向腐蝕向量如圖3中的與行方向腐蝕向量包括矩形結(jié)構(gòu)元每一行任一像素相對于原點向量的行方向分量。
C4.使用步驟C3所得的每一個行方向腐蝕向量對區(qū)域A’進行腐蝕操作,如圖6所示,其中細(xì)實線表示A,虛線表示A’。設(shè)感興趣區(qū)域A中行程的行號為row,A’中行程的行號為row',則:
C5.對上述腐蝕操作的結(jié)果求交集即為最終的腐蝕結(jié)果,如圖6所示,圖中粗實線部分即最終結(jié)果。
以上步驟C是針對感興趣區(qū)域采用行行程編碼的形式所給出的腐蝕操作步驟,感興趣區(qū)域亦可采用列行程編碼的形式,即以感興趣區(qū)域最小行最小列像素點為第一個行程的起始點,依次按列提取連續(xù)的像素點片段為一個行程,直至完成整個感興趣區(qū)域的編碼,此時腐蝕操作的步驟相應(yīng)調(diào)整,具體如下:
求取矩形結(jié)構(gòu)元行方向腐蝕向量及列方向腐蝕向量;
使用所述行方向腐蝕向量對感興趣區(qū)域進行行方向腐蝕操作;
使用所述列方向腐蝕向量對行方向腐蝕操作后的感興趣區(qū)域進行列方向腐蝕操作;
對列方向腐蝕操作的結(jié)果求交集;
其中,行方向腐蝕向量包括矩形結(jié)構(gòu)元起始行任一像素、終止行任一像素相對于原點向量的行方向分量;列方向腐蝕向量包括矩形結(jié)構(gòu)元各列任一像素相對于原點向量的列方向分量。
本發(fā)明同時提出一種基于行程編碼的快速區(qū)域腐蝕裝置,該裝置包括:第一模塊,用于對圖像感興趣區(qū)域進行行程編碼;第二模塊,用于選取矩形結(jié)構(gòu)元對編碼后的感興趣區(qū)域進行腐蝕操作,該腐蝕操作表示為矩形結(jié)構(gòu)元所有像素點相對于其原點的向量對感興趣區(qū)域各行程平移結(jié)果的交集。
其中,第二模塊根據(jù)對感興趣區(qū)域進行行程編碼形式的不同,其結(jié)構(gòu)也有一定差異。當(dāng)感興趣區(qū)域采用行行程編碼的形式時,該第二模塊包括:
向量求取單元,用于求取矩形結(jié)構(gòu)元列方向腐蝕向量及行方向腐蝕向量;
腐蝕操作單元,用于使用列方向腐蝕向量對感興趣區(qū)域進行列方向腐蝕操作;使用行方向腐蝕向量對列方向腐蝕操作后的感興趣區(qū)域進行行方向腐蝕操作;并對行方向腐蝕操作的結(jié)果求交集;
其中,列方向腐蝕向量包括矩形結(jié)構(gòu)元起始列任一像素、終止列任一像素相對于原點向量的列方向分量;行方向腐蝕向量包括矩形結(jié)構(gòu)元各行任一像素相對于原點向量的行方向分量。
當(dāng)感興趣區(qū)域采用列行程編碼的形式時,該第二模塊包括:
向量求取單元,用于求取矩形結(jié)構(gòu)元行方向腐蝕向量及列方向腐蝕向量;
腐蝕操作單元,用于使用行方向腐蝕向量對感興趣區(qū)域進行行方向腐蝕操作;使用列方向腐蝕向量對行方向腐蝕操作后的感興趣區(qū)域進行列方向腐蝕操作;對列方向腐蝕操作的結(jié)果求交集;
其中,行方向腐蝕向量包括矩形結(jié)構(gòu)元起始行任一像素、終止行任一像素相對于原點向量的行方向分量;列方向腐蝕向量包括矩形結(jié)構(gòu)元各列任一像素相對于原點向量的列方向分量。
可以理解的是,上述的兩個模塊既可以對應(yīng)于處理器上運行的程序的兩個軟件模塊,也可以對應(yīng)于專門構(gòu)建的兩個硬件模塊。
本發(fā)明采用矩形結(jié)構(gòu)元對經(jīng)行程編碼的圖像感興趣區(qū)域進行快速腐蝕,經(jīng)行程編碼后表示圖像的最小單位為行程,每個行程可包含的像素點數(shù)無限制,因此感興趣區(qū)域的行程數(shù)必然比像素點數(shù)目少,與針對像素點進行腐蝕的算法相比針對行程進行腐蝕則變得更簡單,算法復(fù)雜度遠(yuǎn)低于現(xiàn)有針對單個像素點的算法,耗時減少;本發(fā)明尤其適合于大矩形結(jié)構(gòu)元對感興趣區(qū)域的腐蝕,其耗時不會隨矩形結(jié)構(gòu)元的增大而明顯增加;感興趣區(qū)域采用行程編碼后,算法內(nèi)存占用少,特別適用于對資源有一定限制的嵌入式平臺;另外,采用行程編碼后,對感興趣區(qū)域的操作脫離了圖像的寬度與高度的限制,直接保存任意形狀任意大小的感興趣區(qū)域,無數(shù)據(jù)冗余,適用性更廣。
應(yīng)當(dāng)理解的是,以上實施例僅用以說明本發(fā)明的技術(shù)方案,而非對其限制,對本領(lǐng)域技術(shù)人員來說,可以對上述實施例所記載的技術(shù)方案進行修改,或者對其中部分技術(shù)特征進行等同替換;而這些修改和替換,都應(yīng)屬于本發(fā)明所附權(quán)利要求的保護范圍。