前言
一种图像数据与激光雷达点云数据融合的c/c++方法实现,使用图像像素值给对应的点云着色。基于PCL点云库、OpenCV库、kitti数据集。
一、准备
1)运行环境:Ubuntu16.04(18.04也可)
2)安装OpenCV库;
3)安装PCL库;
4)kitti数据集,中的1组png图像及对应的bin点云文件,及坐标变换说明txt文件;
5)bin2pcd的app,用于把kitti数据集的bin点云文件转换成pcd文件。
参考:ubuntu16.04下用pcl库将点云bin文件转成pcd文件
二、点云图像融合(点云着色)
1. 数据读入
使用OpenCV读入png图像文件;使用PCL读入对应的pcd点云文件;
//图像读入
Mat img = imread(“000005.png”);
//点云读入
pcl::PointCloud<pcl::PointXYZRGB>::Ptr point_cloud_ptr(new pcl::PointCloud<pcl::PointXYZRGB>);
pcl::io::loadPCDFile (“5.pcd”, *point_cloud_ptr);
2. 变换矩阵准备
根据kitti数据集采集时标定的坐标转换公式,来计算由点云坐标中的点x(x, y, z, 1)到图像坐标中的y(u, v, 1)的变换:
其中,T为坐标变换旋转平移矩阵;
R(0)为各摄像头到摄像头0的修正矩阵;
P为各摄像头的内参矩阵;
在工程计算时需对各矩阵进行行列扩展:
各矩阵的元素值在kitti数据集的对应的calib/文件夹下:
提前计算出P * R * T