设定参数的合理范围
Abstract:防止误操作产生的计算结果错误
注意事项:
- 预设定的参数是针对某一种车型,更换车型需要更换对应参数,不具有普适性
- 设定的阈值范围,随便写的,最好根据结果检查更换
之前写的0.8倍和1.2倍,蠢傻了,有负数的情况没考虑,还有0附近正负号不同的没考虑,直接写成固定的范围吧。 函数如下:
def check_extrinsics(name, Rm, t):
camera_params = {
'front': {
'stdr': [-1.57832842, 1.56670056, -0.926896],
'stdt': [2.96162933, 0.00612163, 0.50377137]
},
'left': {
'stdr': [-2.05037522, 0.01743709, -0.01148798],
'stdt': [2.82177469, 0.77669845, 0.81534745]
},
'right': {
'stdr': [0.00586385, -2.68962607, 1.60761564],
'stdt': [2.82664541, -0.78649207, 0.82121494]
},
'rear': {
'stdr': [-1.54914688, -1.53390615, 0.95214789],
'stdt': [-0.61646916, -0.01037315, 0.55261138]
}
}
if name not in camera_params:
raise ValueError("No such camera name!")
params = camera_params[name]
stdr = params['stdr']
stdt = params['stdt']
for r_val, std_r in zip(Rm, stdr):
if not (std_r - 0.3 < r_val < std_r + 0.3):
print(f'stdr low:{std_r - 0.3}')
print(f'stdr high:{std_r + 0.3}')
print(f'r_val:{r_val}')
return False
for t_val, std_t in zip(t, stdt):
if not (std_t - 0.3 < t_val < std_t + 0.3):
print(f'stdt low:{std_t - 0.3}')
print(f'stdt high:{std_t + 0.3}')
print(f't_val:{t_val}')
return False
return True
这样使用就好:
if(not check_extrinsics(name, Rm_flat, T_flat)):
raise ValueError("wrong extrinsic number, check result")
可以顺便加一个重投影误差:
# ===================== reprojection error ================
pts_2d_reproj, _ = cv2.projectPoints(dst_3d, R_exp, t, camera_model.new_camera_matirx, distCoeffs)
pts_2d_reproj = pts_2d_reproj.reshape(-1, 2)
reprojection_error = np.mean(np.linalg.norm(src - pts_2d_reproj, axis=1))
print(f"===========>\033[33m平均重投影误差: {reprojection_error:.4f} 像素\033[0m")
# =====================wnd of reprojection error ================
Last modified on 2025-12-25