labview 標定 labview 機器視覺 零基礎 教程 培訓 學習 視覺

wcl8686發表於2018-05-21

請大家到 www.ni-vision.com     labview視覺論壇下載原始碼,謝謝

 

看CSDN的大牛的部落格一路學習過來,真的是收穫很多,現在自己也想嘗試著寫一寫技術部落格跟大家分享一下。現在在讀研究生,每天就是Matlab模擬,然後OpenCV再實現一下就是一個所謂的專案了。我的研究方向是視覺測量,但是現在做很多機械臂手眼標定的一些事情。


之所以會想起來寫Labview相關的部落格是因為本科的時候接觸Labview感覺這個軟體真的是很強大。當時參加一個科技類比賽還拿了個國家級一等獎,當時就是用Labview寫的上位機,整個比賽大概是半年的時間,但是我當時印象很深刻我們把理論方案確定下來之後,用程式碼實現的時候只用了兩天就全做好了。當然我們那個東西還是比較low的畢竟本科生的比賽,一個十八線城市的二本畢業生也沒有做什麼很高階的事情。


簡單說一下labview的優勢吧,也是為什麼研究生導師明明不讓我用我還一直堅持學習的原因。有人說他會OpenCV,有人說他matlab玩的6。但是我想說,你們寫好的程式碼,我的labview可以在稍加改動的情況下直接執行,以後的部落格我也會說一說怎麼用OpenCV的程式。還有一點可能是別人看不上Labview的一個原因,就是Labview的整合度很高,我們只是功能的使用者而不是創造者,沒有c語言那樣靈活。這一點我確實承認,但是我想說的是,一個比賽也好一個專案也罷,我們的最終目的是實現功能,一個軟體產品的成本我覺得最大的就是時間成本,本科期間所有的labview作品基本都是在一個月之內完成的,期間我還要去上一些無聊的課程,還得陪陪女朋友呢,是吧。程式設計師也是需要生活的,不能把時間都給了編程式碼,很不幸女朋友還是跑了。。。這個我也沒辦法,也不是重點,我想說的就是labview的開發週期可以很短,而且上手很快,一些簡單的東西都不用學,試兩次就可以做了。所以我一直沒有放棄labview 。還有最重要的一點就是現在很多做視覺測量的公司在招聘的時候是會把labview考慮進去的,我畢業也是要找工作的嘛,也不能學一些對自己沒什麼用的,我也沒那麼多情懷,具體哪些公司,你們可以自己去查一查,我就不說了。好的,廢話先說到這。

 

我今天寫的這個標定的程式,其實很簡單,但是現在關於labview影像處理的資料都是英文的,可能這也是為什麼一直很少人學的原因之一吧,我也是一點一點翻譯英文看的。我英文很不好,但是這種東西就是你沉下心一點一點翻譯是完全可以理解的。

標定對於一個做視覺測量的研發者來說應該是最先接觸的步驟,因為沒有世界座標,你是沒辦法做任何測量的。具體什麼叫標定自行百度吧。之前做了OpenCV的標定,這種程式網上一大片,我就不說了,當然有需要的也可以聯絡我,介面是用Qt寫的,不會Qt的就算了。寫Opencv的時候我就萌生了用labview標定的想法,後來一看,嗯!還是很簡單的。一不小心說了這沒多廢話。

 

我的思路呢是先學習用labview工具標定,labview提供很強大的視覺工具箱,先把工具箱搞明白了,以後再寫程式的時候可以快速理解每個程式碼的意思。

今天要說的就是這個

開啟之後是這樣的

右邊是五種情況,這篇部落格暫時先只講前兩個,因為我一會要食堂去吃飯。


左邊的部分就是他的幫助文件,所有問題其實用可以在裡邊找到答案。右邊第一個選項就是“點距標定”,意思就是用兩個畫素點來標定世界座標,加粗字型下邊也有解釋,用已知真實距離的兩個畫素來標定世界座標。點選"Next"

第二步,選擇標定原始檔是吧,這個就是已知真是長度的圖片了,點那個“load image from file”這塊很好懂。上圖。

 

 

我這個圖是在網上下載的,這裡要注意一個問題,標定用的圖一定要是你使用的相機拍出來的,如果真的想用的話,不要像我這樣在網上找圖片,一定要用自己的相機拍照,這個很好理解,我就不說為什麼了。選好圖片“下一步”

點距嘛,到這步就開始找點了,箭頭標出部分就是,如果你的相機像元不是正方形的時候,X,Y軸的度量是不樣的,這個時候就要XY,單獨標定了,這裡我就不選擇了,因為選擇那個只是多了一個Y軸,操作方法是一樣的。下面選擇兩個點。看圖。

選擇兩個已知長度的點,在世界座標那裡填上真實的長度,其實到這裡整個原理就很清晰了,就是算出每個畫素點的真實長度,用這個長度去算別的圖片,就是這樣的。下一步

 

如果選勾上邊個鬼東西就開始校正鏡頭畸變了,鏡頭畸變對測量的影響還是很大的,但是我在網上實在沒找到同一個相機拍的圖片,這個矯正畸變的步驟暫時不說,以後會說的,也是很簡單的一步。下一步

 

這裡就選擇座標原點和X軸了,我個人感覺這步隨意就好,因為世界座標的原點並不影響我們去測量一個長度,長度是一個相對量,所以。。。。就把原點放在左上角好了,畢竟習慣上是這樣。下一步

 

到這裡就標定完成,我們把標定檔案儲存一下,每次測量前載入這個檔案就可以得到真實的長度了。用下邊這個鬼來驗證一下。

 

先把圖片變成灰度的。

RBG選擇一個通道就可以變成灰度的了。

這個工具就是檢測邊緣的,現在是19.65,這可能是我之前標定的,我也不清楚,反正現在這個值是不是對的我不清楚,因為我們還沒有載入剛剛標定好的檔案,先看看不用的情況,下面載入標定圖片。

 

點OK,檢測一個釐米的距離,

10.08mm感覺還可以,但是這裡邊要注意兩個問題,第一,這個檢測邊緣的程式,他檢測的是黑線的外邊緣,我當時在選擇兩點的時候也是選擇的外邊緣的亮點,所以如果你們自己用的時候,一定要選擇好檢測位置。第二,不要看現在的結果很好,其實我們沒有進行鏡頭的畸變矯正,我也只能說這幅圖片很好,畸變是普遍存在的,所以你們在使用前一定要進行鏡頭的畸變矯正。好說下一個。

不行,我有點餓,我先去吃個飯,回來再寫。。都很簡單,別罵我,我比較笨,我覺得挺難的,所以就寫一寫,老鳥飛過吧。。。。吃飯先。

 

 

 

接著來啊,這回有畸變矯正的事了,剛才拍兩張照片。

這個標定就是Opencv裡邊的透視變換,有時候在測量一個平面上的資訊的時候不能保證測量平面和相機光軸垂直,這時候我們就需要把這個平面變成一個和相機光軸垂直的一個平面上去測量,講這個的時候我會把畸變矯正說一說。好,下一步,從這個選項上我們就知道需要四個點的是吧。

選擇那個斜平面的圖片進行標定。下一步。

 

尋找四個點,這四個點確保是你測量平面上的四個點,因為他就是依託這四個點來計算透視變換矩陣的,箭頭的地方是給這四個點一個世界座標,我這個標定靶是間距10mm的。所以世界座標都是10cm,別忘了下邊的單位。

 

 

這一步就是顯示各種誤差,也可以看他變換之後的影像在display的地方修改。

這是變換之後的圖片,從肉眼上感覺標定靶部分基本是一個平面了。下一步,選擇另一幅圖片進行畸變矯正,

這步就是畸變矯正了。選擇特徵點,最上邊的框框是選擇感興趣區域,Colcr Mode是選擇二值化方式,當然下邊就是二值化閾值選取了,可以看到靶面上的特徵點都已經被我們選擇上了,右下角這三個勾選項我記得有人說過是什麼意思,但是我不記得了,如果有人知道可以告訴我一下,謝謝。好,下一步。

這個選的是每個標誌點的間隔。就是單位距離嘛。下一步。

 

 

右上這個滑塊選擇的是矯正方式,他具體的演算法我不清楚,但是他有明確的寫了越往左速度越快,但是精度不高,往右速度慢,但是精度高,根據需求自己改,左側的圖片就是矯正之後的影像,

最後就是儲存檔案了,儲存好,然後我們驗證一下去,還是用那個視覺助手。

我們找四個點測一測,從現在看這四個點理論上應該是一個長方形,對邊的畫素點應該是一樣的但是我們在標定之前我們看一下他們的測量結果。

3,4兩點的距離比2,3兩點的距離小了6個畫素點,這是不能接受的,這是在沒有加標定檔案的實驗結果,我們加入已經標定好的檔案再進行測量。看一下測量結果。

 

 

 

 

誤差不到一個毫米,這個誤差其實跟我做這個實驗的時候太隨意也有點關係,我們可以看到基本是一個長方形了,感覺這個例子不是很明顯哈。我再換兩個點試一下。嗯

 

 

已經差了30個畫素點了,我們看一下標定結果。

 

這個結果還是可以接受的。今天就先說這兩個標定方法,過幾天把剩下的三個說一說,然後標定就先告一段落,都是一個字一個字打的,可能我寫的東西對你來說沒什麼用,我也沒指望能幫到別人多少,我就是對自己的一個學習總結,指求別噴

相關文章