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