圖像形態學

圖像形態學

  數學形態學是基於集合論的非線性理論,是圖像處理領域的一種新理論和新方法。數字圖像處理中的形態學處理是指將數字形態學作爲工具從圖像中提取對於表達和描繪區域形狀有用處的圖像分量,比如邊界、骨架以及凸殼,還包括用於預處理或後處理的形態學過濾、細化和修剪等。圖像形態學處理中我們感興趣的主要是二值圖像。其基本思想是用具有一定形態特徵的結構元素提取圖像中的對應形狀,以實現圖像分析和識別。與傳統的基於線性理論的空域或頻域圖像處理技術相比,具有不模糊圖像邊界和細節,對噪聲不敏感,提取的圖像邊緣平滑,骨架較連續,易於並行處理等特點。近年來,基於數學形態學的圖像分析和處理方法在國內外得到不斷髮展,在多門學科中,許多研究者已開始把數學形態方法應用於圖像形態特徵提取,數學形態學已逐漸發展成爲圖像處理技術的一個主要研究領域。數學形態學的基本運算有4種:膨脹、腐蝕、開和閉,基於這些基本運算還可以推導和組合成多種數學形態學運算方法,利用這些形態學算子對圖像進行形狀和結構分析及處理。
 數學形態學在圖像處理中的應用主要是:
  ①利用形態學的基本運算,對圖像進行觀察和處理,從而達到改善圖像質量的目的;
  ②描述和定義圖像的各種集合參數和特徵,例如面積、周長、連通度、顆粒度、骨架和方向性等。
  從某種特定意義上來講,形態學圖像處理是以幾何學爲基礎的。它着重研究圖像的幾何結構,這種結構表示的可以是分析圖像的宏觀性質,也可以是微觀性質。通過利用一個結構元素去探測一個圖像,看是否能夠將這個結構元素很好地填放在圖像的內部,同時驗證填放結構元素的方法是否有效。通過對圖像內適合放入結構元素的位置做標記,便可得到圖像結構的信息。
  在對裂縫圖像提取邊緣時,在提取裂縫特徵等有用信息的同時,也容易丟掉一些信息,例如,二值圖像中,裂縫邊緣出現斷裂。因此在計算特徵參數之前,需要對斷裂處進行恢復,同時對多餘的噪聲加以剔除。


膨脹
  膨脹的作用是把圖像區域周圍的背景點合併到區域中,其結果是使區域的面積增大相應數量的點。如果結構元素取3x3,則稱爲簡單膨脹,其結果使區域的邊界沿周邊增加一個像素,如果區域是圓的,則每次膨脹後區域的直徑增加兩個像素,如果兩個物體距離比較近,通過膨脹可能連通在一起。膨脹對填補分割後物體中的空洞很有作用。
 對灰度圖像的膨脹操作有兩個效果:
  ①如果結構元素的值都爲正的,則輸出圖像會比輸入圖像亮;
  ②根據輸入圖像中暗細節的灰度值以及它們的形狀相對於結構元素的關係,它們在膨脹中被消減或被濾掉。

腐蝕
 對灰度圖像的腐蝕操作有兩個效果:
  ①如果結構元素的值都爲正的,則輸出圖像會比輸入圖像暗;
  ②根據輸入圖像中亮細節的尺寸比結構元素小,則其影響會被消弱,減弱的程度取決於這些亮細節周圍的灰度值和結構元素的形狀及幅值。

開啓和閉合
  由於膨脹和腐蝕並不是互爲逆運算,所以可以將他們結合使用。開啓就是先對圖像進行腐蝕,然後對腐蝕的圖像做膨脹運算;閉合時先對圖像做膨脹運算,然後對膨脹運算的結果做腐蝕運算。這兩種運算是數學形態學的重要運算。
  開啓消除了尺寸較小的亮細節,閉合消除了尺寸較小的暗細節。
  開啓運算一般能平滑圖像的輪廓,消弱狹窄的部分,去掉細的突出。
  閉合運算也是平滑圖像的輪廓,與開啓運算相反,它一般能融合窄的缺口和細長的彎口,去掉小洞,填補輪廓上的縫隙。
  通過動手實驗可知,開啓和閉合運算的效果並不理想,而相反,用膨脹腐蝕效果更加明顯,對經過Canny邊緣提取的圖像多次膨脹腐蝕,可以儘量完整的再現裂縫的原型。

細化
  圖像細化一般作爲一種圖像預處理技術出現,目的是提取源圖像的骨架,即是將原圖像中線條寬度大於1個像素的線條細化成只有一個像素寬,形成“骨架”,形成骨架後能比較容易的分析圖像,如提取圖像的特徵。利用細化技術得到區域的細化結構是常用的方法。尋找二值圖像的細化結構是圖像處理的一個基本問題。在圖像識別,經常要用到這樣的細化結構。骨架便是一種細化結構,它是目前的重要拓撲描述,應用非常廣泛。
  細化基本思想是“層層剝奪”,即從線條邊緣開始一層一層向裏剝奪,直到線條剩下一個像素的爲止。圖像細化大大地壓縮了原始圖像地數據量,並保持其形狀的基本拓撲結構不變,從而爲文字識別中的特徵抽取等應用奠定了基礎。

 細化算法應滿足以下條件:
  ① 將條形區域變成一條薄線;
  ② 薄線應位與原條形區域的中心;
  ③ 薄線應保持原圖像的拓撲特性。
  細化分成串行細化和並行細化,串行細化即是一邊檢測滿足細化條件的點,一邊刪除細化點;並行細化即是檢測細化點的時候不進行點的刪除只進行標記,而在檢測完整幅圖像後一次性去除要細化的點。
  常用的圖像細化算法有hilditch算法、pavlidis算法和rosenfeld算法等(注:進行細化算法前要先對圖像進行二值化,即圖像中只包含“黑”和“白”兩種顏色)。

  由前面所述可知,膨脹可以使圖像特徵擴大,腐蝕可以使圖像特徵縮小。膨脹是把裂縫區域周圍的背景點合併到裂縫中,補上裂縫,即消除裂縫所有的邊界點,使裂縫接近原來的形狀。重複對裂縫圖像進行膨脹和腐蝕,就可以將斷裂的裂縫連接起來,恢復其本來面貌,然後可以利用細化算法,把裂縫細化到單位像素寬。根據單像素的裂縫來計算其長度。
  細化就是從原來的圖中去掉一些點,但仍要保持原來的形狀,實際上就是保持原圖的骨架。數字圖像細化,是一種最常見的使用擊中/擊不中變換的形態學算法。


擊中(匹配)或擊不中變換
  假設集合A是由3個子集X、Y和Z組成的集合,擊中(匹配)的目的是要在A中找到X的位置,設X被包圍在一個小窗口W中,與W有關的X的局部背景定義爲集合的差(W-X),則X在A內能得到精確擬合位置集合是由X對A的腐蝕後由(W-X)對A的補集Ac腐蝕的交集,這個交集就是要找的位置,用集合B來表示由X和X的背景構成的集合,可以令B=(B1,B2),這裏B1=X,B2=(W-X),則在A中對B進行匹配可以表示爲:A⊙B(稱爲形態學上的擊中或擊不中變換)。

骨架提取
  骨架提取是與細化有關的一種運算,也稱爲中軸變換或焚燒草技術。中軸是所有與物體在兩個或跟到非鄰接邊界點處相切的圓心的軌跡。但抽骨架很少通過在物體內擬合圓來實現。在概念上,中軸可設想成按如下方式形成:想象一片與物體形狀相同的草,沿其外圍各點同時點火,火勢向內蔓延,向前推進的火線相遇各點的軌跡就是中軸。
  比較細化和骨架抽取可知,它們的效果大體相同,但是細化更容易消除細小的噪聲顆粒,故在圖像處理的最後,選擇細化圖像。


OpenCV中的圖像形態學
  基本的形態轉換是膨脹與腐蝕,它們能實現多種功能:例如消除噪聲、分割出獨立的圖像元素以及在圖像中連接相鄰的元素。形態學也常被用於尋找圖像中的明顯的極大值區域或極小值區域以及求出圖像的梯度。
腐蝕
void cvErode(//函數 cvErode 對輸入圖像使用指定的結構元素進行腐蝕,該結構元素決定每個具有最小值象素點的鄰域形狀(對彩色圖像,每個彩色通道單獨處理)
  const CvArr* src,//輸入圖像
  CvArr* dst,//輸出圖像
  IplConvKernel* element=NULL,//用於腐蝕的結構元素。若爲 NULL, 則使用 3×3 長方形的結構元素
  int iterations=1);//腐蝕的次數
膨脹
void cvDilate(//函數 cvDilate 對輸入圖像使用指定的結構元進行膨脹,該結構決定每個具有最小值象素點的鄰域形狀(對彩色圖像,每個彩色通道單獨處理)
  const CvArr* src,//輸入圖像
  CvArr* dst,//輸出圖像
  IplConvKernel* element=NULL,//用於膨脹的結構元素。若爲 NULL, 則使用 3×3 長方形的結構元素
  int iterations=1);//膨脹的次數
自定義核
IplConvKernel* cvCreateStructuringElementEx(//創建結構元素
  int cols,//結構元素的列數目
  int rows,//結構元素的行數目
  int anchor_x,//錨點的相對水平偏移量
  int anchor_y,//錨點的相對垂直偏移量
  int shape,//結構元素的形狀
  int* values=NULL);//指向結構元素的指針,它是一個平面數組,表示對元素矩陣逐行掃描。(非零點表示該點屬於結構元)。如果指針爲空,則表示平面數組中的所有元素都是非零的,即結構元是一個長方形(該參數僅僅當shape參數是 CV_SHAPE_CUSTOM 時才予以考慮)
void cvReleaseStructuringElement(//刪除結構元素,如果 *element 爲 NULL, 則函數不作用。
  IplConvKernel** element);//被刪除的結構元素的指針 
更通用的形態學
void cvMorphologyEx(//高級形態學變換,在膨脹和腐蝕基本操作的基礎上,完成一些高級的形態變換
  const CvArr* src,//輸入圖像
  CvArr* dst,//輸出圖像
  CvArr* temp,//臨時圖像,在形態梯度以及對“頂帽”和“黑帽”操作時的 in-place 模式下需要
  IplConvKernel* element,//結構元素
  int operation,//形態操作的類型(開/閉運算、形態梯度、禮帽、黑帽)
  int iterations=1);//膨脹和腐蝕次數
形態操作的類型: 
 CV_MOP_OPEN - 開運算(先腐後膨)
  開運算通常可以用來統計二值圖像中的區域數。若已將顯微鏡載玻片上觀察到的細胞圖像作了閾值化處理,可以使用開運算將相鄰的細胞分離開來,然後再計算圖像中的區域(細胞)數目。
 CV_MOP_CLOSE - 閉運算(先膨後腐)
  在大多數好的連通區域分析算法中,都會用到閉運算來去除噪聲引起的區域。對於連通區域分析,通常先採用腐蝕或閉運算來消除純粹由噪聲引起的部分,然後用開運算來連接鄰近的區域。
  (注意,雖然使用開運算或閉運算的結果與使用腐蝕和膨脹的結果類似,但這兩個新的操作能更精確地保存源圖像連接的區域。)
  開運算和閉運算操作幾乎都是“保留區域”或“面積保持”形式的:最顯著的效果是,閉運算消除了低於其鄰近點的孤立點,而開運算是消除高於其鄰近點的孤立點。
  形態學開運算的結果:去除小的明亮區域,並且剩餘的明亮區域被隔絕,但其大小不變。
  形態學閉運算的結果:亮的區域連在一起,但它們基本的大小不變。
  關於開運算和閉運算,最後一點需要說明的是iterations參數的意思。您可能會認爲閉操作執行兩次,相當於執行膨脹-腐蝕-膨脹-腐蝕。但事實上,這並不是必要的。真正需要的(比且所能得到的)是膨脹-膨脹-腐蝕-腐蝕這樣的過程。通過這種方式,不僅是單一的孤立點會消失,而且鄰近的孤立點羣也會消失。
 CV_MOP_GRADIENT - 形態梯度
  對二值圖像進行這一操作可以將團塊的邊緣突出出來。形態梯度被應用於灰度圖,在灰度值變化最劇烈的區域得到的結果數值最大。邊緣以高亮區域突出。觀察對灰度圖像的處理結果,可以獲知形態學梯度操作能描述圖像亮度變化的劇烈程度;這就是爲什麼把其稱爲“形態學梯度”的原因。當我們想突出高亮區域的外圍時,通常可使用形態學梯度,這樣我們可以把高亮的看成一個整體(或物體的一整部分)。因爲從原區域的膨脹中減去了原區域的收縮,所以留下了完整的外圍邊緣。這與計算梯度有所不同,梯度一般不能獲得物體的外圍邊緣。
 CV_MOP_TOPHAT - "頂帽"
 CV_MOP_BLACKHAT - "黑帽"
  這兩個操作分別用於分離比鄰近的點亮或暗的一些斑塊。當試圖孤立的部分相對於其鄰近的部分有亮度變化時,就可以使用這兩個方法。例如常用與處理有機組織或細胞的顯微鏡圖像。禮帽操作從A中減去了A的開運算。開運算帶來的結果是放大裂縫或局部低亮度區域,因此,可以突出比A周圍的區域更明亮的區域,並跟核的大小相關;相反地,黑帽操作突出比A的周圍的區域暗的區域。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章