Halcon 位姿跟座標變換的關係
我們知道相機標定可以得到相機內參跟相機外參,而相機外參就是參考世界座標系轉換到相機座標系的位姿,也就是在相機座標系下世界座標系的位姿
可以把位姿轉換為相機座標系下的轉換矩陣,通過pose_to_hom_mat3d
pose_to_hom_mat3d (PoseOfWCS, camHwcs)
//轉換矩陣轉換為位姿
hom_mat3d_to_pose (camHwcs, PoseOfWCS)
//vector_to_pose 可以根據提供的世界座標值跟影象座標值對映得到相機座標系的位姿
vector_to_pose( : : WorldX, WorldY, WorldZ, ImageRow, ImageColumn, CameraParam, Method, QualityType : Pose, Quality)
//得到轉換矩陣可以呼叫affine_trans_point_3d得到
affine_trans_point_3d( : : HomMat3D, Px, Py, Pz : Qx, Qy, Qz)
//定義了世界座標相對物件座標下的座標
ShiftXObj := 5.5 / 1000.0
ShiftYObj := 5.15 / 1000.0
ControlX := [18.73,-5.35,13.05,0.00] / 1000.0 + ShiftXObj
ControlY := [27.52,27.68,0.00,0.00] / 1000.0 + ShiftYObj
ControlZ := [0.00,0.00,0.00,0.00]
vector_to_pose (ControlX, ControlY, ControlZ, RowCenter, ColCenter, CamParam, 'iterative', 'error', PoseOfObject, Errors)//根據這個對映關係得到相機座標系的物件位姿
pose_to_hom_mat3d (PoseOfWCS, camHwcs)//相機座標系下的世界座標轉換得到相機座標系的轉換矩陣
pose_to_hom_mat3d (PoseOfObject, camHobj)//相機座標下的位姿
* Determine the transformation matrix from object coordinates into world coordinates
hom_mat3d_invert (camHwcs, wcsHcam)
hom_mat3d_compose (wcsHcam, camHobj, wcsHobj)
* 定義了物件座標系的3D座標位姿
CornersXObj := [0.89,0.77,12.12,12.18] / 1000.0 + ShiftXObj
CornersYObj := [21.63,8.47,8.45,21.51] / 1000.0 + ShiftYObj
CornersZObj := [0,0,0,0]
* 把物件座標位姿轉換到世界座標系的位姿
affine_trans_point_3d (wcsHobj, CornersXObj, CornersYObj, CornersZObj, CornersXWCS, CornersYWCS, CornersZWCS)
* 把3D座標位姿轉換到相機座標系的位姿
affine_trans_point_3d (camHobj, CornersXObj, CornersYObj, CornersZObj, CornersXCam, CornersYCam, CornersZCam)
//把相機座標系的位姿對映到影象的實際座標畫素
project_3d_point (CornersXCam, CornersYCam, CornersZCam, CamParam, CornersRow, CornersCol)