设定参数的合理范围

Abstract:防止误操作产生的计算结果错误

注意事项

  1. 预设定的参数是针对某一种车型,更换车型需要更换对应参数,不具有普适性
  2. 设定的阈值范围,随便写的,最好根据结果检查更换

之前写的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