嵌入式AI设备--火星人视觉传感器--目标跟踪功能(根据颜色特征)

       目标跟踪是利用视觉传感器,选择特定物体作为特定目标,对该特定目标进行定位和跟踪的综合技术。因而处理过程可以分为两类:获取特征和目标跟踪。在实际环境中,特定目标是一些颜色鲜艳、饱和度高的物体,本功能实现首先在HSV域使用特征获取算法。

      参考代码示例:https://github.com/BluesYu/MarStech_Vision_Sensor/tree/master/track_color_mode

一,算法基本思想:

        实现原理:利用颜色空间来除去所有用户不感兴趣的背景,提取出前景。但是在实际的环境下却并不好做,因此他的识别也需要颜色尽量鲜艳,饱和度尽量好的物体,对于背景来讲,也尽量是光线较好、不突变的环境。

       (1)对像素点的处理: 
       摄像头的信息格式是YUV格式的,需要预处理:1、将YUV转为RGB的;2、处理该像素值得到U和V的值。

       (2)学习统计:

       对感兴趣域的比较统计 ,对于得到的U和V,Pixy将其作为“学习”的依据,即本算法的学习算法均是依靠此处的U和V来进行,得到ratios数组。

       (3)、进行“学习”:
        由(2)得到的ratios数组表征了用户给定区域的像素在该阈值左右的分布,假定给定一个该分布情况的界限,则阈值就可以根据当前分布与给定分布之间的大小进行自动调整(Pixy默认的界限是80%,即该阈值可以提取出图像区域80%的像素值):以U值为例,当图像在该阈值作用下,大于U阈值最小值的像素点有90%,则说明U阈值的最小值过小,此时应该向下调整,使该阈值增大,反之则反之。

二,特征获取基本思想:

            获取特征的函数 track_pic_get(Mat &pic)  和函数 track_get_pic(Mat &mat_temp, Rect &Rect_dst):

/******************************************************************************************************
* 函数(Function):     track_pic_get()
* 功能(Description):    用于采集参数
* 调用函数(Calls):cvtColor()、threshold()、bitwise_not()
* 输入参数(parameter):Mat& rgb:RGB三色矩阵
* 返回数值(return):   return -1:失败
                       return 0:成功
* 其他(Others):
********************************************************************************************************/
int track_pic_get(Mat &pic);


/******************************************************************************************************
* 函数(Function):    track_get_pic(Mat &mat_temp, Rect &Rect_dst)
* 功能(Description):      用于获取目标图像(切割出目标)
* 调用函数(Calls):findContours()、boundingRect()
* 输入参数(parameter):Mat &mat_temp:原始图像
                         RotatedRect &Rect_dst:目标图像(旋转矩形)
* 返回数值(return):return=(int)Rect_dst.area():目标矩形面积
* 其他(Others):
********************************************************************************************************/
int track_get_pic(Mat &mat_temp, RotatedRect &Rect_dst); //生成的范围

三,根据特征进行颜色追踪算法

        主要是三个函数:追踪函数:track_result(Mat &frame, Point &center, Point &w_h);调节范围函数:calcRatios8(Mat& uu, Mat& vv, struct ColorSignature *sig, float ratios[]),特征获取函数:HSVGet_track(Mat& rgb):

/******************************************************************************************************
* 函数(Function):    track_result(Mat &mat_temp, Point &center,Point &w_h)
* 功能(Description):      获取参数
* 调用函数(Calls):HSVUpdate_track()、findContours()、boundingRect()、minAreaRect()
* 输入参数(parameter):Mat &frame:输入图像
                         Point &center;矩形中心点
						 Point &w_h:矩形长和宽
* 返回数值(return):return=-1:没有检测轮廓
                    return=-2:检测到轮廓过小,滤除
					return=正数:反馈矩形面积,成功
* 其他(Others): 参数可以调。
********************************************************************************************************/
int track_result(Mat &frame, Point &center, Point &w_h);

/******************************************************************************************************
* 函数(Function):calcRatios8(Mat& uu, Mat& vv, struct ColorSignature *sig, float ratios[])
* 功能(Description):   获取参数m_uMean(u平均)、m_vMean(v平均)
* 调用函数(Calls):
* 输入参数(parameter):Mat& uu:图像uu
                         Mat& vv:图像vv
						 struct ColorSignature *sig:参数结构体
						 float ratios[]:4维矩阵
* 返回数值(return):    无
* 其他(Others):
********************************************************************************************************/
void calcRatios8(Mat& uu, Mat& vv, struct ColorSignature *sig, float ratios[]);

/******************************************************************************************************
* 函数(Function):   HSVGet_track(Mat& rgb)
* 功能(Description):   获取结构体其他参数m_uMin、m_uMax、m_vMin、m_vMax等
* 调用函数(Calls):cvtColor()、split()、calcRatios8()
* 输入参数(parameter):Mat& rgb:RGB三色矩阵
* 返回数值(return):     Mat():处理的矩阵
* 其他(Others):       扩大范围参数range可以调节。
                      track_have=true;//代表完成参数采集
********************************************************************************************************/
Mat HSVGet_track(Mat& rgb);

 

四,算法使用过程

         相关的使用代码为:track_color_mode/track_color_mode.h,和track_color_mode/track_color_mode.cpp。测试代码为:track_test.cpp

         使用步骤为:

        1,调节焦距;

        2,采集需要注意,尽量靠近物体;

       3, 编译命令为:g++ track_test.cpp track_color_mode.cpp uart_io/uart_io.cpp -o track_test -lopencv_core -lopencv_highgui -lopencv_imgproc -lpthread -std=c++11

       获取参数代码:

while (1)
	{
		capture >> frame;
		if (frame.data == NULL)
			continue;
		if (track_pic_get(frame) == 0)//获取参数
			break;
	}

    根据颜色追踪物体代码(UART()函数可以删除,根据情况,自行调整):

while (1)
	{
		capture >> frame;
		if (frame.data == NULL)
			continue;

		if (track_have)
		{
			Point center, w_h;
			if(track_result(frame, center, w_h)>0)
			  cout << center.x << " " << center.y << " " << w_h.x << " " << w_h.y << endl;
		  
			unsigned char temp[5];
			int len=0;
			int2char_num(center.x,temp);
			len=UART_Send(fd,(unsigned char*)temp,4);//x
			
			int2char_num(center.y,temp);
			len=UART_Send(fd,(unsigned char*)temp,4);//y
			
			int2char_num( w_h.x,temp);
			len=UART_Send(fd,(unsigned char*)temp,4);//w
			
			int2char_num(w_h.y,temp);
			temp[4]='\n';
			len=UART_Send(fd,(unsigned char*)temp,5);//h	    
		}
	}

 

            具体视觉传感器测试、购买可以咨询:火星人俱乐部官网(https://www.imarsclub.com/web/index),电话或邮件联系即可。传感器已经申请专利,商业使用需要授权。

       火星人视觉传感器介绍,参考: https://blog.csdn.net/Bluesyxx/article/details/98474347

        火星人视觉传感器是一个开放平台,相关电路版图、代码对外开放,可以自行下载,代码地址:https://github.com/BluesYu/MarStech_Vision_Sensor,欢迎star和fork,有问题可以再github上交流。

       本项目为开源项目,不以盈利为目的,开源社区需要大家一起努力,欢迎大家一起来开发!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值