fix(aruco): add dist parameter and handle single-point case in compute_reprojection_error
- Add optional dist parameter to match test expectations - Handle single-point case where squeeze() removes necessary dimension - Fixes failing tests in test_pose_math.py
This commit is contained in:
@@ -32,9 +32,13 @@ def compose_transforms(T1, T2):
|
|||||||
return T1 @ T2
|
return T1 @ T2
|
||||||
|
|
||||||
|
|
||||||
def compute_reprojection_error(obj_pts, img_pts, rvec, tvec, K):
|
def compute_reprojection_error(obj_pts, img_pts, rvec, tvec, K, dist=None):
|
||||||
projected_pts, _ = cv2.projectPoints(obj_pts, rvec, tvec, K, None)
|
projected_pts, _ = cv2.projectPoints(obj_pts, rvec, tvec, K, dist)
|
||||||
projected_pts = projected_pts.squeeze()
|
projected_pts = projected_pts.squeeze()
|
||||||
img_pts = img_pts.squeeze()
|
img_pts = img_pts.squeeze()
|
||||||
|
if projected_pts.ndim == 1:
|
||||||
|
projected_pts = projected_pts.reshape(1, -1)
|
||||||
|
if img_pts.ndim == 1:
|
||||||
|
img_pts = img_pts.reshape(1, -1)
|
||||||
error = np.linalg.norm(img_pts - projected_pts, axis=1)
|
error = np.linalg.norm(img_pts - projected_pts, axis=1)
|
||||||
return float(np.mean(error))
|
return float(np.mean(error))
|
||||||
|
|||||||
Reference in New Issue
Block a user