Halcon - 将坐标转移到不同的平面
Posted
技术标签:
【中文标题】Halcon - 将坐标转移到不同的平面【英文标题】:Halcon - Shift coordinates to a different plane 【发布时间】:2021-03-15 05:31:16 【问题描述】:我有相对于姿势上特定平面的坐标 (X/Y)。
我需要知道 Y 值如何变化,如果从相机的视角将点投影到另一个平面,该平面位于 Z 方向上 10 毫米之外。
我发现的唯一方法是使用project_3d_point
将我的 X/Y 点转换为图像坐标,然后使用 z 位移姿势将其转换回世界坐标。
问题在于图像分辨率太低而无法获得精确值。这可以在不使用图像坐标的情况下计算吗?在图片中,我有 Y1 和 Y2,需要 Y3 和 Y4。
编辑:
这是我试图解决的其他问题,但我很确定它是垃圾:
计算姿势是在原点姿势的姿势。 Z=0.01
set_origin_pose (CalculationPose, 0, 0, Z, ZShiftedPose)
pose_to_hom_mat3d(ZShiftedPose, HomMat3D)
projective_trans_point_3d( HomMat3D, 0, Y1, 0, dummy, ZY1, dummy)
编辑 2:
这行得通,但它非常丑陋。有没有更聪明更好的方法来解决这个问题?
set_origin_pose (CalculationPose, 0, 0, Z, ZShiftedPose)
pose_to_hom_mat3d(CalculationPose, HomMat3DCalc)
pose_to_hom_mat3d(ZShiftedPose, HomMat3DShift)
affine_trans_point_3d(HomMat3DCalc, 0, Y1, Z, a, b, c)
project_3d_point( a, b, c, CameraParam , Row, Column)
image_points_to_world_plane(CameraParam, CalculationPose,Row,Column,'mm',dummy,Y3)
【问题讨论】:
【参考方案1】:试试这个:
* -----------
* Data simulation
* -----------
* Camera Pose
TransX := 0
TransY := -0.5
TransZ := 1
RotX := 30
RotY := 0
RotZ := 0
OrderOfTransform := 'Rp+T'
OrderOfRotation := 'gba'
ViewOfTransform := 'point'
create_pose (TransX, TransY, TransZ, RotX, RotY, RotZ, OrderOfTransform , OrderOfRotation, ViewOfTransform , CamPose)
Focal_m := 0.00173333
PixelSize_m :=5.2e-006
CameraParam := [Focal_m, 0, PixelSize_m , PixelSize_m , 640, 512, 1280, 1024]
* Point1 with world coordinate system
Xw1 :=0
Yw1 :=0.2
Zw1 :=0
* -----------
* Calculation
* -----------
* Focal Point with world coordinate system
Xfocalw := -CamPose[0]
Yfocalw := -CamPose[1]
Zfocalw := -CamPose[2]
Zw3 :=0.1
Xw3 := 1.0*(Xw1-Xfocalw)/(Zw1-Zfocalw)*(Zw3-Zw1)+Xw1
Yw3 := 1.0*(Yw1-Yfocalw)/(Zw1-Zfocalw)*(Zw3-Zw1)+Yw1
【讨论】:
以上是关于Halcon - 将坐标转移到不同的平面的主要内容,如果未能解决你的问题,请参考以下文章