IPM逆透视变换问题(1):Vanish Point

IPM逆透视变换问题(1):Vanish Point

!!!重要提醒:首先确定坐标系朝向,简化步骤必须做出说明。

1. 坐标系

world  coord [x-right,y-front,z-up]
camera coord [x-right,y-down,z-front]
image  coord [x-right,y-down,z-front(1)]
pixel  coord [u-right,v-down]

2. 相机参数和姿态

# camera intrinsic parameter
cam_inpm = [640,640,640,512] #[f_x, f_y, c_x, c_y] [pixel,pixel,pixel,pixel] 
# camera extrinsic parameter
cam_expm = [0.0,0.0,3.0, 0.0,-8.0,6.0] # [x,y,z,roll,pitch,yaw] [m,m,m,deg,deg,deg]
mat_in = np.array([[cam_inpm[0],0,cam_inpm[2]],
                   [0,cam_inpm[1],cam_inpm[3]],
                   [0,0,1]])
                   
sr = np.sin(cam_expm[3]/180*np.pi)
cr = np.cos(cam_expm[3]/180*np.pi)
sp = np.sin(cam_expm[4]/180*np.pi)
cp = np.cos(cam_expm[4]/180*np.pi)
sy = np.sin(cam_expm[5]/180*np.pi)
cy = np.cos(cam_expm[5]/180*np.pi)

mat_wx = np.array([[1.0,0.0,0.0],[0.0,cr,-sr],[0.0,sr,cr]],dtype=float)
mat_wy = np.array([[cp,0.0,sp],[0.0,1.0,0.0],[-sp,0.0,cp]],dtype=float)
mat_wz = np.array([[cy,-sy,0.0],[sy,cy,0.0],[0.0,0.0,1.0]],dtype=float)
mat_ww = mat_wz @ mat_wy @ mat_wx   #extrinsic rotation z-y-x

mat_cc = np.array([[1.0,0.0,0.0],[0.0,0.0,1.0],[0.0,-1.0,0.0]],dtype=float)
mat_wc = mat_ww @ mat_cc

3. 设定消失点(sys_world)

# if only z_w=0 and x_w=0, so y_w=1/(cy*cr), 			so vp_pp = [707.92777905 422.05386579]
# if only z_w=0,           so x_w=-sy/cr and y_w=cy/cr, so vp_pp = [640.         422.05386579]
vp_ww = np.array([[0.0,1/(cy*cr),0.0]],dtype=float).T

4. 计算消失点(sys_pixel)

vp_cc = mat_wc.T @ vp_ww    
vp_ii = vp_cc / vp_cc[2,0]   #this line unnecessary, could be commented
vp_pp = mat_in @ vp_ii
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
可以使用字典的 `items()` 方法来遍历字典的键值对,然后按照需要的格式整理代码。以下是一个示例代码: ```python def format_dict_code(dictionary): code = "" for key, value in dictionary.items(): code += f"{key}: {value}, " code = "{" + code.rstrip(", ") + "}" return code total_obj_num_distance_dict_code = format_dict_code(total_obj_num_distance_dict) tolerance_num_point_code = format_dict_code(tolerance_num_point) tolerance_num_vanish_point_code = format_dict_code(tolerance_num_vanish_point) tolerance_num_via_box_code = format_dict_code(tolerance_num_via_box) tolerance_num_combine_code = format_dict_code(tolerance_num_combine) distance_error_sum_point_code = format_dict_code(distance_error_sum_point) distance_error_sum_vanish_point_code = format_dict_code(distance_error_sum_vanish_point) distance_error_sum_via_box_code = format_dict_code(distance_error_sum_via_box) distance_error_sum_combine_code = format_dict_code(distance_error_sum_combine) print(f"total_obj_num_distance_dict = {total_obj_num_distance_dict_code}") print(f"tolerance_num_point = {tolerance_num_point_code}") print(f"tolerance_num_vanish_point = {tolerance_num_vanish_point_code}") print(f"tolerance_num_via_box = {tolerance_num_via_box_code}") print(f"tolerance_num_combine = {tolerance_num_combine_code}") print(f"distance_error_sum_point = {distance_error_sum_point_code}") print(f"distance_error_sum_vanish_point = {distance_error_sum_vanish_point_code}") print(f"distance_error_sum_via_box = {distance_error_sum_via_box_code}") print(f"distance_error_sum_combine = {distance_error_sum_combine_code}") ``` 这段代码将会输出整理好的代码,你可以根据需要将其复制到你的程序中。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值