单目3D检测-坐标系、数据集

文章详细阐述了3D目标检测中不同坐标系的转换,包括像素坐标、图像坐标、相机坐标和世界坐标,以及它们之间的转换关系。同时,介绍了Kitti数据集的文件结构,如calib文件中的相机内外参矩阵,以及label文件中的物体标签信息,包括类别、截断、遮挡程度、观察角度等。

0.单目3D检测任务

( c , x , y , z , w , l , h , θ ) (c,x,y,z,w,l,h,\theta) (c,x,y,z,w,l,h,θ)
θ \theta θ: 目标在三维空间中相对于水平方向的航向信息

图1 3D物体的观察角和方位角

1.坐标系转换关系:

在这里插入图片描述

1.1.像素坐标系

o − u , v o-u,v ou,v:

描述物体在数字图像中的位置,单位为像素(pixel),该坐标系以图像顶点作为坐标原点,u、v 轴分别平行于图像坐标系的 x、y 轴。

1.2图象坐标系

O − x , y O-x,y Ox,y:

反映了成像过程中二维-三维的投影关系,通过连续的实际物理量描述物体在图像平面中的位置,单位为毫米,以垂直于图像平面的相机光轴和图像平面的交点作为坐标原点,由于相机光心往往存在偏移,因此该原点通常并不是图像中心

1.3相机坐标系:

O c − X c , Y c , Z c O_c-X_c,Y_c,Z_c OcXc,Yc,Zc: 主要是和其他传感器、物体的位置做区分。

描述空间中目标物体相对于相机的位置而引入的坐标系,单位为米(m),坐标系原点在相机光心,规定垂直于图像平面的相机光轴为Zc轴正方向,垂直向下为Yc正方向,按右手坐标系来建立坐标系.

kitti数据集中相机坐标系如图所示:
在这里插入图片描述

1.4.世界坐标系

O w − X w , Y w , Z w O_w-X_w,Y_w,Z_w OwXw,Yw

### 单目3D目标检测在KITTI数据集上的实现 对于单目3D目标检测,在KITTI数据集上存在多种有效的算法和技术。一种流行的方法是通过伪激光雷达(Pseudo-LiDAR),该技术利用图像中的深度估计来构建点云,从而使得基于LiDAR的传统3D对象检测器能够应用于仅具有摄像头输入的情况[^1]。 #### 使用伪激光雷达进行单目3D目标检测 具体来说,研究者们提出了从视觉深度估计创建伪激光雷达的技术,这有助于弥合自动驾驶领域中3D目标检测的差距。这种方法不仅提高了模型性能,还减少了对昂贵传感器的需求。为了进一步提升精度,可以采用更先进的神经网络架构来进行深度预测,并将其转换成类似于真实LiDAR扫描的结果用于后续处理。 ```python import numpy as np from PIL import Image import torch from torchvision.transforms import ToTensor def load_depth_map(image_path): """加载并预处理深度图""" img = Image.open(image_path).convert('L') tensor_transform = ToTensor() depth_tensor = tensor_transform(img) return depth_tensor.unsqueeze(0) def pseudo_lidar_from_depth(depth_image, intrinsic_matrix): """根据给定的相机内参矩阵将深度图转化为伪激光雷达成像""" h, w = depth_image.shape[-2:] y_range = np.arange(h)[:, None].repeat(w, axis=1)[None,...] x_range = np.arange(w)[None,:].repeat(h, axis=0)[None,...] fx,fy,cx,cy = intrinsic_matrix[0][0],intrinsic_matrix[1][1],\ intrinsic_matrix[0][2],intrinsic_matrix[1][2] z = depth_image.view_as(torch.ones_like(x_range)) x = (x_range - cx)/fx * z y = (y_range - cy)/fy * z points_3d = torch.cat([x,y,z],dim=0).permute((1,2,0)).reshape(-1,3) return points_3d.numpy() # 加载测试图片路径以及相机参数文件... depth_img_path = 'path/to/your/kitti/depth/image.png' camera_intrinsics = [[7.215377e+02, 0., 6.095593e+02], [0., 7.215377e+02, 1.728540e+02]] depth_data = load_depth_map(depth_img_path) pseudo_points = pseudo_lidar_from_depth(depth_data, camera_intrinsics) ``` 此代码片段展示了如何读取来自KITTI数据集中的一张深度图,并依据已知摄像机内部校准信息生成相应的三维坐标系下点的位置集合——即所谓的“伪激光雷达”。 #### 双目立体匹配辅助下的改进方案 除了上述提到的单目方法外,还有其他工作探索了结合双目视觉的优势来增强3D目标识别的效果。例如,“Triangulation Learning Network”就是这样一个例子,它可以从单一视逐渐过渡到多视图设置以提高准确性;而Stereo R-CNN则专注于开发专门针对立体图像对的目标探测框架[^2]。 尽管这些不是纯粹意义上的单目解决方案,但对于理解整个领域的进展仍然非常重要,因为它们提供了额外的信息源,可用于验证和补充纯单目的结果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值