使用深度相机制作自己的Linemod数据集
1 实施方案
1.1 任务描述
- 制作自己的Linemod数据集(最终目的示意如下图)
1.2 整体方案
- 通过构建物体和标定板的坐标转换关系,然后构建标定板和相机坐标的转换关系,然后通过映射函数构建3D坐标和图像像素坐标的映射关系。拍摄一系列照片然后将每张图像获取其外参矩阵,最后通过相机标定后的映射函数将三维关键点投影到二维图像坐标,然后得到第一幅图像的数据标签。接着移动相机位置继续拍摄图像,通过标定板获取第二幅图像9个点的3维坐标,重复上述过程。
1.3 环境需求
- 软件及库;
Ubuntu16.04环境
ros kinect安装
kinect2的驱动libfreenect2 和iai_kinect2
ork功能包 - 硬件;
Kinect V1/V2、Intel realsense等深度相机;
待标注物体(最好选非对称物体,纹理较少的物体);
2 实施流程
2.1 环境搭建
2.2 视频图像数据record
2.3 生成物体场景3D模型点云
- 生成的默认保存为.Ply点云模型。对于一个物体,得到三角面数为n的3D模型,获取数据点数为3n,每个点包含如下顺序的9个值分别为,空间坐标分量,旋转分量,颜色分量:
float x
float y
float z
float nx
float ny
float nz
uchar red
uchar green
uchar blue
2.4 MashLab裁剪点云模型
使用第三方软件读取点云数据然后手动裁剪
MashLab说明
- 主要功能
3D采集;对齐,重建,颜色映射和纹理;清洗3D模型;缩放,定位和定向;简化,细化和重新划分;测量和分析;3D模型转换和交换;比较模型;利用光栅图层进行图像集成。 - 名称意义
FOV:摄像机视野;FPS:每秒传输帧数;Vertices:模型点数;Faces:模型面数 - 支持文件格式
stl、off、obj、ply、ptx、v3d、pts、xyz等
2.5生成物体在像素坐标下的二维坐标标签
- 将三维关键点投影到二维
- 使用yolo-6d提供的计算投影函数来投影,需要知道相机的内参矩阵以及对应的旋转和平移矩阵
- 对应的9个点3d位置为三维边界框的8个角和三维对象模型的质心定义为对象的虚拟关键点。8个角对应于三维对象模型的[[min_x, min_y, min_z], [min_x, min_y, max_z], [min_x, max_y, min_z], [min_x, max_y, max_z], [max_x, min_y, min_z], [max_x, min_y, max_z], [max_x, max_y, min_z], [max_x, max_y, max_z]],其中质心点设置为[0, 0, 0],
- 对于获取的每张图像对应的21个标签数值,第一个为类别,第2-3个为质心点的x、y坐标,第4-19共18个值为对应8个角点的x、y坐标,20和21为八个点的x、y范围即其中的最大减最小,除类别外所有数据归一化保存。