@@ -81,32 +81,35 @@ def cvtFootInch2Meter(ft, inch=0.0):
8181 [cvtFootInch2Meter (0 , 140 + 30 ), cvtFootInch2Meter (0 , 0 - 5 )- 1.46 + 0.151 ], # RR
8282])
8383
84- def cvtOriginImgPixel2DToVehicleFrameMeter3D (TransMat , pixelPointXY ):
85- """
86- pixelPointXY: (u, v) in original image (pixel)
87- TransMat: 3x3 perspective transform matrix (pixel -> real world meter)
88- """
89- BASE_VEHICLE_DIST = 1.10
90-
91- point = np .array ([pixelPointXY [0 ], pixelPointXY [1 ], 1.0 ], dtype = np .float32 ).reshape (3 , 1 )
92-
93- transformed = TransMat @ point
94- transformed /= transformed [2 , 0 ]
84+ def cvtOriginImgPixels2DToVehicleFrameMeter2D (TransMat , pixelPointXYs ):
85+ BASE_VEHICLE_DIST = 1.10 # meter
86+
87+ # Add homogeneous coordinate: [u, v, 1]
88+ N = pixelPointXYs .shape [0 ]
89+ homogeneous_points = np .hstack ([pixelPointXYs , np .ones ((N , 1 ), dtype = np .float32 )]) # (N, 3)
90+
91+ # Apply perspective transform
92+ transformed = (TransMat @ homogeneous_points .T ).T # (N, 3)
93+
94+ # Normalize (divide by last coordinate)
95+ transformed /= transformed [:, [2 ]]
9596
96- x_real = transformed [0 , 0 ]
97- y_real = transformed [1 , 0 ]
98- z_real = 0.0
97+ x_real = transformed [: , 0 ]
98+ y_real = transformed [:, 1 ]
99+ z_real = np . zeros_like ( x_real )
99100
101+ # Convert to vehicle pointcloud coordinate
100102 x_pc = - y_real
101103 y_pc = - x_real
102104 z_pc = z_real
103105
104- return np .array ([x_pc + BASE_VEHICLE_DIST , y_pc , z_pc ], dtype = np .float32 )
106+ # Return: x + front base distance offset
107+ return np .stack ([x_pc + BASE_VEHICLE_DIST , y_pc , z_pc ], axis = 1 )
105108
106109
107- def fr_cam_2d_to_vehicle_3d (fr_2d_pt ):
110+ def fr_cam_2d_to_vehicle_3d (fr_2d_pts ):
108111 TransMat = cv2 .getPerspectiveTransform ( np .float32 (pixelFrontRightCamListXY ),
109112 np .float32 (worldFrontRightCamListXY ))
110113
111- result = cvtOriginImgPixel2DToVehicleFrameMeter3D (TransMat , fr_2d_pt )
114+ result = cvtOriginImgPixels2DToVehicleFrameMeter2D (TransMat , fr_2d_pts )
112115 return result .tolist ()
0 commit comments