天天看點

LabVIEW圖像分割算法(基礎篇—6)

目錄

1、圖像門檻值分割

1.1、全局門檻值分割

1.1.1、手動門檻值分割

1.1.2、自動門檻值分割

1.2、局部門檻值分割

1.3、門檻值分割算法比較

2、圖像邊緣分割

2.1、點檢測

2.2、線檢測

2.3、輪廓提取

3、圖像形态學分割

3.1、像素的形态學處理

3.2、顆粒的形态學處理

4、圖像區域分割

機器視覺系統基于數字圖像中的資訊進行決策。若系統算法不分主次,讓所有圖像資料都參與到目辨別别或分類的計算過程中,機器視覺系統的實時性就很難得到保證。為了確定系統的實時性,最大限度地利用系統的能力,有必要關注"關鍵資訊”。在機器視覺工程實踐中,通常會先确定一個或多個能有效代表被測目标的量化特征,再基于這些特征完成機器決策任務,進而提高系統自動識别的能力。

圖像分割是簡化機器視覺算法的有效手段之一。它将圖像分成一些有意義的區域,以便特征提取過程可基于這些區域提取目标的特征。此處提到的區域是指其中所有像素都相鄰或相接觸的集合,是像素的連通集。連通集中任意兩個像素之間都存在一條完全由該集合的元素構成的連通路徑。連通路徑是一條可在相鄰像素間移動的路徑。

圖像分割的基礎是像素的相似性和跳變性,如灰階、紋理相似或突變等。經圖像分割過程得到的區域一般互不交疊,每個區域内部的某種特性相同或接近,而不同區域間的特性則有明顯差别。

圖像分割的方法較多,依據處理的對象不同可分為點、線和區域分割法。若根據分割算法來分,則有門檻值分割法、邊緣分割法、區域分割法和形态學分割法等,如下圖所示:

LabVIEW圖像分割算法(基礎篇—6)

圖像門檻值分割(thresholding)是一種最常用的圖像分割方法,可将圖像按照不同灰階分成兩個或多個等間隔或不等間隔灰階區間,對目标與背景有較強對比度的圖像分割特别有用。主要利用檢測目标與背景在灰階上的差異,選取一個或多個灰階門檻值,并根據像素灰階與門檻值的比較結果對像素進行分類,用不同的數值分别标記不同類别的像素,進而生成二值圖像。由于物體與背景以及不同物體之間的灰階通常存在明顯差異,在圖像灰階直方圖中會呈現明顯的峰值,是以,若選擇圖像灰階直方圖中灰階分布的谷底作為門檻值,即可對圖像進行分割。

門檻值分割法可分為全局門檻值分割法(Global Thresholding)和局部門檻值分割法(localthresholding)。

全局門檻值分割法會基于整幅圖像的像素統計資訊,選取固定的灰階門檻值。它适用于每一幅待處理圖像中光照都均勻分布,或多幅圖像有一緻照明的場合;

局部門檻值分割法則基于鄰域内像素的統計資訊,為每個像素計算門檻值。它對光線呈傾斜梯度分布或待測目标有陰影的情況特别有效,而在這類情況下全局門檻值分割法通常會失效。

全局門檻值分割法包括手動門檻值分割(manual thresholding)和自動門檻值分割

(automatic thresholding)兩大類。手動門檻值分割方法需要人為确定門檻值;自動門檻值分割方法基于圖像的灰階直方圖來确定灰階門檻值。

手動門檻值分割法的門檻值選取是關鍵。若門檻值過高,會有過多的目标像素點被誤分為背景,門檻值選得過低,則會出現相反的情況。

常見的方法有P分法(P-tile)和直方圖谷底法。P分法是由Doyle于1962年提出的,該方法根據先驗機率來設定門檻值,使目标或背景的像素比例等于先驗機率。直方圖谷底法選取圖像直方圖各峰之間的谷底作為圖像分割門檻值。下圖顯示了基于圖像灰階直方圖選擇單個門檻值或多個門檻值的例子:

LabVIEW圖像分割算法(基礎篇—6)

Nl Vision使用IMAQ Threshold實作手動單灰階區間的圖像分割。它和其他圖像分割函數都位于LabVIEW的視覺與運動→lmage Processing→Processing圖像處理函數選闆中,如下圖所示:

LabVIEW圖像分割算法(基礎篇—6)

函數說明及使用可參見幫助手冊:

LabVIEW圖像分割算法(基礎篇—6)

通過使用單個灰階區間對硬币圖像進行分割的示例,了解手動門檻值分割實作方法,程式設計思路如下所示:

程式一開始先将原圖coins.jpg讀入記憶體,并使用圖像顯示控件顯示;

此後,程式使用IMAQ GetlmageSize擷取圖像的尺寸,并為圖像處理配置設定緩沖,以友善圖像分割算法使用;

以上準備工作完成後,程式便進入實作圖像門檻值分割功能的While循環;

While循環中代表門檻值分割方法的變量Type、代表局部分割方法配置參數的變量Local、代表自動門檻值分割方法配置參數的變量Automatic、代表手動門檻值分割方法配置參數的變量Manual以及代表聚類分割方法配置參數的變量Number of Class被捆綁為簇,經由寄存器與其前一次的值進行比較;

若簇中任一參數發生變化,或者當循環執行第一步時,條件結構True分支中的圖像分割代碼就會被執行;

具體執行何種圖像分割代碼,由Type參數控制。Type參數對應于前面闆上的Tab控件,當使用者選擇Manual頁籤時,程式就執行Manual分支中的IMAQ Threshold,完成對圖像的人工分割;

預設情況下IMAQ Threshold使用1替換所有指定灰階範圍内的像素值,用0替換所有灰階範圍外的像素值,以生成二值圖像。也可通過設定參數,使灰階區間内的像素保持原值不變,而隻把灰階範圍之外的背景像素值更改為0;

當使用者在前面闆上更改了任何與手動分割相關的參數時,While循環将更新圖像分割的結果。

程式設計如下所示:

LabVIEW圖像分割算法(基礎篇—6)

程式效果如下所示:

LabVIEW圖像分割算法(基礎篇—6)

手動門檻值分割方法需要人為确定門檻值。由于所標明的門檻值不僅作用于整幅圖像,還作用于所有使用該方法處理的圖像,是以它适用于可采集單幅光照分布比較均勻的圖像,且能擷取多幅圖像之間光照相對一緻的機器視覺系統。為了能消除人工設定門檻值的主觀性,使機器視覺系統能适應不同圖像間照明不一緻的情況,需要研究各種自動門檻值分割方法。

項目資源下載下傳請參見:

https://download.csdn.net/download/m0_38106923/19597018

自動門檻值分割方法基于圖像的灰階直方圖來确定灰階門檻值。由于這類算法會基于每幅圖像的直方圖來計算适合該圖像的分割門檻值,是以即使機器視覺系統采集的各個圖像之間有不同的光照,它們也能正常工作。

Nl Vision支援5種自動門檻值分割方法,包括:聚類法(Clustering)、最大類間方差法(Inter-Class Variance)、最大嫡法(Entropy) 、均勻性度量法(Metric)和矩保持法(Moments Preserving)。

其中聚類法是唯一支援将圖像分割為兩類以上像素點的分割方法,其餘4種方法都是針對較為嚴格的二值分割情況而設計的。

聚類法是一種按照圖像像素灰階特征的接近程度分割成多個類的疊代分割方法。常見的聚類算法有K均值(K-Mean)和模糊C均值(FuzzyCMean)算法。

K均值算法是MacQueen于1967年提出的一種解決聚類問題的經典算法。它先任選K個初始值,将它們作為類中心,并根據這些值将其餘像素分别歸入離它最近的類中。此後再計算新類的均值重新作為新類的中心,并疊代執行前面的分類步驟,直到新舊類均值之差小于某門檻值或完全相同為止。其基本算法如下:

1、從樣本集中任意選擇K個對象作為初始聚類中心;

2、對于剩餘樣本,根據它們與這些聚類中心的距離(絕對偏差或歐氏距離),将它們配置設定到與其最近的類(由聚類中心代表);

3、計算每個新類中像素的均值作為新的聚類中心;

4、重複第2和3步,直至相應的新舊類聚類中心之差小于某一門檻值或完全相同為止。

K均值算法假定每個樣本隻能屬于某一類,而且若用于圖像分割,在圖像中的某一類或幾類像素較少時,它很難保留像素較多的類别中的圖像細節。

模糊C均值算法是在模糊數學基礎上對K均值算法的推廣,它通過最優化一個模糊目标函數實作聚類。模糊C均值算法不像K均值算法那樣認為每個點隻能屬于某一類,而是計算每個點對各類的隸屬度,用隸屬度更好地描述邊緣像素亦此亦彼的特點。是以,模糊C均值算法較适合圖像中存在不确定性和模糊性的情況。

若僅僅要将圖像分為目标和背景兩類,可以使用疊代法對像素進行聚類,其算法如下:

1、選擇一個初始門檻值T(通常取圖像的平均灰階);

2、用T将像素分割為灰階小于T的G1和大于T的G2兩類,并計算G1和G2類中像素的平均灰階值m1和m2;

3、重新設定門檻值T=(m1+m2)/2。

4、重複步驟2和3,直到連續疊代中的T值之差小于某一門檻值或完全相同為止。

Nl Vision使用IMAQ AutoBThreshold和IMAQ AutoMThreshold實作疊代法和多個目标的聚類分割法。這兩個VI位于LabVIEW的視覺與運動→lmage Processing→Processing圖像處理函數選闆中,見博文1.1.1、手動門檻值分割内容部分所示。

通過一個案例,了解使用IMAQ AutoBThreshold實作自動疊代聚類法的方法。

在程式中使用時,隻需根據情況通過參數Method選擇需要的方法即可,程式設計可見1.1.1、手動門檻值分割内容部分所示。

使用疊代聚類法自動将圖像coins.jpg分割為目标和背景圖像的執行個體。程式繼續沿用了1.1.1、手動門檻值分割中執行個體的結構,運作時選擇自動門檻值分類頁籤Automatic中的疊代聚類法Cluster并設定目标類型Object Type為亮背景中的暗目标。觀察程式運作結果可發現,目标與背景被清晰地分割開來,如下所示:

LabVIEW圖像分割算法(基礎篇—6)

局部門檻值分割法(Local Thresholding)又稱為局部自适應門檻值分割法 (LocallyAdaptive Thresholding)或可變門檻值處理。它在像素的某一鄰域内以一個或多個指定像素的特性(如灰階範圍、方差、均值或标準差)為圖像中的每一點計算門檻值。由于要周遊所有圖像中的像素,是以鄰域的大小對該算法的執行速度會有較大影響。一般來說,鄰域的尺寸略大于要分割的最小目标即可。

全局門檻值分割法的一個缺點是其在圖像和背景灰階差異較明顯時容易忽略細節。Niblack二值化算法用于解決此類問題,這種算法的基本思想是對每一個像素點f(i,j),計算其鄰域内像素點的均值m (i,j)和方差2(i, j),然後根據以下邏輯對圖像進行分割:

1、每個像素計算T(i, j) =m (i, j) +k 2 (i, j),其中k為偏差系數(deviationfactor),通常取0.2;

2、若f (i, j) > T (i, j) ,則将該像素歸為目标,否則歸為背景。

Nl Vision使用IMAQ LocalThreshold實作局部門檻值分割法,它位于LabVIEW的視覺與運動→lmage Processing→Processing圖像處理函數選闆中,見博文1.1.1、手動門檻值分割内容部分所示。

IMAQ LocalThreshold為了增強算法的實時性和魯棒性,提供了兩種優化算法:一是使用最大類間方差法的背景糾正法,另一種是Niblack二值化算法(Niblack Algorithm)。

通過一個案例,了解使用Niblack二值化算法對圖像進行分割的方法。

程式設計可見1.1.1、手動門檻值分割内容部分所示,運作時選擇局部門檻值分割頁籤local中的Niblack算法,并設定目标類型Object Type為亮背景中的暗目标。Niblack算法的偏離參數被設定為1,視窗大小被設定為64×64(略大于字元)。

觀察程式運作結果可以發現,雖然圖像的亮度分布不均(中間部分的亮度高于周圍亮度),但是局部門檻值分割算法也能較好地對圖像進行分割,效果如下所示:

LabVIEW圖像分割算法(基礎篇—6)

在使用這些圖像分割方法時,常遇到背景和目标之間分界不清的問題。這種情況下,可以先對圖像進行預處理,再進行分割。常用的預處理方法包括灰階變換(LUT)、直方圖均衡、空域或頻域濾波等。使用線灰階工具觀察一條跨邊緣的線段上的灰階分布,也有助于選擇合适的門檻值。此外,形态學處理可以對分割後的二值圖像進行糾正,以濾除門檻值分割過程的錯誤選擇。

下表對上述各種灰階門檻值方法進行了彙總和比較。

LabVIEW圖像分割算法(基礎篇—6)

全局自動門檻值分割的幾種方法的比較

若要對彩色圖像進行門檻值化,必須對各個顔色分量設定門檻值。隻有各顔色分量都滿足門檻值條件的像素點才能被置為1,否則被置為0。

例如,若要對RGB彩色圖像進行門檻值化,可以确定要分析目标的紅綠藍各顔色分量的範圍,然後再為各顔色分量指定門檻值範圍。HSL彩色圖像的分割很有特點,由于亮度分量(Luminance)代表圖像的灰階,色度(Hue)包含圖像的主要顔色資訊,而Saturation分量代表顔色的飽和度,是以可以選擇包含所有亮度值的門檻值範圍,使圖像分割獨立于圖像的灰階資訊,而僅僅根據需要選擇不同的色度和飽和度門檻值區間即可。

NI Vision使用IMAQ ColorThreshold實作彩色圖像的門檻值分割,它位于LabVIEW的視覺與運動→lmage Processing→Color Processing彩色圖像處理函數選闆中,如下所示:

LabVIEW圖像分割算法(基礎篇—6)
LabVIEW圖像分割算法(基礎篇—6)

圖像中目标的邊緣是一組相連的像素,它是圖像中目标的基本特征之一。這些像素位于灰階不連續(間斷或跳變)的兩個區域的邊界上。由于各種噪聲的影響,機器視覺系統采集到的圖像中,目标邊緣處像素的灰階變化并不都是理想的階躍式跳變,而通常遵循漸進的變化方式。是以,可以用下圖所示的模型來表示圖像中目标的邊緣。

LabVIEW圖像分割算法(基礎篇—6)

邊緣的模型

邊緣模型中常用的參數包括邊緣強度(edge strength)、邊緣長度(edge length)、邊緣位置(edge location)和邊緣極性(edge polarity),具體所示如下所示:

邊緣強度又稱為邊緣對比度,指可識别邊緣相對于背景的最小灰階差異。邊緣強度的大小因光照條件和目标的灰階特性不同而異。若整個場景中光照較弱,則邊緣強度較低。若圖像中某一目标相對于其他目标亮度很高,則較低亮度目标的邊緣強度會被壓低。

邊緣長度是指能確定所設定邊緣強度出現的距離,它由邊緣像素灰階的變化率決定。灰階變化較緩慢的邊緣,其邊緣長度應較大。

邊緣位置是指代表邊緣的像素在圖像中的位置坐标。

邊緣極性代表邊緣為上升沿還是下降沿,它通常用于指明搜尋算法的方向。當邊緣處的灰階為遞增變化時,其極性為正,反之為負。

邊緣分割法基于目标的邊緣特征,先使用邊緣檢測算法檢測圖像中目标的邊緣(如點、線、目标輪廓等),然後再利用像素點的空間關系,根據設定的條件将邊緣連接配接為檢測目标的封閉輪廓(contour)。得到的目标輪廓可作為各區域的邊界,用于圖像分割。

從算法實作的角度來看,可以基于提取到的目标輪廓點建構ROI資料結構,再将ROI轉化為遮罩圖像。此後,對遮罩圖像進行填充,再與圖像進行遮罩運算,即可輕而易舉地将圖像劃分為不同區域。下圖顯示了使用點、線及目标邊緣将圖像分割為不同區域的示意圖。

LabVIEW圖像分割算法(基礎篇—6)

邊緣檢測算法主要是對圖像灰階變化進行度量,提取圖像中不連續的灰階特征,以此定位邊緣點。現有的圖像處理書籍和資料中多數用相當多的篇幅介紹邊緣檢測和圖像分割。然而若考慮實時性和魯棒性,這些算法并不見得都适用于機器視覺系統。

傳統的點檢測技術常基于以下模闆(以3×3模闆為例,但不失一般性)運算進行判别∶

LabVIEW圖像分割算法(基礎篇—6)

如果設定一個非負的灰階門檻值T,并從圖像(或ROI)的左上角開始逐點從左到右、從上到下進行掃描,且對于每個像素,都以其為模闆中心進行模闆運算,則結果超出門限時,即可認為檢測到一個孤立點,亦即有下式成立∶

LabVIEW圖像分割算法(基礎篇—6)

傳統點檢測方法認為圖像中孤立點與其鄰域内像素的灰階(即背景)有較大差異,是以通常使用系數之和為0的模闆運算獲得中心像素的灰階變化,并根據該變化和門檻值T來決定是否為孤立點。

LabVIEW圖像分割算法(基礎篇—6)

雖然傳統點檢測方法對孤立點的檢測較為有效,但它不能判斷檢測到的孤立點是否邊緣點。此外,由于傳統點檢測方法計算量大,實時性較差,是以有必要尋找更适合機器視覺系統的方法。

本文講解一種常用的點檢測方法,通過限定搜尋區域和搜尋數量來提高檢測的實時性。這種方法最簡單直接的應用就是基于一維像素序列上的灰階變化,沿指定方向尋找上升邊緣和下降邊緣,來進行各種判斷。而一維像素序列可基于圖像中的任意路徑獲得,如線段、矩形、旋轉矩形、同心圓弧、橢圓、多邊形或任意形狀。

下圖顯示了這種從像素序列一端開始搜尋上升和下降邊緣的簡易方法。對于每個像素點,它都會通過比較該點的像素灰階與邊緣門檻值來判斷其是否為邊緣點。為了盡可能消除噪聲幹擾,在判定上升和下降邊緣時,可在理想門檻值的基礎上設定一個裕量(hysteresis),當搜尋到第一個大于或等于“理想門檻值加上裕量”的像素時,就将該點指定為沿該線搜尋到的上升邊緣。緊接着,該方法将繼續向前尋找第一個小于或等于“理想門檻值減去裕量"的像素,找到時就将該點指定為下降邊緣。如此循環往複,直到找到所有上升和下降邊緣為止。

LabVIEW圖像分割算法(基礎篇—6)

上升和下降邊緣的檢測

在實際工作中,由于圖像中的目标可能為暗目标,是以找到的第一個邊緣點也可能為下降邊緣。此種情況下,找到第一個邊緣以後的搜尋方法與上述過程類似。

多數情況下,基于圖像自身的像素分辨率找到的邊緣點位置就能滿足各種機器視覺檢測的需求。但是在某些特殊情況下,由于傳感器尺寸或成本方面的限制,即使機器視覺系統的鏡頭與相機傳感器比對且光照條件較好,采集到的圖像也很難滿足對最小分辨率的需求。這種情況下,可以使用亞像素(subpixel)邊緣定位法來尋找滿足系統分辨率要求的邊緣點位置。

亞像素是當實體上已經無法在相鄰像素間增加更多像素時,使用各種線性、抛物線或多次插值算法,在相鄰像素之間插入多個“虛拟像素"以提高測量精度的手段。通常情況下,亞像素邊緣點存在于圖像中逐漸發生過渡變化的區域,可以利用多項式插值等多種方法獲得邊緣點的亞像素位置,以提高邊緣點檢測的精度。例如,可按照以下流程使用抛物線插值法(parabolic interpolation)進行亞像素邊緣定位,如下所示:

LabVIEW圖像分割算法(基礎篇—6)

1、基于圖像像素沿某一線段尋找邊緣點;

2、選擇檢測到的邊緣像素點(xo,yo)及與其左右相鄰的兩個點(x-1,y-1)和(x1,y1)作為抛物線插值的3個點;

3、根據已知的3個點計算抛物線方程y=ax2+bx+c的系數a和b;

4、由于抛物線方程在x=-b*2a處有極值,是以可選擇該處為相對于最近像素點的亞像素邊緣。

雖然基于亞像素定位法可以提高測量精度,但是由于計算量增加,程式的實時性也會相對降低。是以在實際中總是需要在速度與精度之間進行取舍。

NI Vision使用位于LabVIEW的視覺與運動→Machine Vision→Caliper函數選闆中的IMAQ SimpleEdge實作上述沿一維像素序列檢測邊緣點的方法,如下所示:

LabVIEW圖像分割算法(基礎篇—6)
LabVIEW圖像分割算法(基礎篇—6)

通過使用IMAQ Simple Edge檢測零部件邊緣點的執行個體,了解其使用方法,程式設計思路如下所示:

程式開始先為圖像處理配置設定記憶體并指定了一條線段作為圖像的初始ROI;

程式在執行第一個循環時,先由IMAQ Clear Overlap清除圖像中的疊加圖層,然後由IMAQ ROIProfile傳回初始ROI所覆寫的一維像素序列,并繪制該ROI上的像素灰階變化曲線;

IMAQ Simple Edge可以基于事先設定的邊緣灰階門檻值和抗噪裕量,傳回像素序列中的邊緣點數量和位置。必要時也可以通過設定亞像素精度參數Sub-Pixel Accuracy為True來提高算法的檢測精度;

Overlay Points with User Specified Size.vi可以按照檢測到的邊緣位置,以指定的顔色和尺寸在圖像中标記出它們的位置;

當循環繼續執行時,程式将檢查控制算法執行的參數Process或Threshold Parameters簇是否被改變,或者圖像控件中是否有ROl繪制事件發生;

當任何一個變化發生時,分支結構中的代碼将被再次執行;

程式直到使用者單擊Stop按鈕退出并釋放記憶體為止。

LabVIEW圖像分割算法(基礎篇—6)

程式還顯示了使用者繪制矩形ROI時,程式檢測所有該矩形ROI上的邊緣點的情況,注意,在此過程中使用者設定了相對門檻值方式來檢測邊緣,效果如下所示:

LabVIEW圖像分割算法(基礎篇—6)
https://download.csdn.net/download/m0_38106923/19620902

傳統的線邊緣檢測技術常基于以下各種方向模闆運算進行判别:

LabVIEW圖像分割算法(基礎篇—6)

本文提出一種适合機器視覺系統的直線檢測方法,思路如下所示:

1、将搜尋路徑從一維擴充至二維。不是沿某一條搜尋路徑搜尋邊緣,而是沿圖像中多條搜尋路徑進行邊緣檢測;

2、基于檢測到的邊緣點,使用曲線拟合的方法确定目标邊緣。

理論上來講,該方法适合任意形式的搜尋路徑和可能拟合的曲線。然而,無論對于搜尋路徑還是最終需要拟合的邊緣線來說,直線、圓(圓弧)和橢圓最為實用,是以以下将主要介紹基于這幾種路徑的方法。

沿矩形ROI區域内多條直線搜尋邊緣點的矩形耙(Rectangle Rake)是最常用的工具之一。矩形耙工具因其形狀像耙子而得名,如下圖所示。矩形耙基于矩形ROI内部平行于矩形ROI的多條線搜尋邊緣點。對于水準放置的或旋轉過的水準矩形ROI,可以沿這些線從左到右或從右到左進行搜尋。如果需要從上到下或從下到上搜尋邊緣,則可使用垂直放置或旋轉過的垂直矩形ROI。與一維邊緣點檢測方法類似,矩形耙可以搜尋各條搜尋線上的上升邊緣、下降邊緣、首尾或所有邊緣點,以及邊緣強度最大的最佳邊緣點。

LabVIEW圖像分割算法(基礎篇—6)

矩形耙

同心耙(Concentric Rake)與矩形耙工作原理類似,它基于圓形或同心圓弧ROI區域内的多條線進行搜尋,這些線與圓或圓弧同心。使用同心耙搜尋時,既可沿順時針方向搜尋,也可沿逆時針方向搜尋。如下所示:

LabVIEW圖像分割算法(基礎篇—6)

同心耙

輪輻(Spoke)工具因其形狀酷似自行車的輪輻而得名,它也基于圓形或同心圓弧ROI區域進行搜尋,但與同心耙工具不同,其搜尋線是一組從圓心到外邊緣的輻射狀線條。使用輪輻工具時,既可從圓心向外搜尋,也可從外部向圓心方向搜尋。如下所示:

LabVIEW圖像分割算法(基礎篇—6)

輪輻搜尋

Nl Vision使用位于LabVIEW的視覺與運動→Machine Vision→Caliper函數選闆中的IMAQ Rake 3、IMAQ Concentric Rake 3和IMAQ Spoke 4實作矩形耙、同心耙和輪輻邊緣點檢測算法,如下圖所示:

LabVIEW圖像分割算法(基礎篇—6)
LabVIEW圖像分割算法(基礎篇—6)

Nl Vision使用位于LabVIEW的視覺與運動→Machine Vision→Analytic Geometry解析幾何函數選闆中的IMAQ Fit Line、IMAQ Fit Circle 2和IMAQ FitEllipse 2實作基于離散特征資料點的直線、圓或橢圓的拟合,如下圖所示。這些VI所使用的曲線拟合算法是在傳統曲線拟合方法的基礎上進行優化後得到的。

LabVIEW圖像分割算法(基礎篇—6)
LabVIEW圖像分割算法(基礎篇—6)

工業中常需要對“噴霧"的角度進行測量,例如在生産汽車噴油嘴時,就可以通過檢測其噴霧的角度來判斷産品的品質。當噴油嘴無噴霧或噴霧的邊緣夾角達不到某個指定的角度時,即可認為産品不合格。為了計算噴霧角度,需要先找到噴霧的兩條邊緣線。為此,可以先使用矩形耙或同心耙,獲得噴霧兩個邊緣上的兩組邊緣點,再使用直線拟合得到兩條邊緣線。

通過使用同心耙和直線拟合檢測工業噴霧裝置邊緣的執行個體,了解其使用方法,程式設計思路如下所示:

程式将輪詢的輸入量全部捆綁成簇,一開始先進行一系列準備工作,包括讀入圖像,為圖像處理配置設定記憶體以及建立一個起始角度為180°,終止角為360°同心圓弧形的ROI;

随後,程式清除圖像中的疊加圖層,并使用同心耙函數IMAQ Concentric Rake 3沿逆時針方向(Search Direction的值為0)檢測各條線上的首尾邊緣點。步長Step Size被設定為3個像素,這意味着同心耙中每隔3個像素就有一個用于搜尋邊緣的同心圓弧;

檢測到的邊緣點由Sub-OverlayPointswithSpecified Zize.vi以紅色在圖像上标記了出來;

最後程式在使用IMAQ Fit Line分别将檢測到的兩組邊緣點拟合成兩條直線後,用IMAQ

Overlay Line以黃色顯示在圖像上。

LabVIEW圖像分割算法(基礎篇—6)

程式還允許人工在圖像中繪制矩形耙或同心耙或調整各類參數,以觀察直線檢測的效果,效果如下所示:

LabVIEW圖像分割算法(基礎篇—6)

一旦獲得兩條噴霧的邊緣線,就能很容易通過以下方法計算噴霧的夾角。值得一提的是,NI Vision為圖像夾角測量提供了專門的函數,開發人員無須關注這些計算細節就能直接獲得穩定的測量結果。

LabVIEW圖像分割算法(基礎篇—6)

計算平面上兩條直線的夾角

https://download.csdn.net/download/m0_38106923/19645158

輪廓(contour)是指可以在圖像中勾勒出目标外形(shape)的一組互相連接配接的曲線(curve)。這些曲線由一系列目标物的邊緣點組成。由曲線構成的輪廓,通常會勾勒出被測目标的外形。是以,基于目标的輪廓可以輕而易舉地實作圖像分割。

在Nl Vision中,為了基于目标物的輪廓對圖像進行分割,可以先将提取到的輪廓資訊轉換為ROI,再由ROI獲得遮罩圖像,此後經圖像的遮罩運算即可将圖像劃分為不同區域。下圖顯示了基于目标輪廓的圖像分割過程。

LabVIEW圖像分割算法(基礎篇—6)

基于目标輪廓的圖像分割過程

目标的輪廓提取可分為搜尋曲線種子(Search Curve Seed)、追蹤曲線(Tracingcurve)、曲線連接配接(Curve Connection)和輪廓選擇(Contour Selection)幾個步驟。

其中搜尋曲線種子和追蹤曲線的過程又統稱為曲線提取(curve Extraction)過程。曲線的種子點(Seed Point)是曲線追蹤過程的起始點,合格的曲線種子點應滿足兩個條件,一是其邊緣強度應大于設定的門檻值,二是它不能屬于已知曲線上的像素點。若用Pi,代表(i,j)處像素的灰階,則(i,j)處的邊緣強度Ci,可由以下公式計算:

LabVIEW圖像分割算法(基礎篇—6)

Nl Vision使用IMAQ Extract Contour封裝了包括搜尋曲線種子、追蹤曲線、曲線連接配接和輪廓選擇幾個步驟在内的所有目标輪廓提取過程,它位于LabVIEW的視覺與運動→Machine Vision→Contour Analysis函數選闆中。

LabVIEW圖像分割算法(基礎篇—6)
LabVIEW圖像分割算法(基礎篇—6)

IMAQ Extract Contour可工作在正常模式(Normal)或均勻模式(Uniform Regions)兩種模式下。當其工作在均勻模式下時,VI會假設圖像中目标區域和背景區域的像素值分别為一緻的灰階值,這有助于提高VI的執行效率。

通過使用IMAQ Extract Contour提取零部件工件輪廓的執行個體,了解其使用方法,程式設計思路如下所示:

程式一開始先将工件圖像Clamp.png讀入記憶體,并指定圖像中的ROI區域;

進入主循環後,程式監測曲線提取過程的參數及圖像顯示控件中繪圖事件(Draw),一旦有變化,程式就調用IMAQ Extract Contour從ROI中提取目标的輪廓,并由IMAQ Overlay Contour在圖像中标記出最終選擇的目标輪廓。

LabVIEW圖像分割算法(基礎篇—6)

程式還顯示了從左到右搜尋ROI時所提取到的最接近ROI左側的目标輪廓圖像,效果如下所示:

LabVIEW圖像分割算法(基礎篇—6)
https://download.csdn.net/download/m0_38106923/19645651

機器視覺系統基于分割後的圖像資訊來提取檢測目标的特征,因而圖像分割的品質直接決定機器能否快速準确地基于目标特征進行決策。門檻值分割和邊緣分割可以滿足大多數機器視覺應用的要求,但是當所采集的圖像品質較差,目标和背景的灰階差别不大或視場中被測目标有交疊時,其分割效果并不理想。在這種情況下就需要使用圖像的區域分割法和形态學(Morphology)分割法。

形态學是用來研究所學生物形态結構和功能結構的學科,包括生物體的外觀、結構、圖案以及生物體的骨骼、器官内部功能結構等。它最早由歌德在其生物學研究中倡導,強調把生命形式當作有機的系統看待,反對隻注重對生物體器官的分析。

圖像的數學形态學處理既可作用于經門檻值化處理得到的二值圖像,也可用于處理灰階圖像。灰階圖像的形态學處理主要通過将像素灰階值變更為其鄰域内像素的灰階最大或最小值來實作灰階圖像的增強,包括降噪、背景矯正和平滑漸變的灰階特征等。它也可以通過擴充或收縮目标的亮度區域來改變目标的形狀,增強目标邊界的對比度。二值圖像的形态學處理則主要用來去除經門檻值化處理得到的二值圖像中不需要的資訊,如噪聲互相重疊的目标邊界等。當然,它也可以擴充或收縮目标邊界來改變其形狀。

圖像的數學形态學處理包含多種計算形式,其中腐蝕(Erosion)、膨脹(Dilation)和擊中—擊不中(Hit-Miss)是3種最基本的形态學運算形式。通過對它們進行組合,可以進一步獲得更多其他組合形式的運算,如開運算(Opening)和閉運算(Closing)、内形态梯度(Inner Gradient)和外形态梯度(Outer Gradient)運算、細化(Thinning)和加粗(Thickening)運算,适當開(Proper-Opening)和适當閉(Proper-Closing)運算以及自動中值(Auto-median)運算等。圖像形态學處理運算彙總如下圖所示:

LabVIEW圖像分割算法(基礎篇—6)

圖像的形态學處理常表現為一種像素的鄰域運算形式,它使用具有一定形态的結構元素與圖像進行形态學運算,并進而研究圖像各部分的關系,以尋求各種問題的解決方案。運算過程中,以下因素直接決定形态學處理的結果:

1、結構元素的尺寸(Structure Element Size);

2、結構元素的數值(Structure Element Value);

3、待處理圖像的像素邊框形狀(Pixel Frame Shape);

4、形态學處理算法的類型。

其中,前3項直接決定哪些像素将參與形态學處理運算,而形态學算法的類型則決定了如何基于標明的像素進行鄰域計算。

結構元素的尺寸和數值對形态學處理的影響如下圖所示。結構元素通常為行、列數相同的奇數矩陣形式,它将中心元素與圖像中待處理的像素對齊,依據其尺寸的大小在待處理像素鄰域内劃定了形态學運算的範圍。也就是說,運算時僅考慮被結構元素覆寫的圖像像素。程式開發過程中,結構元素可以用二維數組描述,常見的尺寸有3×3、5×5和7×7等幾種。若指定的數組行、列數不同,則程式應能自動截取最接近的奇數矩陣。結構元素的尺寸越大,形态學處理的計算量就越大,相應的處理速度就越低。

LabVIEW圖像分割算法(基礎篇—6)

形态學處理的算法決定了使用何種方法基于所選出的像素獲得結構元素中心所覆寫像素的新值。

腐蝕、膨脹和擊中—擊不中是3種最基本的形态學算法。若用Po代表中心像素,用Pi代表基于像素邊框和結構元素選出的像素,則3種算法的計算方法、用途及适用的圖像類型如下表所示:

LabVIEW圖像分割算法(基礎篇—6)

腐蝕和膨脹運算既可作用于灰階圖像,也可作用于二值圖像,但因圖像類型不同,其作用也有差異。二值腐蝕運算常用來消除圖像中相對背景亮度較高的孤立像素點,或根據所選結構元素特征,細化目标的輪廓。

計算時,僅當所有Pi值均為1時,二值腐蝕運算才将Po的值置為1。也就是說,若有任一個Pi值為0,二值腐蝕運算就将Po的值置為0。二值膨脹運算則常用于消除圖像中孤立于顆粒内部的孔洞(即被灰階較高的像素所包圍的區域),或根據所選結構元素特征擴充目标的輪廓。

計算時,若有任一個Pi值為1,二值膨脹運算就将Po的值置為1。從邏輯運算的角度來看,二值腐蝕相當于對Pi求與運算,二值膨脹相當于對Pi求或運算。若将它們作用于同一圖像,二值膨脹運算則等效于對圖像的背景進行二值腐蝕運算,是以它與二值腐蝕運算的效果剛好相反。

Nl Vision将上述的基本形态學處理算法封裝在IMAQ Morphology和IMAQ GrayMorphology中,前者用于二值圖像,後者用于灰階圖像。它們位于LabVIEW的視覺與運動→Image Processing→Morphology函數選闆中,如下圖所示:

LabVIEW圖像分割算法(基礎篇—6)
LabVIEW圖像分割算法(基礎篇—6)

通過使用IMAQ Morphology對電路闆圖像進行連續兩次腐蝕操作,濾除圖像中間部位斑點噪聲的執行個體,了解其使用方法,程式設計思路如下:

程式在為圖像處理配置設定記憶體後,先對讀入的灰階圖像進行了自動門檻值化處理,然後進入主循環;

主循環監測任何與形态學處理相關的參數變化,若使用者更改任一參數,則分支結構中的IMAQ Morphology就會被執行,并将形态學處理的結果顯示在圖像顯示控件中。

LabVIEW圖像分割算法(基礎篇—6)

由于處理結果為二值圖像,是以應通過圖像顯示控件的右鍵菜單将其顯示調色闆設定為Binary以擷取最佳顯示效果,如下所示:

LabVIEW圖像分割算法(基礎篇—6)
https://download.csdn.net/download/m0_38106923/19673519

顆粒是指圖像中互相連通的一組非0或灰階較高的像素所構成的區域。判斷一個像素是否屬于某一顆粒,要看它是否與該顆粒之間具有連通性(Connectivity)。例如,填充區域中的孔洞、移除與圖像邊界粘連的區域、濾除不需要的區域、分離重疊區域、搜尋區域中的凸殼(Convex Hull)等。經過這些算法處理後的圖像更适于進行基于顆粒的定量分析、提取目标的簡易模型或進行目辨別别。

數字圖像中與像素鄰接(Adjoining)的像素有8個,但是判斷鄰接的像素是否屬于同一顆粒,就要依據某種連通性判斷準則。

常見的連通性判斷準則有4連通(Connectivity-4)和8連通(Connectivity-8)兩種。

4連通準則認為,若像素在水準或垂直方向上與另一像素鄰接,則這兩像素屬于同一顆粒;

8連通準則的判斷條件則相對寬松,隻要像素在水準、垂直或對角線方向上與另像素鄰接,則就認為它們屬于同一顆粒。

若像素與其水準或垂直方向上鄰接像素的距離為D,則4連通認為像素與距其為D的鄰接像素屬于同一顆粒,而8連通則認為距離像素為D或D的像素與其屬于同一顆粒。下圖顯示了4連通和8連通的結構,以及分别使用它們對同一圖像中的像素進行判斷時所得到的不同結果。

LabVIEW圖像分割算法(基礎篇—6)

确定了連通性判斷準則,就可以将二值圖像中每個連通區域标記(Label)為能被獨立識别的顆粒,以友善圖像的分割和處理。

圖像标記過程搜尋二值圖像中互相連通的各組像素(即顆粒),并将屬于同一顆粒的像素值全部更改為某一固定的标記值,将二值圖像的背景标記為0。考慮标記值等效于像素的灰階,可以使用8位或16位對标記值編碼,這樣就能直接将标記後的圖像作為8位或16位灰階圖像進行儲存。

由此可知,圖像标記過程的輸入圖像為二值圖像,但其輸出卻是含有為每個顆粒都設定灰階标記值的灰階圖像。其中灰階标記值的數量等于圖像中顆粒的數量再加上用于背景的灰階标記值0。

圖像标記過程要解決的另一問題是根據連通性判斷準則尋找能快速确定各個獨立顆粒的搜尋算法。NI Vision将圖像标記過程封裝在位于LabVIEW的視覺與運動→lmage Processing→Processing函數選闆的IMAQ Label中,如下圖所示:

LabVIEW圖像分割算法(基礎篇—6)
LabVIEW圖像分割算法(基礎篇—6)

但是NI的相關文檔中并未說明該函數具體使用了何種搜尋算法。圖像标記最為常見的搜尋算法如下:

1、逐行掃描像素,找到第一個非0像素作為種子點,為其設定專門的标記值;

2、從種子點開始按照連通性判斷準則沿各個方向搜尋與其連通的像素,并将其置為與種子點相同的标記值;

3、以各個連通的像素點為新的起點,沿各個方向搜尋與其連通的未标記像素,并将其置為與起點相同的标記值。不斷重複該過程,直到所有分支上的像素都被标記為止;

4、重新掃描圖像中未被标記的點,将其作為種子點,重複步驟1到步驟3,直到所有像素均被标記為止。

雖然上述搜尋算法比較直覺,但其效率并不高,是以近幾年湧現了大量的快速标記算法。例如,下述基于行程的标記方法就更快一些。

1、從第一行開始掃描圖像,把其中連續的由非0像素組成的序列組成一個塊,為其按遞增的順序設定标記值;

2、從第二行開始逐行掃描所有行裡的塊。如果它與前一行中的所有塊都沒有連通,則給它一個新的标記值;如果它僅與上一行中一個塊連通,則将上一行的那個塊的标記值賦給它;如果它與上一行兩個以上的塊有連通,則将目前和塊及其相連的塊标号均設定為上一行中塊的最小标号;

3、重複步驟2,直到所有像素均被标記為止。

通過一個基于标記值從圖像中分割出面積最大的标記區域的實際例子,了解其使用,程式設計思路如下:

程式一開始先為源圖像和标記圖像配置設定緩沖,然後執行對圖像進行标記的LabelGraylmg.vi,它會先使用IMAQ Threshold函數對輸入的灰階圖像進行門檻值化處理;

用IMAQ Morphology對門檻值化得到的二值圖像進行增強處理,然後再對二值圖像中的顆粒進行标記;

IMAQ Quantify基于輸入的遮罩圖像對灰階區域進行統計,由于所分析的圖像和遮罩圖像均為LabelGraylmg.vi輸出的标記圖像,是以IMAQ Quantify輸出的針對各顆粒的區域報告數組(Region Reports)簇元素中,灰階均值Mean Value就應恰好為各顆粒的标記值;

MaxAreaIndex.vi基于Region Reports數組元素簇中的顆粒面積Area (Pixel)字段,尋找所有标記的顆粒中面積最大的一個,并傳回其在數組中的索引;

使用該索引,就能從數組中得到面積最大的顆粒所用的标記值,而函數IMAQ LabelToROl就具備将一個或多個标記值(封裝在數組中)對應的顆粒轉換為ROl的能力。

LabVIEW圖像分割算法(基礎篇—6)

效果如下所示:

LabVIEW圖像分割算法(基礎篇—6)
https://download.csdn.net/download/m0_38106923/19689843

區域分割是将圖像按照相似性準則分成不同區域的過程,主要包括:基于形态學的分水嶺分割法和區域生長、區域分裂合方法等。

分水嶺法是基于拓撲理論的數學形态學的分割方法。其基本思想是:把圖像中的顆粒看作測地學上的盆地,其中每一像素的灰階值表示該點的深度,每一個局部極小值及其影響區域稱為集水盆地(Catchment Basin),而集水盆地的邊界則形成分水嶺。下圖用一個簡單的圖像來說明分水嶺分割法的原理。它首先計算圖像的距離場,用像素到顆粒邊界的最近距離作為它們的标記值。其次,它将距離場看作地形圖,顆粒被看作盆地,而像素的标記值則被看作盆地各處的深度。若在距離場圖像中畫如圖(b)所示的直線,則可得到圖(e)所示的地形剖面圖。

分水嶺算法的實作可通過水淹過程來說明。假定水均勻地對盆地進行填充,則盆地中的最低點(離邊界較遠的點)首先被淹沒,然後水會逐漸填滿整個盆地。當水位到達一定高度的時候将會溢出,這時就可以在水溢出的地方劃出分水嶺。如果用顆粒的标記來模拟對盆地的填充過程,則重複上述過程直到整個圖像上的點全部被淹沒,這時所劃出的一系列分水嶺就可以将各個盆地分開,如圖 (d)所示。分水嶺算法對微弱的邊緣有着良好的響應,但圖像中的噪聲會使分水嶺算法産生過度分割的現象。

LabVIEW圖像分割算法(基礎篇—6)

下圖對上述3種基于标記的分割過程進行了彙總。假定待分割的圖像為已經過圖像增強過程處理後的灰階圖像,則先要對該圖像進行全局或局部門檻值化處理,以獲得二值圖像。由于經門檻值化操作得到的二值圖像中常含有噪聲顆粒,而且感興趣的顆粒可能已經被損壞或者被圖像邊界切斷,是以在正式進行分割前,一般先要用形态學處理過程剔除噪聲顆粒,對感興趣的顆粒進行填充并剔除邊界顆粒。經過這些修正操作後的二值圖像中的顆粒不僅能更真實地代表目标,而且更便于分割。

LabVIEW圖像分割算法(基礎篇—6)

區域生長是一種古老的圖像分割方法,最早的區域生長圖像分割方法是由Levine等提出的,其基本思想是将具有相似性質的像素集合起來構成區域。該方法先從圖像中標明要分割目标内的一個像素或小塊作為種子,再根據某種事先确定的準則,将鄰域中與種子區域具有相同或相似性質的像素或區域與種子區域合并,此後繼續将最新合并的像素或區域又作為新的種子繼續進行合并的過程,直到再沒有滿足條件的像素能被包括進來為止。這種方式的關鍵是基于灰階、紋理、顔色等資訊,選擇合适的初始種子像素或區域和合理的生長準則。T.C.Pong等提出的基于小面(facet)模型的區域生長法是區域生長法的典型代表。

形态學重構(Morphological Reconstruction)可了解為一種有效的區域的生長方法。它基于源圖像和一個與源圖像大小相同且包含種子區域的标記圖像(Marker lmage),對灰階圖像或二值圖像中的目标進行重構,以實作圖像分割。在重構過程中,源圖像在功能上相當于遮罩,标記圖像用來對重構過程進行記錄。重構的起始位置由标記圖像中的種子區域或一組源圖像中的種子像素來确定。

通過實作分水嶺算法,來了解其使用方法,程式設計思路如下所示:

執行個體一開始先照例讀取圖像檔案,為後續操作配置設定記憶體,随後進入主循環;

若主循環中監測的使用者界面參數控件有變化,則程式就按照這些參數執行分支結構中的代碼;

其中IMAQ Threshold用于對圖像進行門檻值化擷取細胞的二值圖像,IMAQ RemoveParticle通過3次腐蝕運算來剔除噪聲,IMAQ Convex Hill對顆粒進行填充,而IMAQ RejectBorder則用于剔除邊界顆粒;

經過這些優化處理後,二值圖像中的顆粒更接近真實的血紅細胞,且更便于後續對分支結構中代碼所實作的4種算法進行圖像分割。

LabVIEW圖像分割算法(基礎篇—6)
LabVIEW圖像分割算法(基礎篇—6)
https://download.csdn.net/download/m0_38106923/19704441

圖像分割的品質直接決定機器能否快速準确地進行決策。當所采集的圖像品質較差、目标和背景的灰階差别不大或視場中被測目标有交疊時,需要使用圖像的形态學分割法和區域分割法來代替門檻值分割法和邊緣分割法。圖像的數學形态學處理通常使用具有一定形态的結構元素與圖像進行形态學運算,并進而研究圖像各部分的關系,以解決噪聲抑制、特征提取、邊緣檢測、圖像分割、形狀識别、紋理分析、圖像恢複與重建、圖像壓縮等圖像處理問題。它既可作用于經門檻值化處理得到的二值圖像,也可用于處理灰階圖像。

繼續閱讀