工業自動化的眼睛,LabVIEW簡單的視覺識別教程(二)

10.2.4 圖像採集

要處理圖像,必須先要獲取一張圖像。獲取圖像是通過調用Vision中的IMAQ USB函數來實現的。它的最大優勢在於可以自動識別USB攝像頭,並讀取數據。選擇"函數"|"Vision and Motion"|"IMAQ USB"命令,打開IMAQ USB函數下拉列表,如圖10-46所示。

在進行圖像採集時,先要用IMAQ Create函數創建一個圖像任務,此函數的接線如圖10-47所示。

工業自動化的眼睛,LabVIEW簡單的視覺識別教程(二)

工業自動化的眼睛,LabVIEW簡單的視覺識別教程(二)

圖10-46 圖像採集函數 圖10-47 IMAQ Create函數圖標

這裡通過此函數對圖像的名稱和類型大小等進行定義,否則後面的工作沒有辦法進行。然後再通過一個USB啟動函數來調用USB攝像頭設備。此函數是NI公司自己研發專門讀取USB設備的函數,其內部通過調用ImaqDirectShowDll.dll文件來實現。

打開USB設備後,就要從此設備上獲取數據,所以用了一個IMAQ USB Grab Acquire函數來實現。整個圖像採集程序框圖如圖10-48所示。

10.2.5 圖像處理過程

此處的圖像處理包括對圖像進行採樣,找出與採樣點相同的圖像。為了找出各種角度放置的採樣點,在查找的同時對圖像進行了360°的翻轉,這樣可以找出圖像上所有相同點。

1.整體設計

在本實例設計中,對一張圖片先設置好要查找的內容,然後開始自動查找,最後對找出的內容進行標記和顯示。

由於軟件的運行比較複雜,數據的採集又是實時的,要求處理速度比較快,所以要對其進行整體設計,合理安排控件的調用和執行順序。本程序中採用了一個大循環,保持程序的持續運行。在內部再調用一個順序結構來控制程序的執行順序,這樣可以保證程序按編程者的思路進行。具體的工作流程圖如圖10-49所示。

工業自動化的眼睛,LabVIEW簡單的視覺識別教程(二)

工業自動化的眼睛,LabVIEW簡單的視覺識別教程(二)

圖10-48 圖像採集 圖10-49 整個程序流程圖

2.設置查找像素

讀取了圖像數據後,還要設置查找的像素。這裡通過一個光標選擇函數來實現。先用函數IMAQ Setup Learn Pattern 2來設置需要記錄的各項,然後再用IMAQ Extract函數進行光標設置。這樣就記錄了此光標區域的圖像數據。它的程序框圖如圖10-50所示。

工業自動化的眼睛,LabVIEW簡單的視覺識別教程(二)

圖10-50 設置查找像素

這裡用一個條件結構來控制是否進入記錄像素的程序。也就是當選擇了要記錄的像素後,才進入此分支程序。在這一分支程序中,又利用了一個順序結構,這樣提高了程序運行的效率。它的程序如圖10-51所示。

工業自動化的眼睛,LabVIEW簡單的視覺識別教程(二)

圖10-51 復位記錄按鈕

3.開始查找

當設置完以上要查找的像素後,就可以在需要的圖片中查找此像素。為了查找有用的像素,在選擇了"開始查找"後,要先讀取上面標記的像素,再進行查找。此處程序的設計中,也是先運行一個條件結構,再運行順序結構,按順序執行程序。讀取光標選擇像素的程序如圖10-52所示。

工業自動化的眼睛,LabVIEW簡單的視覺識別教程(二)

圖10-52 讀取選擇的像素

當讀取像素後,利用順序結構在第二幀的圖像中繼續查找。在這一幀中放置了一個循環,並限制循環次數為4。此時先用一個IMAQ Rotate對圖像進行翻轉,每次翻轉90°。這樣就可以在循環4次時翻轉一週,對圖像上各個角度的像素進行查找。再把圖像送到IMAQ Match Pattern 2函數,對其進行查找。通過此函數直接輸出找到的像素信息的數組。為了對找到的信息進行處理,又用一個For循環對此數據和簇進行拆分。這裡的For循環次數直接由數組大小來控制。把數組拆開後再找到像素的中心位置,並按設置好的字體和格式顯示出來。對字體的設置,前面板如圖10-53所示。

從圖10-52中可以看出,其中包括字體名稱、字體大小、下畫線、加粗等標記方式。標記字體程序如圖10-54所示。

工業自動化的眼睛,LabVIEW簡單的視覺識別教程(二)

工業自動化的眼睛,LabVIEW簡單的視覺識別教程(二)

圖10-53 標記字體設置 圖10-54 標記字體程序

可以看到,最複雜的設置是對標記內容的組合與寫入。這裡先由Draw Pattern Matches Position函數讀取各個記錄點的座標值,然後用一個字符串組合函數把標記和座標值組合成一個標記字符串。最後由IMAQ Draw Text函數把組合好的標記信息直接寫入圖像界面中。整個標記程序如圖10-55所示。

工業自動化的眼睛,LabVIEW簡單的視覺識別教程(二)

圖10-55 完整標記程序

當第二幀執行完後,進入第三幀的圖像大小設置。因為在前面查找的過程中,為了查找得更加精確,對圖像進行了像素的放大,這裡為了顯示的方便,就需要對圖像進行還原,這樣才可以看得清楚。此處用了IMAQ Extract 函數,對顯示的圖像進行放大和縮小,但是沒有改變真正的圖像。它的程序框圖如圖10-56所示。

工業自動化的眼睛,LabVIEW簡單的視覺識別教程(二)

圖10-56 圖像還原

4.程序前面板

當所有後面板程序編寫完後,就要進行前面板控件佈局。由於此程序中涉及的控件不多,所以很好設置整體佈局。程序界面如圖10-57所示。其中,"標籤類型"是為了給標籤進行不同的編號,在當前座標前面加的一個前綴,這樣更好區分不同的像素點。"最大數目"是查找出目標的最大限制。如果設置為40,則最多隻能找出40個目標。當大於此值時,則將多出來的其他目標量忽略。

下面對查找時要放大的倍數進行設置,這裡只是對二維的數據放大,所以在界面上設置兩個值,一個是X,另一個是Y。前面板佈局如圖10-58所示。

工業自動化的眼睛,LabVIEW簡單的視覺識別教程(二)

工業自動化的眼睛,LabVIEW簡單的視覺識別教程(二)

圖10-57 控制項設置 圖10-58 放大設置

為了對系統的工作進行控制,需要設置4個按鈕。它們分別如下:

— 開始採集:用於啟動採集,完成整個任務的第一個動作,採集一張圖片。

— 記錄標記:用於對光標選擇的區域進行記錄,以識別設置像素。

— 開始查找:啟動整個系統,對採集到的圖片進行查找,找出相同像素並進行標記。

— 停止工作:系統停止工作。

界面佈局如圖10-59所示。

接下來對查找後的圖像進行顯示,這是非常關鍵的一個步驟。這裡還對查找到的總個數進行了統計,這樣可以讓人對查找結果一目瞭然,完整的前面板界面如圖10-60所示。

工業自動化的眼睛,LabVIEW簡單的視覺識別教程(二)

工業自動化的眼睛,LabVIEW簡單的視覺識別教程(二)

圖10-59 按鈕設置 圖10-60 完整界面

10.2.6 程序調試

程序編寫完成後,要對系統進行軟硬件的聯機調試。這裡把NI公司的USB攝像頭和計算機連接,並在計算機上安裝此軟件工具包。具體操作如下:

(1)運行本程序,在攝像頭下放置好一塊電路板,並對其設置好焦距和亮度。單擊"開始採集"按鈕,對其進行採集,並顯示實時採集到的圖像,如圖10-61所示。

(2)當採集完一次後,在界面上可以看到清晰的採集結果。此時我們用光標在需要進行識別的地方畫出一個區域。此時光標變為綠色,表示用光標選中了要記錄的像素。然後單擊"學習標記"按鈕,此光標消失,表示已經記錄(學習)完成,如圖10-62所示。

從圖上可以看出,這裡選中的是電路板上字母C,讓程序學習記錄,並找出界面上所有的字母C。

工業自動化的眼睛,LabVIEW簡單的視覺識別教程(二)

圖10-61 圖像採集

工業自動化的眼睛,LabVIEW簡單的視覺識別教程(二)

圖10-62 設置學習區域

(3)記錄學習完成後,就可以查找相同像素的點了。單擊"開始查找"按鈕後,程序開始在此圖上查找記錄的像素點,並以此像素點為標準,進行比對,找出相同的點。查找的過程中標出了各個點的座標和編號。這裡把標籤類型設置為"A",以Shift Invariant的方式查找,精度設置為700,最大數目設置為40。這樣就可找出所有相同的元素。程序運行時如圖10-63所示。

工業自動化的眼睛,LabVIEW簡單的視覺識別教程(二)

圖10-63 查找結果

從圖中可以看出,查找過程中,程序找出了所有字母C,並標註了它們的座標和標籤。此處的標籤有些不是端正的,主要是由於在對圖片進行翻轉查找時,按相應的角度找到後直接就標記了。如標籤A43(70,471)表示的意義如下:字母A是對程序進行查找前設置的標籤類型。4表示此圖片翻轉到第4次找到的,即第4個角度。3表示是此角度下的第3個點。(70,471)表示當前查找到像素的中心座標,即此目標的

X=70,Y=471,座標的值是從圖像開始的左上角界面算起的。同時可以看到界面的下面顯示了圖片的屬性,如圖片大小、位數等。最後還可以看到一個"已查找到總個數"本框,此處顯示的是8個目標。這和圖上標註的一樣,也和實際完全相符。

(4)完成查找後,單擊"停止工作"按鈕中斷此程序的運行。系統退出圖像採集和處理環節。

10.2.7 實例總結

本例講解了LabVIEW中圖像處理方面的具體應用,主要對如何利用Vision工具包採集圖像進行了詳細的講解。同時採集到圖像後進行了各類複雜的運算,其中編程的思路也是筆者的經驗展示,讀者需要用心體會,掌握設置不同事件的合理運行順序。


分享到:


相關文章: