function vu = get_mask()//定义函数VU
bg = imread('tu\\131jpg');//读入131jpg
bg = rgb2gray(bg);//将转换为灰度图像
bg = im2bw(bg, graythresh(bg));//再转换为二值图,阈值是对灰度图像用最大类间方差法得到的
Img = imread('tu\\1jpg');//读入1JPG
I = rgb2gray(Img);//转换为灰度图
I = im2bw(I, graythresh(I));//转换为二值图
bw = I;//
L = bwlabel(I);//从黑背景甄别白块,返回和I相同大小的图像L
stats = regionprops(L, 'Area');//统计被标记白块的区域的总面积
Ar = cat(1, statsArea);//按列连接矩阵
[mr, ind] = max(Ar);//找到Ar中那些最大值的索引位置,将他们放在向量ind中
I(L~=ind) = 0;//I中L与ind不相等的位置赋值为零
vu = imfill(I, 'holes');//将原图填充孔洞
在cnki上下篇kalman目标跟踪的硕士论文吧,很多的,当然期刊也可以,不过一般情况下硕士论文讲的能详细点,然后找准一篇仔细研读,这样子基本上理论就没啥问题了,编程就用MATLAB,用C很麻烦,很多算法都没有得自己从头编,matlab集成了很多的算法的,只要找出来调用就行了。
这里给你说下kalman跟踪的思路吧:
0如果你的视频是实际录得话,为防止检测到伪目标,首先要对输入的图像进行滤波,简单的有中值均值滤波。
1对视频序列采用背景差分或帧间差分就可以得到运动区域了,这里重点就是背景建模,如果嫌麻烦也就别看什么单高斯或多高斯的了,直接找一个空帧(没有运动目标)当背景就OK了,差分后就有了运动区域,然后二值化方便以后的处理。然后视有没有阴影而进行阴影去除的工作。
2上边这步也就是检测出了运动区域,按你的检测出来是要给边边画圈,这个在matlab上好好研究研究怎样提取目标边缘的点,在原位图图上把边缘的点改变成一个同像素值就行了,这样检测就完了。
3跟踪,首先得找到目标的中心,因为目标不只是一个像素,必须有一个中心来表示它的坐标位置,这个方法自己想啦,什么取均值求外接矩形中心啊都可以的,然后每一帧都这么做就有一系列的中心坐标了。
4Kalman,Kalman的作用还是以滤波为主,相当于把第三步的那些坐标都当成信号序列,用Kalman滤波,边检测边滤波,kalman主要记住那5个公式,知道它的递推过程就基本能编出来了,至于滤波器参数就在参考文献里找吧,编出来kalman部分的程序没多少行的,别怕。
5如果是多目标跟踪的话就进行目标匹配的工作,相当于每帧都检测出两个目标,你要知道最新一帧中的每个分别对应的是前边帧的哪个目标。
上边这些给你一个大体的思路,你根据自己的任务选择做哪些工作,这个题目不难的,要有信心
videoObj = VideoReader('renavi');%读视频文件,存入变量videoObj中
nframes = get(videoObj, 'NumberOfFrames');%获取视频文件的帧数
for k = 1 : nframes %for循环,读取每一帧
currentFrame = read(videoObj, k);%读取第i帧
subplot(1,2,1);%创建图像显示窗口并获取第一个窗口
imshow(currentFrame); %显示一帧
c1 = rgb2gray(currentFrame);%灰度化
grayFrame=medfilt2(c1,[3 3]);%中值滤波
if(k==1)%如是第一帧,则:
grayFrame_1 = grayFrame;%把第一帧灰图存入变量grayFrame_1中,如不是第一帧,则执行下句
end
difgrayFrame= grayFrame - grayFrame_1;%邻帧差,计算后面的帧与第一帧的差
subplot(1,2,2);%画第二个子图
imshow(difgrayFrame);%显示差图
grayFrame_1 = grayFrame;%更新第一灰图的内容
pause(00001);%暂停00001秒
end
%这个问题我已经回答过了,下面是我以前的回复
clear
N=200;%取200个数
w(1)=0;
w=randn(1,N);%产生一个1×N的行向量,第一个数为0,w为过程噪声(其和后边的v在卡尔曼理论里均为高斯白噪声)
x(1)=0;%状态x初始值
a=1;%a为状态转移阵,此程序简单起见取1
for k=2:N
x(k)=ax(k-1)+w(k-1); %系统状态方程,k时刻的状态等于k-1时刻状态乘以状态转移阵加噪声(此处忽略了系统的控制量)
end
V=randn(1,N);%测量噪声
q1=std(V);
Rvv=q1^2;
q2=std(x);
Rxx=q2^2; %此方程未用到Rxx
q3=std(w);
Rww=q3^2; %Rvv、Rww分别为过程噪声和测量噪声的协方差(此方程只取一组数方差与协方差相同)
c=02;
Y=cx+V;%量测方差,c为量测矩阵,同a简化取为一个数
p(1)=0;%初始最优化估计协方差
s(1)=0;%s(1)表示为初始最优化估计
for t=2:N
p1(t)=a^2p(t-1)+Rww;%p1为一步估计的协方差,此式从t-1时刻最优化估计s的协方差得到t-1时刻到t时刻一步估计的协方差
b(t)=cp1(t)/(c^2p1(t)+Rvv);%b为卡尔曼增益,其意义表示为状态误差的协方差与量测误差的协方差之比(个人见解)
s(t)=as(t-1)+b(t)(Y(t)-acs(t-1));%Y(t)-acs(t-1)称之为新息,是观测值与一步估计得到的观测值之差,此式由上一时刻状态的最优化估计s(t-1)得到当前时刻的最优化估计s(t)
p(t)=p1(t)-cb(t)p1(t);%此式由一步估计的协方差得到此时刻最优化估计的协方差
end
t=1:N;
plot(t,s,'r',t,Y,'g',t,x,'b');%作图,红色为卡尔曼滤波,绿色为量测,蓝色为状态
%整体来说,此卡尔曼程序就是一个循环迭代的过程,给出初始的状态x和协方差p,得到下一时刻的x和p,循环带入可得到一系列的最优的状态估计值,此方法通常用于目标跟踪和定位。
%本人研究方向与此有关,有兴趣可以交流下
通过CMOS设置实现定时开机的设置过程如下:首先进入“CMOS SETUP”程序(大多数主板是在计算机启动时按DEL键进入);然后将光条移到“Power Management Setup”选项上,回车进入其子菜单;再将“Resume by Alarm”项设置成“Enabled”,并在“Date(of Month)Alarm”项中设置每月开机日期(0表示每天,1表示每月1日,2表示每月2日,……),在“Time(hh:mm:ss)Alarm”项中设置开机时间;最后保存设置,重新启动,当关闭计算机后,你的计算机将在你规定的时刻自动启动。
注意:1计算机主板必须有“Resume by Alarm”功能才能实现定时开机;2要实现定时正常开机,必须取消开机Password功能;3最关键的一点是要接通主机电源。
跟踪是一个很混乱的方向。
比如TLD、CT、Struct这些效果不错的Tracker其实都不是单纯的Tracker了。09年的时候我记得比较流行的是Particle Filtering, 或者一些MeanShift/CamShift的变形,比如特征变了,比如对问题的假设变了。
后来突然出现一些tracking by detection的方法,之前的很多朋友就觉得这是耍流氓。比如TLD,严格的跟踪算法也许只是里面的Forward/Backward Opitcal Flow的部分,但是效果很Impressive,所以不管怎样,一下就火了。
之后所谓的跟踪就不再是一个传统的跟踪问题,而是一个综合的工程问题。online learning,random projection ,sparse learning的东西都加进来,大家其实到底是在做跟踪还是在做检测或者online learning,其实已经不重要,因为衡量的标准是你在某些public dataset上的精度。
但这些对实际的项目有没有帮助呢?
这是个很有意思的地方,在很多时候,我们之所以需要跟踪算法,是因为我们的检测算法很慢,跟踪很快。基本上当前排名前几的跟踪算法都很难用在这样的情况下,因为你实际的速度已经太慢了,比如TLD,CT,还有Struct,如果目标超过十个,基本上就炸了。况且还有些跟踪算法自己drift掉了也不知道,比如第一版本的CT是无法处理drift的问题的,TLD是可以的,究其原因还是因为检测算法比较鲁棒啊……
实际中我觉得速度极快,实现也简单的纯跟踪算法居然是NCC和Overlap。
NCC很简单,这个是对点进行的,对于区域也有很多变种,网上有一些相关的资源。
Overlap是我取的名字,一般用在里面,假如你的摄像头是静止的,背景建模之后出来的前景可以是一个一个的blob,对相邻两帧的blob检测是否Overlap就可以得到track。在一些真实场景下,这个算法是非常有效的。关于背景template的问题在真实的里面也是很好解决的。
坐在电脑前面调试代码tuning 各种阈值让跟踪算法在某一个帧下面不要drift的事情我是再也不想干了。
顺祝你2015幸福快乐。
以上就是关于matlab怎样运动目标的检测全部的内容,包括:matlab怎样运动目标的检测、基于卡尔曼滤波的目标跟踪怎么做、求助!哪位大神可以给我解释一下matlab程序啊,关于运动目标检测的等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)