学习期间,自己研究了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。
暂时写到这里,下一篇介绍如何改进鼠标函数。