一種連通像素塊的識別方法
【技術(shù)領域】
[0001]本發(fā)明屬于圖像處理領域,尤其涉及一種連通像素塊的識別方法。
【背景技術(shù)】
[0002]Blob是指具有相似圖像特征(如顏色、紋理等)、而且在空間上是連通的像素組成的塊。Blob分析是計算機視覺和圖像理解的一個很重要的組成部分,在對圖像中物體的位置、形狀和大小幾乎沒有任何先驗知識的情況下可以很方便的定位物體,計算物體的各種幾何特征,從而可以根據(jù)這些特征對物體進行選擇和分類。
[0003]Blob分析的核心是連通區(qū)域檢測算法,目前的算法根據(jù)處理方法大致可以分為兩類:基于像素掃描的方法和基于游程編碼的方法。基于像素的標記方法比較有代表性的是遞歸法和兩次掃描法。遞歸法掃描圖像,找到?jīng)]有標記的X點,給它分配一個新的標記L,遞歸分配標記L給X點的鄰點,直到所有點都有標記。這種方法需要反復掃描圖像,空間復雜度和時間復雜度都很高。兩次掃描法對上面的方法進行了改進:第一次掃描,對所有連通區(qū)域進行臨時標記,同時用等價表來記錄所有標記冗余;第二次掃描等價表,利用特定的搜索算法,進行等價標記合并?;谟纬叹幋a的方法首先對二值圖像進行游程編碼,然后對編碼后的圖像進行連通區(qū)域標記,同樣利用等價表,來記錄標記冗余,該方法能有效地壓縮圖像,使得搜索空間變小,從而降低了算法搜索的空間復雜度。利用等價表記錄標記冗余,避免了重復掃描連通區(qū)域,但是,在圖像中連通區(qū)域數(shù)目很大或者連通區(qū)域形狀很復雜時,標記冗余現(xiàn)象嚴重,等價表結(jié)構(gòu)復雜,搜索等價表進行等價標記合并的算法耗時很長。在工業(yè)環(huán)境下采集的圖像由于噪聲、光照等原因,采集的圖像經(jīng)過二值化處理后存在很多噪聲,基于等價表的算法非常耗時,而且當噪聲很嚴重時算法很不穩(wěn)定,很難應用到工業(yè)視覺檢測中。
【發(fā)明內(nèi)容】
[0004]鑒于此,本發(fā)明提供一種連通像素塊的識別方法,以解決現(xiàn)有技術(shù)標記冗余的技術(shù)問題。
[0005]本發(fā)明實施例是這樣實現(xiàn)的,一種連通像素塊的識別方法,所述方法包括以下步驟:
[0006]逐行掃描待識別圖像,獲取所述待識別圖像的每一行圖像的游程段;
[0007]將所述游程段計入本行圖像的游程節(jié)點,將所述游程節(jié)點分為目標游程節(jié)點和背景游程節(jié)點,并獲取所述游程節(jié)點的游程信息,所述游程信息包括:標記信息known、索引信息index、起始坐標start、終止坐標end和灰度值value ;
[0008]用于根據(jù)所述游程節(jié)點的游程信息和預設的連通識別關系識別相鄰兩行的目標游程節(jié)點是否連通,其中,ThisRow表示本行圖像,LastRow表示上一行圖像;
[0009]更新ThisRow目標游程節(jié)點的指針,直到最后一行圖像處理完成。
[0010]本發(fā)明實施例,逐行掃描待識別圖像,獲取待識別圖像的每一行圖像的游程段,將游程段計入每一行的游程節(jié)點,并獲取該游程節(jié)點的游程信息,根據(jù)預設的連通識別關系判斷相鄰兩行圖像是否連通,使得法使用游程鏈表和動態(tài)數(shù)組的方法,只需掃描圖像一次,并且無需建立等價表和進行等價標記合并,解決了現(xiàn)有算法中的標記冗余現(xiàn)象。
【附圖說明】
[0011]為了更清楚地說明本發(fā)明實施例中的技術(shù)方案,下面將對實施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實施例,對于本領域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動性的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
[0012]圖1是本發(fā)明實施例提供的連通像素塊識別方法的流程圖;
[0013]如圖2a所示為本發(fā)明一個實施例提供的相鄰兩行目標游程節(jié)點連通關系示意圖;
[0014]如圖2b所示為本發(fā)明另一實施例提供的相鄰兩行目標游程節(jié)點連通關系示意圖;
[0015]如圖2c所示為本發(fā)明再一實施例提供的相鄰兩行目標游程節(jié)點連通關系示意圖;
[0016]如圖2d所示為本發(fā)明再一實施例提供的相鄰兩行目標游程節(jié)點連通關系示意圖;
[0017]如圖2e所示為本發(fā)明再一實施例提供的相鄰兩行目標游程節(jié)點連通關系示意圖;
[0018]如圖2f所示為本發(fā)明再一實施例提供的相鄰兩行目標游程節(jié)點連通關系示意圖;
[0019]如圖2g所示為本發(fā)明再一實施例提供的相鄰兩行目標游程節(jié)點連通關系示意圖;
[0020]如圖2h所示為本發(fā)明再一實施例提供的相鄰兩行目標游程節(jié)點連通關系示意圖。
【具體實施方式】
[0021]為了使本發(fā)明的目的、技術(shù)方案及優(yōu)點更加清楚明白,以下結(jié)合附圖及實施例,對本發(fā)明進行進一步詳細說明。應當理解,此處所描述的具體實施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。
[0022]為了說明本發(fā)明所述的技術(shù)方案,下面通過具體實施例來進行說明。
[0023]實施例一
[0024]如圖1所示為本發(fā)明實施例提供的連通像素塊識別方法的流程圖,所述方法包括以下步驟:
[0025]步驟S101,逐行掃描待識別圖像,獲取所述待識別圖像的每一行圖像的游程段。
[0026]在本發(fā)明實施例中,識別系統(tǒng)逐行掃描待識別圖像,以獲取待識別圖像的每一行圖像的游程段。
[0027]步驟S102,將所述游程段計入本行圖像的游程節(jié)點,將所述游程節(jié)點分為目標游程節(jié)點和背景游程節(jié)點,并獲取所述游程節(jié)點的游程信息,所述游程信息包括:標記信息known、索引信息index、起始坐標start、終止坐標end和灰度值value。
[0028]在本發(fā)明實施例中,識別系統(tǒng)在獲取每一行圖像的游程段之后,將該游程段計入本行圖像的游程節(jié)點并分為目標游程節(jié)點和背景游程節(jié)點,同時獲取游程節(jié)點的游程信息,其中,游程信息包括但不限于:標記信息known、索引信息index、起始坐標start、終止坐標end和灰度值value,其中,游程信息表達的意思如下:
[0029]標記信息:用于表示該游程節(jié)點是否被標記。
[0030]索引信息:用于表示游程節(jié)點在本行圖像的索引,記錄游程節(jié)點在本行圖像的位置信息。
[0031]起始坐標:用于表示游程節(jié)點在本行圖像的起始坐標。
[0032]終止坐標:用于表示游程節(jié)點在本行圖像的終止坐標。
[0033]灰度值:用于表示游程節(jié)點的灰度值。
[0034]步驟S103,用于根據(jù)所述游程節(jié)點的游程信息和預設的連通識別關系識別相鄰兩行的目標游程節(jié)點是否連通,其中,ThisRow表示本行圖像,LastRow表示上一行圖像。
[0035]在本發(fā)明實施例中,識別系統(tǒng)在獲取了游程節(jié)點的游程信息之后,根據(jù)該游程信息識別相鄰兩行的目標游程節(jié)點是否連通,其中,所述預設的連通識別關系為=LastRow.srart-1 ^ ThisRow.encUThisRow.start-1 ^ LastRow.end 和 LastRow.value = ThisRow.value。所述用于根據(jù)所述游程節(jié)點的游程信息識別相鄰兩行的目標游程節(jié)點是否連通,具體為:
[0036](I)、如果Thisrow.start-1 > LastRow.end,則相鄰兩行的目標游程節(jié)點不連通。
[0037]在本發(fā)明實施例中,當Thisrow.start-1 > LastRow.end時,相鄰兩行的目標游程節(jié)點不滿足預設的連通識別關系,目標游程節(jié)點的標記信息為:LastR0W — index++,即指向LastRow行的下個游程繼續(xù)判斷。如圖2a所示為本發(fā)明一個實施例提供的相鄰兩行目標游程節(jié)點連通關系示意圖,其中白色為目標游程節(jié)點,黑色為背景游程節(jié)點。
[0038](2)、如果 LastRow.end+1 ^ ThisRow.start ^ LastRow.start 且 ThisRow.end >LastRow.end,則相鄰兩行的目標游程節(jié)點連通。
[0039]在本發(fā)明實施例中,當LastRow.end+1 ^ ThisRow.start ^ LastRow.start 且ThisRow.end > LastRow.end時,相鄰兩行的目標游程節(jié)點滿足預設的連通識別關系,LastRow目標游程節(jié)點比ThisRow目標游程節(jié)點的起始坐標要小、終止坐標也要小,則執(zhí)行以下操作:將ThisRow的目標游程節(jié)點歸入LastRow的目標游程節(jié)點,LastRow — index++。如圖2b所示為本發(fā)明另一實施例提供的相鄰兩行目標游程節(jié)點連通關系示意圖,其中白色為目標游程節(jié)點,黑色為背景游程節(jié)點。
[0040](3)、如果 ThisRow.start ^ LastRow.star 且 ThisRow.end < LastRow.end,則相鄰兩行的目標游程節(jié)點連通。
[0041]在本發(fā)明實施例中,當ThisRow.start ^ LastRow.star 且 ThisRow.end
<LastRow.end時,相鄰兩行的目標游程節(jié)點滿足預設的連通識別關系,LastRow目標游程節(jié)點比ThisRow目標游程節(jié)點的起始坐標要小、但終止坐標要大,則執(zhí)行以下操作:將ThisRow的目標游程節(jié)點歸入LastRow的目標游程節(jié)點,ThisRow — index++。如圖2c所示為本發(fā)明再一實施例提供的相鄰兩行目標游程節(jié)點連通關系示意圖,其中白色為目標游程節(jié)點,黑色為背景游程節(jié)點。
[0042](4)、如果 ThisRow.start ^ LastRow.star 且 ThisRow.end = LastRow.end,則相鄰兩行的目標游程節(jié)點連通。
[0043]在本發(fā)明實施例中,當ThisRow.start ^ LastRow.star 且 ThisRow.end =LastRow.end時,相鄰兩行的目標游程節(jié)點滿足預設的連通識別關系,LastRow目標游程節(jié)點比ThisRow目標游程節(jié)點起始坐標要小、終止坐標相同,則執(zhí)行以下操作:將ThisRow的目標游程節(jié)點歸入LastRow的目標游程節(jié)點,ThisRow — index++, LastRow — index+