基于matlab的运动目标检测与跟踪算法研究


基于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

代码原理视频讲解教程:

https://download.csdn.net/download/babyai996/85109152

猜你喜欢

转载自blog.csdn.net/babyai996/article/details/124091328