0

我有相对于姿势上特定平面的坐标(X/Y)。

我需要知道 Y 值是如何变化的,如果从相机的视角将点投影到另一个平面,即在 Z 方向上距离 10 毫米。

我发现的唯一方法是将我的 X/Y 点转换为图像坐标,project_3d_point然后使用 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)
             
            
4

1 回答 1

0

尝试这个:

* -----------
* 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
于 2020-12-03T13:56:23.383 回答