線陣相機標定

我是使用halcon標定助手來標定線陣相機的,對於裏面的一些參數來做一個記錄說明:

首先下面的兩個數組就是標定之後得到的相機內參和外參

內參:CameraParameters := [0.0357809  ,  -61.3384  ,  6e-006  ,  6e-006  ,  915.932  ,  182.341  ,  2048  ,  3840  ,  1.41028e-006  ,  5.45462e-005  ,  3.86866e-006]
外參:CameraPose := [-0.0160874,0.0553653,0.255282,28.5899,6.24194,8.48283,0]


內參的11個參數分別是什麼意思呢?內參一共十一個參數分別爲  [Focus, Kappa, Sx, Sy, Cx, Cy, ImageWidth, ImageHeight, Vx, Vy, Vz]
Focus : 鏡頭焦距長度

Kappa: 鏡頭畸變係數,正負分別表示枕形畸變和桶狀畸變

Sx: 表示相機單個像元寬度

Sy: 表示相機單個像元高度

Cx: 表示鏡頭光軸在像平面座標上的投影橫座標,一般初始化的時候設置爲width/2

Cy: 表示鏡頭光軸在像平面座標上的投影縱座標,一般初始化的時候設置爲0,因爲是一幀是一條線,所以縱座標爲0

ImageWidth: 表示一整副圖片像素寬度

ImageHeight: 表示一整幅圖片像素高度
Vx : x方向上運動速度,其實就是每拍攝一條線,x方向的走的距離,因爲安裝有誤差,相機和運動方向不可能完全垂直,理論上爲0最理想

Vy: y方向上運動速度,其實就是在掃描的時候,多遠距離拍攝一條線

Vz: z方向上運動速度,其實就是每拍攝一條線,z方向上走的距離,也是因爲安裝有誤差,理論上爲0最理想


外參的六個參數表示由世界座標系轉換成相機座標系的變換參數,六個參數分別爲x,y,z三個軸的旋轉角度和x,y,x三個軸的平移量


======================================================================================================


1.在halcon中使用標定助手對線掃相機進行標定,首先設置標定板描述文件路徑,和鏡頭等相關參數

2.加載用於標定的圖片,一般20張左右,注意加載的圖片必須都找到標定板,顯示檢測品質出問題如果精度要求不是很高也可以接受。然後選定一張照片設置爲參考位姿,設置參考位姿的作用是什麼呢?當你標定完成之後,使用相機內參外參進行矯正之後的圖片,會將這個圖片上的標定板中心點作爲遠點座標,並且這張變換後的圖片作爲相機垂直照射的平面參考。如果加載的圖片找不到標定板,可以在最下方的標定板提取參數中改變參數,一般就能找提取到標定板了。最後點擊標定按鈕,就可以得到標定的參數了。



3.得到的內參,如何進行畸變矯正呢?使用如下代碼,註釋爲藍色,代碼爲紅色。

你希望映射過後的圖片的寬度(一條線)內視野爲多少,這裏爲30mm,然後除以1000換算成m

TmpCtrl_RectificationWidth := 30
TmpCtrl_RectificationWidth := TmpCtrl_RectificationWidth / 1000.0

生成用於矯正的映射圖,着重說一下這幾個輸入參數

CameraParameters:標定得到的相機內參

CameraPose:標定得到的相機位姿外參

2048:待轉換圖的寬度

3840:待轉換圖的高度

2048:轉換之後的圖像希望的寬度

3840:轉換之後的圖像希望的高度

TmpCtrl_RectificationWidth / 2048:表示希望轉換後的圖,每個像素代表的長度,單位是m。這裏因爲寬度視野(一條線覆蓋的視野寬度)希望是30mm,而希望轉換後的圖像寬度爲2048,所以這裏用TmpCtrl_RectificationWidth / 2048,也就是說你可以自定義轉換之後的圖像每隔像素代表多少精度,這裏的精度就是30mm/2048pix = 0.014mm/pix .注意下面的這個函數就是將圖片轉換成了z=0,垂直視角的函數,參看halcon函數說明。

gen_image_to_world_plane_map (TmpObj_RectificationMap, CameraParameters, CameraPose, 2048, 3840, 2048, 3840, TmpCtrl_RectificationWidth / 2048, 'bilinear')
最終使用map_image來轉換圖片,轉換之後的圖片在理論上橫向縱向的座標縮放比例是相等的,換句話來說一個正方形兩個方向上的像素個數是一樣的,並且是垂直拍攝的。
map_image (Image, TmpObj_RectificationMap, TmpObj_RectifiedImage)


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