先看效果图
0.环境
需要有安装pcl(c版本即可)
1.生成点云文件
修改“png2pcd”文件夹中“pcl_test.cpp"中的内参,如下图:
其中,相机内参可从“intrinsics.json”文件中获得,camera_cx为ppx,camera_cy为ppy。
进入build文件夹,打开终端,输入:
cmake ..
make
将第0帧的rgb图和深度图复制到build文件夹下,并命名为“rgb.jpg",“depth.png”.
在终端中输入:
./pcl_test
输出:
point cloud size=303181
Point cloud saved.
生成pointcloud.pcd文件。
输入
pcl_viewer pointcloud.pcd
查看点云
输入:
pcl_pcd2ply pointcloud.pcd duck.ply
将pointcloud.pcd文件转为duck.ply文件。pointcloud.pcd为输入的pcd文件,duck.ply为想要输出的ply文件的命名。
将duck.ply文件拖入meshlab中手动进行裁剪,裁剪完毕并保存。
点击Draw XYZ axes in world coordinates,显示出相机坐标系,点击Filters—>Normals,Curvatures and Orientation—>Transform:Translate,center,set origin,将裁剪后的点云移动到相机坐标系原点附近,将调整的平移矩阵输入到,get_pose.py中的current_transformation 矩阵里。注意,千万点击apply按钮,也不要进行保存。
此时可以使用任意编译器重新打开duck.ply文件,包含了有关点云的一些信息,如下图:
紧接着在meshlab中点击Filters—>Normals,Curvatures and Orientation—>Transform:Scale,Normalize,将x、y、z分别缩小1000倍。
将get_pose.py放在ObjectDatasetTools文件夹下,并运行,进行ICP,生成pose_gt.npy文件。
python get_pose.py
#期间需要不断修正get_pose.py中,current_transformation 里的数值,直到匹配完美。
运行如下代码生成mask和yaml文件
python generate_yaml.py
结果如下