ROS下自动实现目标检测与跟踪(一)

学习期间,自己研究了ROS下的目标自动检测与自动跟踪,最终将算法应用到移动机器人实现自动跟随。

要想实现自动检测与自动跟踪,第一步要做的就是完成目标的自动检测,这里不多说了,你可以在ROS下搭建自己的目标检测平台,算法基于YOLO系列,SSD系列,两者的改进算法系列都可以,具体选择因个人爱好及项目需求而定。

实现流程:
1.目标自动检测
这里不多说,因为每个人都不一样,自己按要求实现即可。
2.KCF算法改进
具体改进算法因涉及到个人核心研究内容,这里不多说,感兴趣可以私信。现在介绍一下改进的鼠标函数。

KCF算法有一个弊端,初始化时必须用鼠标人工选取跟踪目标,这大大降低了算法适用性。若要实现自动跟踪,则需要自动初始化跟踪目标,其改进也必须在鼠标函数里面改,鼠标函数代码如下:

void onMouse(int event, int x, int y, int, void*)
{
    if (select_flag)
    {
        selectRect.x = MIN(origin.x, x);
        selectRect.y = MIN(origin.y, y);
        selectRect.width = abs(x - origin.x);
        selectRect.height = abs(y - origin.y);
        selectRect &= cv::Rect(0, 0, rgbimage.cols, rgbimage.rows);
    }
    if (event == CV_EVENT_LBUTTONDOWN)
    {
        bBeginKCF = false;
        select_flag = true;
        origin = cv::Point(x, y);
        selectRect = cv::Rect(x, y, 0, 0);
    }
    else if (event == CV_EVENT_LBUTTONUP)
    {
        select_flag = false;
        bRenewROI = true;
    }
}

鼠标函数的意义:
当按下鼠标左键时,这个点就是起始点,此时目标选择标签select_flag = true;按住鼠标左键移动鼠标,会选择感兴趣区域。松开鼠标左键,此时目标选择标签select_flag = false,bRenewROI = true;经按键操作后实现了所框目标的位置信息,即selectRect。

暂时写到这里,下一篇介绍如何改进鼠标函数。

你可能感兴趣的:(学习总结,目标检测,人工智能,python)