利用Halcon進行單目標定,及問題小結

 

攝像機標定之前,首先要確定相機和鏡頭的參數,參考對應說明書,查找IMAGING SOURCE 31BU03相機的參數如下:分辨率1024*768;格式1/3’’;像素尺寸,水平4.65um,垂直4.65um;兩個鏡頭是computar工業自動化鏡頭,其參數分別是:①焦距5mm,F1.4,尺寸1/2’’,②焦距12mm,F1.4,尺寸2/3’’。相機和鏡頭參數作爲標定過程中算子StartCamPar的初值。

標定過程

首先,創建標定數據模型,使用算子create_calib_data,實例中爲create_calib_data ('calibration_object', 1, 1, CalibDataID),該算子是爲了創建標定數據模型,即標定的數據將存放於CalibDataID中。

其次,設定攝像機的初始化參數,即第一段所提及。算子爲set_calib_data_cam_param  (CalibDataID, 0, 'area_scan_division', StartCamPar)。

第三步,描述標定板,,這裏標定板名稱CaltabName有兩種途徑獲取,使用算子set_calib_data_calib_object (CalibDataID, 0,CaltabName)。一種途徑是直接調用Halcon自帶的描述文件(.descr),另一種是通過算子gen_caltab自制標定板,產生描述文件。標定板描述文件中的標定板信息必須與標定過程中使用的標定板規格、尺寸一致。

第四步,開始標定。其中又分爲兩部分,一是找到標定板,二是找到標定點及其位置。使用算子爲find_caltab (Image, Caltab, CaltabName, SizeGauss,MarkThresh, MinDiamMarks) 和find_marks_and_pose (Image, Caltab,CaltabName, StartCamPar, StartThresh, DeltaThresh, MinThresh, Alpha,MinContLength, MaxDiamMarks, RCoord, CCoord, StartPose)。標定板上各個標定點的圖像座標信息存儲在Rcoord和 Ccoord中。

第五步,標定,利用算子camera_calibration執行相機標定。

第六步,輸出標定結果。通過算子get_calib_data (CalibDataID, 'camera', 0, 'params', CamParam),將攝像機內參存儲在CamParam中,通過write_cam_par()將內參寫出。

確定相機外參

確定相機外參是攝像機標定的重要內容,有了外參,才能實現CCS(camera coordinate system)與WCS(world coordinate system)之間的座標轉換。而外參是無法直接獲取,確定外參有以下幾種不同的方法:

1、當標定板在測量平面上時,默認測量平面在WCS座標系xoy面上,且z=0,此時,直接調用get_calib_data  (CalibDataID, 'calib_obj_pose', [0, NumImage],'pose', Pose)即可得到攝像機外參Pose。

2、將內參標定和外參標定單獨處理進行,在通過上述標定獲取內參之後,單獨拍攝一幅圖片,該圖片與上述1中位置一致,再次利用find_caltab 和find_marks_and_pose,然後利用camera_ calibration進行標定。

3、自己確定WCS中某些點的座標以及它們投影在圖像中的座標。然後調用函數vector_to_pose確定對應。

問題:1、外參的確定是相對的嗎,像外參標定中第一、二種方法,測量平面是怎麼確定的,是與攝像機座標系(Xc,Yc,Zc)對應,各軸平行的世界座標系上的XwOYw平面嗎?外參數是你標定模板的座標系相對於攝像機座標系的pose

即攝像機座標系通過旋轉一定角度(旋轉矢量),再平移一定值(平移矢量)就可以變爲標定模板的座標系。

標定模板的座標系,是已一個角上的黑點定義爲原點,x軸、y軸在標定模板平面內,z軸垂直於標定模板平面。

 

2、通過第一種方法get_calib_data  (CalibDataID,'calib_obj_pose', [0, NumImage], 'pose', Pose)獲取的Pose是平移和旋轉向量,如下圖左一;通過第二種方法獲得的結果爲中間圖;而通過第三種方法獲取的結果爲右1。

這三個結果是Halcon自帶程序結果\MVTec\HALCON-10.0\examples\solution_guide \3d_vision\中的camera_calibration_multi_image.hdev(圖一結果),camera_calibration_exterior.hdev(圖二和圖三結果)。怎樣的外參爲合理結果。

第三種因爲哦我沒有camera_calibration_multi_image.hdev這個程序,所以我不清楚具體是什麼。但第一種和第二種方法獲得的應該是一致的,應該是對的。建議你不要用什麼標定助手,用halcon自帶的以前的calibration相關的例程,然後看看halcon的基本手冊,講pose的,將標定的。

 

3、標定的內參結果,初始分辨率是1024*768,得到的Cx和Cy,應該是圖像寬度和高度的一半,也就是在512,384左右,實際標定結果偏差較大,多次不同實驗結果相近,不知道問題出在哪裏。

CxCy這個結果應該是差不多可靠的,因爲看你5mm12mm標定的結果CxCy差不多,這個與512384中間值相差大是正常的,鏡頭的中心由於安裝的原因也不一定就與512384中間值同軸,而且因爲標定的模型是小孔成像理論情況,而實際的lens不是理想凸透鏡,不是單光心的,所有CxCy會有變化,畸變參數的變化誤差更大。

但我看了你的標定圖像,裏面有個最大的bug就是,你的標定模板不是平的,沒有固定好,那時候我讓本科生用玻璃鼠標墊上固定標定模板,做實驗是有目的,這樣能最大減少誤差。所以看了你的一些實驗照片,我基本上對你的實驗結果打很多的問號的?

我很奇怪你爲什麼做實驗的時候沒有用原來的玻璃鼠標墊?建議你用不乾膠粘貼標定模板後,用書壓一晚上,壓平之後重新做2-3組實驗。看看這樣的標定結果會不會好一些。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章