1. 程式人生 > >halcon 相機標定

halcon 相機標定

In the reference manual,operator signatures are visualized in the following way: 
operator ( iconic input : iconic output : control input : control output )

在HALCON所有運算元中,變數皆是如上格式,即:影象輸入:影象輸出:控制輸入:控制輸出。

其中四個引數任意一個可以為空。

控制輸入可以是變數、常量、表示式;

控制輸出以及影象輸入和輸出必須是變數。

1.caltab_points:從標定板中讀取marks中心座標,該座標值是標定板座標系統裡的座標值,該座標系統以標定板為參照,向右為X正,下為Y正,垂直標定板向下為Z正。該運算元控制輸出為標定板中心3D座標。

2.create_calib_data:建立Halcon標定資料模型。輸出一個輸出資料模型控制代碼。

3.set_calib_data_cam_param:設定相機標定資料模型中設定相機引數的原始值和型別。設定索引,型別,以及相機的原始內參數等。

4.set_calib_data_calib_object:在標定模型中設定標定物件。設定標定物件控制代碼索引,標定板座標點儲存地址。

5.find_caltab:分割出影象中的標準標定板區域。輸出為標準的標定區域,控制

6.find_marks_and_pose:抽取標定點並計算相機的內參數。輸出MARKS座標陣列,以及估算的相機外引數。

即標定板在相機座標系中的位姿,由3個平移量和3個旋轉量構成。

7.set_calib_data_observ_points( : : CalibDataID, CameraIdx, CalibObjIdx,CalibObjPoseIdx, Row, Column, Index, Pose : )

收集運算元6的標定資料,將標定資料儲存在標定資料模型中。輸入控制分別為標定資料模型控制代碼,相機索引,標定板索引,位姿索引,行列座標,位姿。

8.calibrate_cameras( : : CalibDataID : Error) 標定一臺或多臺相機,依據CalibDataID中的資料。控制輸出平均誤差。

9.get_calib_data( : : CalibDataID, ItemType, ItemIdx, DataName : DataValue) 獲得標定資料。

依靠索引號和資料名稱來返回輸出的資料值。可查詢與模型相關的資料,與相機相關的資料(包括相機的內外引數等),與標定物件相關的資料,與標定物件的姿態相關的資料。控制輸出是要查詢的標定資料。

如:

get_calib_data (CalibDataID, 'camera', 0, 'params', CamParam) //查詢相機的位姿

get_calib_data (CalibDataID, 'calib_obj_pose', [0, NumImage], 'pose', Pose) //查詢標定板位姿

10.write_cam_par( : : CameraParam, CamParFile : ) 記錄相機的內參數,輸入控制為內參數,輸出控制為

存取相機內參數的檔名。

11.set_origin_pose( : : PoseIn, DX, DY, DZ : PoseNewOrigin)

設定新的座標原點,控制輸入為原始的位姿和沿著世界座標系的三個座標軸的平移量,控制輸出為新的位姿。

相關運算元:相關運算元:
1.create_calib_data( : : CalibSetup, NumCameras, NumCalibObjects : CalibDataID)
建立一個標定(資料)模型
CalibSetup:標定型別
NumCameras:相機數目
NumCalibObjects:圖片中標定板個數
CalibDataID:標定模型控制代碼(標示符)
2.set_calib_data_cam_param( : : CalibDataID, CameraIdx, CameraType, CameraParam : )
相機標定(數字)模型型別和初始引數設定
CalibDataID:標定模型控制代碼(標示符)
CameraIdx:相機索引號(編號)
CameraType:相機的型別
CameraParam:初始相機的內部引數
3. set_calib_data_calib_object( : : CalibDataID, CalibObjIdx, CalibObjDescr : )
定義校準物件相機校準資料模型的索引
CalibDataID:標定模型控制代碼(標示符)
CameraIdx:相機索引號(編號)
CalibObjDescr:三維點座標或檔名
4.find_caltab(Image : Caltab : CalTabDescrFile, SizeGauss, MarkThresh, MinDiamMarks : )
分割標定板區域
Image:影象
Caltab:標定板區域
CalTabDescrFile:檔名
SizeGauss高斯濾波核大小
MarkThresh閾值
MinDiamMarks:標定板上圓的最小直徑(畫素單位)
5.find_marks_and_pose(Image, CalTabRegion : : CalTabDescrFile, StartCamParam, StartThresh, DeltaThresh, MinThresh, Alpha, MinContLength, MaxDiamMarks : RCoord, CCoord, StartPose)
從影象中提取2D校準標記和外部攝像機引數計算的初始值
Image:影象
CalTabRegion:影象區域
CalTabDescrFile:檔名
StartCamParam:相機的內部引數初始值
StartThresh:初始閾值,用於輪廓檢測
DeltaThresh:StartThresh值連續減少到MinThresh的步長
MinThresh:用於輪廓檢測的最低閾值
Alpha:過濾器引數,用於輪廓檢測
MinContLength:標定圓的最小的輪廓長度
MaxDiamMarks:標定圓的最大直
RCoord:標定圓的ROW座標值(輸出值)
CCoord:標定圓的Cloumn座標值(輸出值)
StartPose:外部相機引數的估計(輸出值)
6.calibrate_cameras( : : CalibDataID : Error)
執行相機標定
CalibDataID:標定模型控制代碼(標示符)
Error:最優投影誤差(輸出值)
7.set_origin_pose( : : PoseIn, DX, DY, DZ : PoseNewOrigin)
| 1 0 0 DX |
PoseNewOrigin = PoseIn * | 0 1 0 DY |
| 0 0 1 DZ |
| 0 0 0 1 |
設定新的座標原點,控制輸入為原始的位姿和沿著世界座標系的三個座標軸的平移量,控制輸出為新的位姿
PoseIn:初始位姿
DX,DY,DZ沿各座標軸的平移值

StartCamPar := [0.016,   0,    0.0000074,    0.0000074,   326,   247,    652,    494]

解釋一下這個陣列的意思。

面陣相機有14或18個引數(根據想相機的畸變模式),對於線陣相機有17個引數。這些引數可以分開為內部相機引數、外部相機引數。

面陣相機(division模式)

Focus(焦距):遠焦鏡頭鏡頭焦距的長度

Kappa:扭曲係數

Sx,Sy:兩畫素間距

Cx,Cy:中心點座標

Whith,Height:影象的寬高

面陣相機(polynomia模式):

Focus(焦距):遠焦鏡頭鏡頭焦距的長度

K1, K2, K3, P1,P2:扭曲係數

Sx,Sy:兩畫素間距

Cx,Cy:中心點座標

Whith,Height:影象的寬高

線陣相機不做具體介紹