(我的部分:图像滤波,分割,跟踪提取障碍物,维护障碍物队列)
由于三维雷达点云的处理耗时太长,为了保证实时性,折中之法:将三维激光雷达扫描到的三维点投影到二维平面(去掉Z坐标),生成二维栅格图像,再采用opencv针对图像的处理方法分割提取障碍物,并采用KCF跟踪算法跟踪运动的障碍物:
//KCF跟踪提取障碍物队列
void Preprocess::Tracking_KCF_For_Obstacle(cv::Mat image, vector<Msg::ObstacleMoveParameter> &SuspectObstacleQueue, vector<Msg::ObstacleMoveParameter> &ActualObstacleQueue, vector<cv::Rect2d> &ROIs)
{
cv::Mat frame;
cv::Mat imageForRect;
vector<cv::Rect2d> rects;
frame = Preprocessing03(image, rects, imageForRect);//frame是8U
cv::Mat framefortracking = frame.clone();//framefortracking是8U
if (rects.size() < 1)
{
cout << "rects is empty" << endl;
return;
}
else frameCount++;
cout << "rects.size():" << rects.size() << endl;
cout << "frameCount=" << frameCount << endl;
if (SuspectObstacleQueue.empty())//怀疑障碍物为空或者为头帧
{
RectsToSuspectObstacleQueue(Suspe