python编程
关注点分离
抽象-封装-复用-解耦
容错-自动化-协议
编程技术概念
索引
中断-回滚-模板替换
管道-并发-批量-异步-回调
等效
数据编程中等效
old_list,其中有一个索引pos列表,您想删除它:
new_list = [old_list[i] for i, e in enumerate(old_list) if i not in pos]
box计算角点
对于3d 标注框,首先在原点按照对象尺寸构建坐标点,然后利用ry旋转角度对目标进行旋转随后再平移到标注尺寸中。
根据中心点位置(x,y,z)/框尺寸h,w,l/朝向角 --》计算框体的8 个角点 velo_box: (n,8 ,3 )
中心点位置的定义: kitti标签里的中心点位置在物体下表面
二维矩形框坐标不同的dinginess
激光雷达坐标系中,z方向是高度方向,x方向是汽车前进方向,前进左手边方向为y方向(车身方向)
3D 物体的中心点位置
01.8 个角点分别沿x,y,z到中心点的距离(8 个角点到原点的坐标)原点和xyz的朝向有关
02 .旋转矩阵
03 .平移到标注尺寸中
示例
x_corners = [l / 2, l / 2, -l / 2, -l / 2, l / 2, l / 2, -l / 2, -l / 2]
y_corners = [0, 0, 0, 0, -h, -h, -h, -h]
z_corners = [w / 2, -w / 2, -w / 2, w / 2, w / 2, -w / 2, -w / 2, w / 2]
corners_3d[0, :] = corners_3d[0, :] + obj.t[0]
corners_3d[1, :] = corners_3d[1, :] + obj.t[1]
corners_3d[2, :] = corners_3d[2, :] + obj.t[2]
2d box计算角点
velo_box: (n,8 ,3 ) --》(n,4 )
投影前的3D BBox共计有8 个点,投影到图像坐标中也会有8 个点,
选取八个点中最大值最小值组成 (x1,y1,x2,y2)就是最终的2D BBox
坐标空间
#
视图矩阵view_mat和 投影矩阵proj_mat
投影矩阵(projection matrix),若矩阵A既是对称矩阵,又是幂等矩阵,则称A为投影矩阵
投影矩阵 * 观察空间坐标 = 剪裁空间坐标
透视投影中,视野使用视锥体框定,正交投影中用长方体框定. 长方体经过投影矩阵转换后
我们首先需要将本地空间,通过使用模型矩阵将其转换至世界空间。
再通过视口矩阵,将其转换为视口空间。
之后再乘上投影矩阵,就将视口空间转换为裁剪空间。
最后进行裁剪等操作使裁剪空间转换为屏幕空间
#
世界坐标 相机坐标 像素坐标 图像坐标
世界坐标系(Xw,Yw,Zw) 摄像机坐标系(Xc,Yc,Zc) 像素坐标系(u,v) 图像坐标系(x,y)
透镜由于制造精度以及组装工艺的偏差会引入畸变,导致原始图像的失真。因此我们需要考虑成像畸变的问题。
透镜的畸变主要分为径向畸变和切向畸变,还有薄透镜畸变等等
像素坐标系和图像坐标系都在成像平面上
图像坐标系 用物理单位(例如毫米)表示像素在图像中的位置。。
dx,dy表示每个像素在横轴x和纵轴y上的物理尺寸(单位为:mm/像素,单位像素的距离)
像素坐标系 就是以像素为单位的图像坐标系
像素坐标去畸变
Distorts --畸变
cv::fisheye::distortPoints
Distorts 2 D points using fisheye model.
cv::fisheye::undistortPoints
Undistorts 2 D points using fisheye model
对像素坐标去畸变要使用到cv2的undistortPoints ()函数
src, cameraMatrix, distCoeffs[, dst[, R[, P]]],
其中[ ]内的参数为可选参数。接收输出的数组dst可以直接通过等号进行赋值,而不一定需要提前建好然后丢进函数中
内参cameraMatrix,distCoeffs是畸变参数
输入和输出
src:图像的像素坐标点集合,类型是np.ndarray,维度可以是N×1 ×2 或者1 ×N×2
dst:输出的去畸变结果, 类型是np.ndarray,维度是N×1 ×2
camera_normalizedPoints = cv2.undistortPoints (camera_points, camera_K, camera_d)
N*8 *2 3 *3 4
1 *N*2
畸变 是 k1 k2 k3 p1
图像去畸变
对图像去畸变需要使用到undistort ()函数
普通相机模型畸变校正函数针对OpenCV中的cv::initUndistortRectifyMap (),
鱼眼相机模型畸变校正函数对应OpenCV中的cv::fisheye::initUndistortRectifyMap ()。两种方法算出映射Mapx和Mapy后,
统一用cv::Remap ()函数进行插值得到校正后的图像 输入输出变成了图像矩阵
cv2.fisheye.undistortPoints
cv2.fisheye.distortPoints
distortPoints分为鱼眼和窄角,又两种调用原型。
3 D to 2 D Points using cv::projectPoints
将带有畸变的点转换为不带畸变的点,在不带畸变的点上添加畸变,
因为要在一个带有畸变的图像上标注一个不带畸变的点,
那标注出的位置和我们真正的目标之间就有一定的偏差了,这个时候
只有在这些不带畸变的点上添加上畸变,这样才能适应带有畸变的图像。
添加畸变的过程就比较好理解了,
就是给不带有畸变的点添加上径向畸变和切向畸变,直接得到带畸变的点
k1,k2等为径向畸变参数,p1,p2为切向畸变参数
图像去畸变--点云映射的点加畸变
代码走读
def corners_nd (dims, origin=0.5 ):
corners_norm = corners_norm[[0 , 1 , 3 , 2 , 4 , 5 , 7 , 6 ]]
def rotation_3d_in_axis (points, angles, axis=0 ):
return np.einsum("aij,jka->aik" , points, rot_mat_T)
def center_to_corner_box3d (centers, dims, angles=None , origin=(0.5 , 0.5 , 0 ), axis=2 )
np.ndarray: Corners with the shape of (N, 8 , 3 ).
rot_mat = np.transpose(rot_mat, (2 , 0 , 1 ))
image_p = img_pts[:, :, :2 ] / img_pts[:, :, 2 :3 ]
np.newaxis 关键字,使用索引的语法给数组添加维度
np.expand_dims(arr,axis) 和newaxis实现功能一样,给arr添加维度
np.reshape(arr,newshape) 给一个维度设置newshape完成升维 对应的是shape resize()
np.pad() 函数使用:数组填充与扩展
np.transpose axis
参考
https://github.com/mit-han-lab/bevfusion/blob/main/mmdet3d/core/bbox/box_np_ops.py
图像去畸变和添加畸变 https://blog.csdn.net/weixin_38636815/article/details/115668228
KITTI数据集 激光雷达-图像坐标系转换关系 https://blog.csdn.net/zt1091574181/article/details/114838741
KITTI数据集可视化(二):点云多种视图与标注展示的可视化代码解析
https://blog.csdn.net/weixin_44751294/article/details/128569985
kitti数据集中---标注数据label_2 https://blog.csdn.net/suibianshen2012/article/details/130055526
3D框corner计算 https://zhuanlan.zhihu.com/p/151777998
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 如何使用 Uni-app 实现视频聊天(源码,支持安卓、iOS)
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
2021-06-09 Linux用户管理和硬盘管理