博客專欄

        EEPW首頁 > 博客 > LabVIEW感興趣區域分析(實戰篇—1)

        LabVIEW感興趣區域分析(實戰篇—1)

        發布人:美男子玩編程 時間:2022-06-22 來源:工程師 發布文章

        ROI(region of interest),感興趣區域。機器視覺、圖像處理中,從被處理的圖像以方框、圓、橢圓、不規則多邊形等方式勾勒出需要處理的區域,稱為感興趣區域,ROI。在Halcon、OpenCV、Matlab等機器視覺軟件上常用到各種算子(Operator)和函數來求得感興趣區域ROI,并進行圖像的下一步處理。為圖像處理設定ROI,可以將注意力集中在要解決問題的主要方面,減少要處理的數據量,提高系統的處理速度和實時性。


        在機器視覺系統開發過程中,常見的ROI操作包括構建ROI、關聯ROI到圖像顯示窗口、從圖像顯示窗口中提取ROI以及清除圖像顯示窗口中的ROI等。圖像顯示窗口中的圖像不斷變化時,與之關聯的ROI可以保持不變。


        ROI可通過各種標準幾何形狀或自由的封閉域來描述。從數據結構角度來看,ROI自身并不包括圖像數據,它只是說明圖像中哪個區域的數據需要被重點關注。



        1


        ROI定義及實現方法



        Nl Vision使用ROl Descriptor數據結構描述ROI,下圖顯示了該數據結構及其圖解。


        圖片

        圖片


        由圖可知,ROI可以由其矩形邊界(global rectangle)和一個或多個不同的輪廓(contours)共同定義。矩形邊界是指一個底邊與圖像底邊平行,且恰好包含整個ROI的矩形,該矩形左上和右下頂點的坐標保存在ROI數據結構中的Global Rectangle數組中。ROI區域可以通過一個或多個幾何輪廓來限定,這些不同幾何輪廓所定義區域的交集構成了整個ROI。


        用于限定ROI區域的輪廓也保存在一個稱為Contours的數組中,數組的每個元素由特征ID、類型(type)和包含多個坐標值的數組Coordinates構成。特征ID用來說明該元素描述的輪廓是ROl的外邊沿(external)還是內邊沿(internal)。如果為外邊沿,則其內部的所有區域被看作是ROI區域的一部分;而如果為內邊沿,其外部所有部分均被當作是ROI區域的一部分。type值指定了元素所描述輪廓的幾何形狀。Coordinates數組中每兩個元素構成了輪廓中多個頂點的坐標。


        由此可見,Contours數組中的元素定義的輪廓本質上用于描述圖像中某個區域,而單個或多個元素共同描述的輪廓所限定區域的交集就是最終希望得到的ROl。

        在LabVIEW中使用Nl Vision定義ROl的方法大致可分為交互式、程序代碼定義以及圖像遮罩轉換三大類,如下表所示。


        圖片


        交互方式定義ROl時,需要用戶使用各種ROI工具在圖像中指定ROI區域,采用交互方式定義ROI可以減少程序代碼的編寫量,但在程序運行過程中需要用戶參與。由于用戶的操作習慣和操作環境千差萬別,因此即使同一圖像同一用戶每次繪制的ROI也可能不同。如果要減少用戶參與,精確定義ROI,則可通過程序代碼來實現。相應地,開發人員也要花更多的精力研究如何在圖像中精準確定ROI位置,并編寫代碼。最后,ROI也可以與圖像遮罩相互轉換,因此使用圖像遮罩也可以定義ROI。


        機器視覺系統開發過程中,常用到的幾何形狀有點、線段、矩形和環面。下表列出了幾何形狀簡易數據結構與ROl Descriptor之間相互轉換的VI:


        圖片


        除了以上介紹的ROI轉換VI,Nl Vision還提供了其他幾個與ROI操作相關的重要VI,包括圖像遮罩(lmage Mask)與ROI相互轉換的VI、ROI組合與拆分、ROI在不同坐標系之間的轉換以及將已標記的圖像(Label lmage)區域轉換為ROl的VI。這些VI可參考說明手冊理解:


        圖片


        查看ROI轉換VI,在LabVIEW程序框圖中點擊鼠標右鍵,查看視覺與運動相關函數,查看Vision Utilities模塊中的Region of Interest,步驟如下所示:


        圖片


        Region of Interest包含VI如下所示:


        圖片

        用戶可結合說明手冊,使用相關的Region of Interest VI。



        2


        基礎案例:圖像感興趣區域手動標記



        本案例使用ROI構建器以交互方式定義ROI的程序界面和程序代碼,如下所示:


        圖片


        案例功能描述如下所示:

        • 程序開始先將圖像CSDN.png讀入內存等待進一步處理。

        • 緊接著由While循環和事件結構組成的事件處理器待命,隨時準備處理各種用戶界面事件。

        • 當用戶單擊Display Image按鈕時,Showlmg Value Change事件分支中的IMAQ WindSetup和IMAQWind Draw就把內存中的圖像繪制在一個獨立的外部圖像顯示窗口中。

        • 若用戶隨后單擊ConstructROI按鈕,DefROl Value Change事件會被觸發,其對應事件分支中的IMAQConstructROI將創建ROI構造器。

          由于傳遞給它的窗口編號為0,與之前IMAQWind Draw繪制的外部圖像顯示窗口編號(默認值窗口編號為0)一致,因此,IMAQConstructROl會將0號編號的圖像顯示窗口臨時變為模態窗口形式的ROI構造器并在其右側顯示ROI工具條。

        • 當用戶在ROI構造器中定義好感興趣區域并確認后,程序就返回所定義區域所對應的ROl Descriptor。

        • 此時,若用戶再次單擊Display lmage按鈕,就會發現之前定義的ROl顯示在窗口中,說明它已經與該窗口關聯。

        • 注意,在交互方式下,若構造器指定了窗口編號,則創建的ROI會自動與該窗口關聯。

          若要使用程序代碼將ROI Descriptor描述的ROI與圖像顯示窗口關聯,可以使用IMAQ WindSetROl。

          如果要清除圖像顯示窗口中的ROI,可以單擊Erase ROI按鈕,它將觸發EraseROl Value change事件,調用IMAQ WindEraseROI清除ROI。

        • 最后,單擊Exit按鈕退出程序時,IMAQ WindClose和IMAQ Dispose會清理現場,結束程序。


        項目演示效果如下所示:


        圖片



        3


        進階案例:圖像顆粒自動標記



        圖像標記 (Label lmage)操作常用于顆粒(Particles)分析,它把二值圖像中相互連通的一組像素(稱為顆粒)全部更改為某一固定灰度值(用8位或16位表示)。可通過4連通或8連通原則來判斷像素是否屬于同一顆粒。圖像標記操作的輸入圖像為二值圖像,但其輸出卻是含有為每個顆粒都設置了灰度標記值的灰度圖像,其中灰度標記值的數量等于圖像中顆粒的數量再加上用于背景的灰度標記值0。如果圖像使用了調色板,則被標記的多個顆粒有可能使用同一灰度標記值。


        本案例是一幅圖像中顆粒進行標記的實例程序,如下所示:


        圖片


        案例功能描述如下所示:

        • 程序代碼在將圖像Alu.png讀入內存后即進入圖像標記循環。

        • 在循環中,若用戶沒有改變IMAQ Threshold使用的閾值,則循環就不做任何處理,否則就會對圖像中的顆粒或區域進行標記。

        • 標記的過程是先用IMAQ Threshold將圖像分割為二值圖像,再經形態學處理函數IMAQ Morphology對顆粒或區域的邊緣做平滑處理,隨后才由IMAQ Label(位于LabVIEW的Vision andMotion→lmage Processing→Processing函數選板中)將各區域內的像素修改為灰度標記值。

        • 除了對圖像標記,程序還返回已標記的顆粒數,并使用IMAQ Quantify返回各標記區域的像素灰度統計信息,IMAQ Quantify的Image Mask參數必須為標記圖像。

        • 完成了圖像的標記,就可以設法將已標記圖像中的某一感興趣部分提取出來單獨分析。

          IMAQ LabelToROI可以把圖像中已標記區域轉換為ROI。

          如果某個標記值對應多個區域,則其返回的ROlDescriptor將包含多個區域的輪廓。

          在使用它時還可以指定是否僅轉換ROI外部輪廓和ROI包含的最大像素個數,以進一步約束轉換結果。


        項目演示效果如下所示:


        圖片


        *博客內容為網友個人發布,僅代表博主個人觀點,如有侵權請聯系工作人員刪除。



        關鍵詞: LabVIEW

        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 云龙县| 温宿县| 嘉禾县| 灵山县| 安陆市| 凤凰县| 峡江县| 凯里市| 铜山县| 嵊州市| 新乡县| 淳化县| 天津市| 霍州市| 阳山县| 衡山县| 资中县| 望谟县| 郁南县| 郓城县| 当涂县| 成安县| 石泉县| 城口县| 新巴尔虎右旗| 英吉沙县| 荃湾区| 红河县| 凌海市| 宝兴县| 垣曲县| 定陶县| 武威市| 永丰县| 美姑县| 泾源县| 顺义区| 宝山区| 荆门市| 甘洛县| 威远县|