LabVIEW感興趣區(qū)域分析(實戰(zhàn)篇—1)
ROI(region of interest),感興趣區(qū)域。機器視覺、圖像處理中,從被處理的圖像以方框、圓、橢圓、不規(guī)則多邊形等方式勾勒出需要處理的區(qū)域,稱為感興趣區(qū)域,ROI。在Halcon、OpenCV、Matlab等機器視覺軟件上常用到各種算子(Operator)和函數(shù)來求得感興趣區(qū)域ROI,并進行圖像的下一步處理。為圖像處理設(shè)定ROI,可以將注意力集中在要解決問題的主要方面,減少要處理的數(shù)據(jù)量,提高系統(tǒng)的處理速度和實時性。
在機器視覺系統(tǒng)開發(fā)過程中,常見的ROI操作包括構(gòu)建ROI、關(guān)聯(lián)ROI到圖像顯示窗口、從圖像顯示窗口中提取ROI以及清除圖像顯示窗口中的ROI等。圖像顯示窗口中的圖像不斷變化時,與之關(guān)聯(lián)的ROI可以保持不變。
ROI可通過各種標(biāo)準(zhǔn)幾何形狀或自由的封閉域來描述。從數(shù)據(jù)結(jié)構(gòu)角度來看,ROI自身并不包括圖像數(shù)據(jù),它只是說明圖像中哪個區(qū)域的數(shù)據(jù)需要被重點關(guān)注。
1
ROI定義及實現(xiàn)方法
Nl Vision使用ROl Descriptor數(shù)據(jù)結(jié)構(gòu)描述ROI,下圖顯示了該數(shù)據(jù)結(jié)構(gòu)及其圖解。
由圖可知,ROI可以由其矩形邊界(global rectangle)和一個或多個不同的輪廓(contours)共同定義。矩形邊界是指一個底邊與圖像底邊平行,且恰好包含整個ROI的矩形,該矩形左上和右下頂點的坐標(biāo)保存在ROI數(shù)據(jù)結(jié)構(gòu)中的Global Rectangle數(shù)組中。ROI區(qū)域可以通過一個或多個幾何輪廓來限定,這些不同幾何輪廓所定義區(qū)域的交集構(gòu)成了整個ROI。
用于限定ROI區(qū)域的輪廓也保存在一個稱為Contours的數(shù)組中,數(shù)組的每個元素由特征ID、類型(type)和包含多個坐標(biāo)值的數(shù)組Coordinates構(gòu)成。特征ID用來說明該元素描述的輪廓是ROl的外邊沿(external)還是內(nèi)邊沿(internal)。如果為外邊沿,則其內(nèi)部的所有區(qū)域被看作是ROI區(qū)域的一部分;而如果為內(nèi)邊沿,其外部所有部分均被當(dāng)作是ROI區(qū)域的一部分。type值指定了元素所描述輪廓的幾何形狀。Coordinates數(shù)組中每兩個元素構(gòu)成了輪廓中多個頂點的坐標(biāo)。
由此可見,Contours數(shù)組中的元素定義的輪廓本質(zhì)上用于描述圖像中某個區(qū)域,而單個或多個元素共同描述的輪廓所限定區(qū)域的交集就是最終希望得到的ROl。
在LabVIEW中使用Nl Vision定義ROl的方法大致可分為交互式、程序代碼定義以及圖像遮罩轉(zhuǎn)換三大類,如下表所示。
交互方式定義ROl時,需要用戶使用各種ROI工具在圖像中指定ROI區(qū)域,采用交互方式定義ROI可以減少程序代碼的編寫量,但在程序運行過程中需要用戶參與。由于用戶的操作習(xí)慣和操作環(huán)境千差萬別,因此即使同一圖像同一用戶每次繪制的ROI也可能不同。如果要減少用戶參與,精確定義ROI,則可通過程序代碼來實現(xiàn)。相應(yīng)地,開發(fā)人員也要花更多的精力研究如何在圖像中精準(zhǔn)確定ROI位置,并編寫代碼。最后,ROI也可以與圖像遮罩相互轉(zhuǎn)換,因此使用圖像遮罩也可以定義ROI。
機器視覺系統(tǒng)開發(fā)過程中,常用到的幾何形狀有點、線段、矩形和環(huán)面。下表列出了幾何形狀簡易數(shù)據(jù)結(jié)構(gòu)與ROl Descriptor之間相互轉(zhuǎn)換的VI:
除了以上介紹的ROI轉(zhuǎn)換VI,Nl Vision還提供了其他幾個與ROI操作相關(guān)的重要VI,包括圖像遮罩(lmage Mask)與ROI相互轉(zhuǎn)換的VI、ROI組合與拆分、ROI在不同坐標(biāo)系之間的轉(zhuǎn)換以及將已標(biāo)記的圖像(Label lmage)區(qū)域轉(zhuǎn)換為ROl的VI。這些VI可參考說明手冊理解:
查看ROI轉(zhuǎn)換VI,在LabVIEW程序框圖中點擊鼠標(biāo)右鍵,查看視覺與運動相關(guān)函數(shù),查看Vision Utilities模塊中的Region of Interest,步驟如下所示:
Region of Interest包含VI如下所示:
用戶可結(jié)合說明手冊,使用相關(guān)的Region of Interest VI。
2
基礎(chǔ)案例:圖像感興趣區(qū)域手動標(biāo)記
本案例使用ROI構(gòu)建器以交互方式定義ROI的程序界面和程序代碼,如下所示:
案例功能描述如下所示:
程序開始先將圖像CSDN.png讀入內(nèi)存等待進一步處理。
緊接著由While循環(huán)和事件結(jié)構(gòu)組成的事件處理器待命,隨時準(zhǔn)備處理各種用戶界面事件。
當(dāng)用戶單擊Display Image按鈕時,Showlmg Value Change事件分支中的IMAQ WindSetup和IMAQWind Draw就把內(nèi)存中的圖像繪制在一個獨立的外部圖像顯示窗口中。
若用戶隨后單擊ConstructROI按鈕,DefROl Value Change事件會被觸發(fā),其對應(yīng)事件分支中的IMAQConstructROI將創(chuàng)建ROI構(gòu)造器。
由于傳遞給它的窗口編號為0,與之前IMAQWind Draw繪制的外部圖像顯示窗口編號(默認值窗口編號為0)一致,因此,IMAQConstructROl會將0號編號的圖像顯示窗口臨時變?yōu)槟B(tài)窗口形式的ROI構(gòu)造器并在其右側(cè)顯示ROI工具條。
當(dāng)用戶在ROI構(gòu)造器中定義好感興趣區(qū)域并確認后,程序就返回所定義區(qū)域所對應(yīng)的ROl Descriptor。
此時,若用戶再次單擊Display lmage按鈕,就會發(fā)現(xiàn)之前定義的ROl顯示在窗口中,說明它已經(jīng)與該窗口關(guān)聯(lián)。
注意,在交互方式下,若構(gòu)造器指定了窗口編號,則創(chuàng)建的ROI會自動與該窗口關(guān)聯(lián)。
若要使用程序代碼將ROI Descriptor描述的ROI與圖像顯示窗口關(guān)聯(lián),可以使用IMAQ WindSetROl。
如果要清除圖像顯示窗口中的ROI,可以單擊Erase ROI按鈕,它將觸發(fā)EraseROl Value change事件,調(diào)用IMAQ WindEraseROI清除ROI。
最后,單擊Exit按鈕退出程序時,IMAQ WindClose和IMAQ Dispose會清理現(xiàn)場,結(jié)束程序。
項目演示效果如下所示:
3
進階案例:圖像顆粒自動標(biāo)記
圖像標(biāo)記 (Label lmage)操作常用于顆粒(Particles)分析,它把二值圖像中相互連通的一組像素(稱為顆粒)全部更改為某一固定灰度值(用8位或16位表示)??赏ㄟ^4連通或8連通原則來判斷像素是否屬于同一顆粒。圖像標(biāo)記操作的輸入圖像為二值圖像,但其輸出卻是含有為每個顆粒都設(shè)置了灰度標(biāo)記值的灰度圖像,其中灰度標(biāo)記值的數(shù)量等于圖像中顆粒的數(shù)量再加上用于背景的灰度標(biāo)記值0。如果圖像使用了調(diào)色板,則被標(biāo)記的多個顆粒有可能使用同一灰度標(biāo)記值。
本案例是一幅圖像中顆粒進行標(biāo)記的實例程序,如下所示:
案例功能描述如下所示:
程序代碼在將圖像Alu.png讀入內(nèi)存后即進入圖像標(biāo)記循環(huán)。
在循環(huán)中,若用戶沒有改變IMAQ Threshold使用的閾值,則循環(huán)就不做任何處理,否則就會對圖像中的顆粒或區(qū)域進行標(biāo)記。
標(biāo)記的過程是先用IMAQ Threshold將圖像分割為二值圖像,再經(jīng)形態(tài)學(xué)處理函數(shù)IMAQ Morphology對顆?;騾^(qū)域的邊緣做平滑處理,隨后才由IMAQ Label(位于LabVIEW的Vision andMotion→lmage Processing→Processing函數(shù)選板中)將各區(qū)域內(nèi)的像素修改為灰度標(biāo)記值。
除了對圖像標(biāo)記,程序還返回已標(biāo)記的顆粒數(shù),并使用IMAQ Quantify返回各標(biāo)記區(qū)域的像素灰度統(tǒng)計信息,IMAQ Quantify的Image Mask參數(shù)必須為標(biāo)記圖像。
完成了圖像的標(biāo)記,就可以設(shè)法將已標(biāo)記圖像中的某一感興趣部分提取出來單獨分析。
IMAQ LabelToROI可以把圖像中已標(biāo)記區(qū)域轉(zhuǎn)換為ROI。
如果某個標(biāo)記值對應(yīng)多個區(qū)域,則其返回的ROlDescriptor將包含多個區(qū)域的輪廓。
在使用它時還可以指定是否僅轉(zhuǎn)換ROI外部輪廓和ROI包含的最大像素個數(shù),以進一步約束轉(zhuǎn)換結(jié)果。
項目演示效果如下所示:
*博客內(nèi)容為網(wǎng)友個人發(fā)布,僅代表博主個人觀點,如有侵權(quán)請聯(lián)系工作人員刪除。