前言
本项目是数字图像处理课程的大作业,选题为人腿跟踪的机器人。与之前实验不同的是本次实验将应用到机器人平台进行验证,所以使用了ROS系统控制。
开发环境
- Ubuntu18.04
- ROS melodic
- Opencv3
研究目标
1、实现机器小车识别并跟踪人腿的功能
研究内容
1、采用颜色分割算法,实现对黑色的提取功能。
2、采用特征提取算法,实现对已分割图像的有效轮廓提取。
3、采用运动决策算法,实现依据有效轮廓对小车的运动控制。
算法实现
针对颜色分离功能
1.1 先对图像进行伽马变换,使从摄像头获得的图片变亮,利于后续的颜色选择
1.2 对图片进行高斯模糊,消去噪声,
1.3 将图片从RGB色度空间转换到HSV色度空间,利于图像的颜色分割。
1.4 对提取的图片进行灰度变换并进行开运算,减少其他区域干扰。
源程序:
伽马校正(网上复制粘贴的)
1 | void GammaCorrection(Mat src, Mat &dst, float fGamma) |
颜色分割
1 | void Separate(Mat src,Mat &dst) |
针对特征识别功能
2.1 对处理后的灰度图进行寻找轮廓,绘画轮廓边框和轮廓中心点,判断边框是否是所需要的轮廓边框。
2.2 判断依据有矩形的长宽比是否为长边形,边框是否是大致竖直状态,边框大小是否处于面积阈值范围。
2.3 得到人腿的准确边框。
源程序:
1 | //两点间距离 |
针对运动决策功能
3.1 对得到的边框进行筛选,并依据边框的大小进行判断目标的远近,边框中心点与图像中心点比较得到目标的左右偏离位置
3.2 依据具体大小,偏离距离进行角速度和线速度的规划,并设置阻尼函数,使小车运行,线速度随远近而变大或变小,角速度随偏离距离增加或减小。
3.3 最终实现机器人的人腿跟踪识别。
源程序:
运动规划
1 | double vec=0; |
阻尼函数
1 |
|
实验结果
分别对颜色分割、特征提取、运动决策功能进行了实验验证,实验过程介绍
结果1:对色度空间的转换和伽马变换实现了对黑色较好的的颜色分割。
结果图:
结果2:对已分割完成后的图片进行轮廓绘画并标出其中心点,并依据判断条件去除不符合条件的边框。
结果图:
结果3:根据轮廓中心点与图像中心点的坐标判断,得到机器人左右控制的速度指令。根据轮廓面积的大小控制机器人前进的速度大小。
结果图:
结论
本文设计了颜色分离,特征提取,运动决策算法,实现了对黑色的提取、对分离图片的边框选取、对机器人小车的运动控制功能,取得了有效提取并分离出黑色、对已分割图片轮廓的完好提取并绘画边框、较良好的控制小车的运动的效果。实验过程说明了颜色分割效果较好、轮廓边框判断选取准确、小车速度转速控制稳定。
本文设计的算法具有如下优缺点:
优点:使用最基础的算法和代码实现了较为良好的效果;算法条理清晰,并可以消除大量黑色干扰物体;消除了小车突然启动时的速度突变现象。
缺点:背景中不能有大块的黑色干扰,否则会与人腿形状融合导致无法成为有效边框;只能识别纯色裤子的人腿,非常花哨的裤子可能会干扰;多个轮廓直接停止运动,不会继续跟随
可以通过哪些方法进行改进:通过深度学习或者模式识别,直接针对人腿进行识别,可以较为良好的避免背景中的干扰,并且不再收到颜色的干扰;刚出现多个轮廓时,直接跟踪最大轮廓。