天天看点

用MATLAB实现对运动物体识别与跟踪

不得不说matlab的图像处理函数有点多,但速度有时也是出奇的慢。还是想c的指针,虽然有点危险,但速度那是杠杠的。

第二个matlab程序,对运动物体的识别与追踪。

这里我们主要运用帧差法实现运动物体与背景图像的分离,由于视频中的物体较为简单,我们只对两帧图像取帧差(也是为了提高速度)

对于运动物体的提取我们运用了matlab里自带的函数bwareaopen

bwareaopen(src,int),src为二值图像,int为设置的联通域的大小,是对帧差法,在转化为二值的图像进行操作,结果是将大小小于设定的int的连通域置为0;

对于第一帧与第二帧图像运动物体的坐标的提取我们用了自带的regionprops函数

regionprops(src,’‘)其中src为传入的二值图像,’‘内的为你所需要的属性

具体属性可以查看matlab的help

用MATLAB实现对运动物体识别与跟踪

这里我们选用了其中的centroid属性,返回的时连通域的质心坐标,注返回的第一个值为横坐标,第二个值为纵坐标~

对于运动物体的追踪我们用了质心追踪,

在第一二三两帧的帧间差的运动物体的质心求出来后,将质心做差得到的向量预测下一帧间差运动物体可能到达的位置,接下来在对这个位置进行局部的找质心,再做差如此循环。

追踪大致如图(画的不好):

用MATLAB实现对运动物体识别与跟踪

这个相对与全局再次进行bwareaopen,regionprops,速度应该会快一下,而且这是进行局部地搜索所以可以减小背景,或其他噪声的影响。

用MATLAB实现对运动物体识别与跟踪

如图为直接进行帧间差分后的转化的二值图像,即使噪声很大用局部追踪也能跟上。

具体代码:

fanction:

draw-rect

追踪效果:

用MATLAB实现对运动物体识别与跟踪
用MATLAB实现对运动物体识别与跟踪

时间:

用MATLAB实现对运动物体识别与跟踪

注(画框函数引用网上现有的)

可能是matlab问题,这段视频为4k,无法直接读取,所以只能将其转化为图片逐帧读取。

结果是还是太慢,而且不能预读取,好像用这个无法实时,可能与图片为4k也有点关系有点伤

继续阅读