基于matlab的运动目标检测与跟踪算法研究
clc
clear all
close all
start = 1 ;
%可以识别不同格式的视频
%folder_name = 'denis_walk.avi' ;
folder_name = 'denis_run.avi' ;
%folder_name = 'run.avi' ;
%folder_name = '1.wmv' ;
%folder_name = 'david.mpg' ;
%读入视频
obj = VideoReader(folder_name);
% 读取第一幅图片,初始化待跟踪的目标
imgOrig = read(obj, start);
imgOrig = imresize(imgOrig, 0.8);
[imgH,imgW,imgC] = size( imgOrig ) ;
if imgC==3
imgGray = rgb2gray( imgOrig ) ;
else
imgGray = imgOrig ;
end
imgGray = double(imgGray) ;
handle = figure(1) ;
imshow( uint8(imgGray) ) ;
[x,y] = ginput( 2 ) ;
bbox1 = round([ y(1),x(1),y(2),x(2)]) ;
rectangle( 'Position',round([bbox1(2), bbox1(1),bbox1(4)-bbox1(2), bbox1(3)-bbox1(1)]) ) ;
Template = imgGray( bbox1(1):bbox1(3),bbox1(2):bbox1(4) ) ;%模板图像矩阵
temim = Template;
figure()
imshow(Template,[])
mode = 'normal' ; % 运行模式:normal、occlude、recover
count_occlude = 0 ;
count_recover = 0 ;
count_unrecover=0 ;
close(handle) ;%关闭图形窗格
scrsz = get(0,'ScreenSize');
videoPlayer = vision.VideoPlayer('Position',scrsz) ;
% 获取视频帧的数目
imgNum = obj.NumberOfFrames;
timeCount = 0;
for frame = start+1:imgNum
orgim = read(obj, frame);
orgim = imresize(orgim, 0.8);
imshow(orgim,[])
if(size(orgim,3)==3)
orgim=rgb2gray(orgim);
end
if(size(temim,3)==3)
temim=rgb2gray(temim);
end
W = Template ; %保存模板图像,下面方便对模板图像操作
[trow,tcol]=size(W);
[orow,ocol]=size(orgim);
r=zeros(orow-trow,ocol-tcol);
tic
for i=1:orow-trow
for j=1:ocol-tcol
temp=orgim(i:i+trow-1,j:j+tcol-1); %在搜索图逐像素截取与
r(i,j)=corrcoefficient(temp,W); %模板图尺寸相同的图像
end %计算两幅图像的相似度
end
ncc = max(max(r));
[i,j]=find(r==max(max(r))); %求出相似度最大的像素点位置
toc %匹配结束,获取时间
timeCount = toc+timeCount;
%temin = orgim( bbox1(1):bbox1(3),bbox1(2):bbox1(4) );
rgb1 = [uint8(orgim),uint8(imresize( temim,[imgH,imgW] ))] ;
imshow(rgb1)
%在搜索图像匹配到的地方画矩形
rgb2 = insertShape( rgb1, 'rectangle',round([j-1, i-1,bbox1(4)-bbox1(2), bbox1(3)-bbox1(1)]) ) ;
% 在显示的上方插入相应的文本,显示帧序号、NCC相似度,运行模式
rgb3 = insertText( rgb2, [1,1], sprintf('confi=%.3f,mode=%s',ncc,mode) ) ;
% 显示匹配的运行图
step( videoPlayer, rgb3 ) ;
disp('该视频帧匹配结束!!!');
end
time2 = toc;
disp('该视频帧数为:')
imgNum
disp('匹配总时间为:')
timeCount
基于matlab的运动目标检测与跟踪算法研究
项目下载:
https://download.csdn.net/download/babyai996/83434868
代码原理视频讲解教程: