基于L2-RLS算法的目标跟踪算法matlab仿真,可处理小范围遮挡问题
  lbWQrknXiYmG 2023年11月02日 48 0

1.算法仿真效果 matlab2022a仿真结果如下:

1.png2.png3.png4.png5.png6.png

2.算法涉及理论知识概要 目标表观模型是跟踪器的重要组成部分,用来描述目标表观的特征.基于判别式模型的表观模型用来区分目标和背景;基于生成式模型的表观模型用来描述目标本身,提取出目标的特征.本文合理地融合了判别式模型和生成式模型来对目标进行描述,并利用L2范数最小化对目标表观系数进行求解,取得了比较好的结果.

  训练集U=[U1,U2,…,Um+n]∈Rd×(m+n),包括m个正模板U+∈Rd×,和n个负模板U-∈Rd×n.在初始位置周围手动采集m个图像,归一化后按行堆成向量作为正模板;在离初始位置较远处采集n个图像,利用同样的方法得到负模板.其中初始位置是通过在第一帧中手动标注得到的.采集到的候选样本y∈Rd可以通过训练集线性表示,即

7.jpeg

其中,b=[b1,b2,…,bm+n]T∈R(m+n)×1,为线性表示的系数.b是弱稀疏的,利用这一特征通过L2范数最小化进行求解,其中λ为约束参数.

8.jpeg

L2范数约束项的作用有2个:①它使解b具有一定的稀疏度,但是L2范数的稀疏度远低于L1范数的稀疏度.②它使得最小化的解更加稳定.L2范数最小化很容易求解,令||UTb-y||22+λ||b||22的导数为0,即

9.jpeg

,可得出:

10.jpeg

其中I∈Rd×d,是一个单位矩阵,用来确保UTU+λI的可逆性.

    假设一个候选样本在前景模板上有比较小的重构误差就代表该候选样本有可能是目标,在背景模板上有比较小的重构误差就代表这个候选样本有可能是背景,在此基础上根据候选样本在前景模板和背景模板上的重构误差的差异来构造候选样本的置信值:

11.jpeg

其中ρ是一个很小的固定的常数,用来权衡判别分类器的重要性.

3.MATLAB核心程序

temp = importdata([dataPath 'datainfo.txt']);
LoopNum = temp(3);%number of frames
frame = imread([dataPath '1.jpg']);
if  size(frame,3) == 3
    framegray = double(rgb2gray(frame))/255;
else
    framegray = double(frame)/255;
end
%%  p = [px, py, sx, sy, theta];  
param0 = [p(1), p(2), p(3) /opt.tmplsize(1), p(5), p(4)/p(3), 0];      
param0 = affparam2mat(param0);
..............................................................................
B=randblock(sz,opt.blockSizeSmall,opt.blockNumSmall);%% generate squre templates
for f = 1:LoopNum
    CurrentFrame=f
    frame = imread([dataPath int2str(f) '.jpg']);
    if  size(frame,3) == 3
        framegray = double(rgb2gray(frame))/255;
    else
        framegray = double(frame)/255;
    end
    
    %% do tracking
    opt.frameNum = f;
    [param,opt] = L2_Tracker(framegray, tmpl, param, opt,P,B);
    result = [ result; param.est' ];
    if param.wimg~=zeros(opt.tmplsize(1),opt.tmplsize(2));
       wimgs= [wimgs, param.wimg(:)];   
    end
  
    %%Update Model
    if  (size(wimgs,2) >= opt.batchsize)  
        %%(1)Incremental SVD
        [tmpl.basis, tmpl.eigval, tmpl.mean, tmpl.numsample] = ...
        sklm(wimgs, tmpl.basis, tmpl.eigval, tmpl.mean, tmpl.numsample, opt.ff);  
        %%(2)Clear Data Buffer
        wimgs = [];     
        %%(3)Keep "opt.maxbasis" Number Basis Vectors
        if  (size(tmpl.basis,2) > opt.maxbasis)          
            tmpl.basis  = tmpl.basis(:,1:opt.maxbasis);   
            tmpl.eigval = tmpl.eigval(1:opt.maxbasis);    
            W=tmpl.basis;
            Mu=tmpl.mean;
        end
        D=[tmpl.basis,B]; %dictionay 
        P=inv(D'*D+lambda*eye(size(D,2)))*D';% project matrix
    end
end
duration = duration + toc;
fps =f/duration;
%% 
TotalFrameNum=LoopNum;
L2RLSCenterAll  = cell(1,TotalFrameNum);      
L2RLSCornersAll = cell(1,TotalFrameNum);
for num = 1:TotalFrameNum
    if  num <= size(result,1)
        est = result(num,:);
        [ center corners ] = p_to_box([32 32], est);
    end
    L2RLSCenterAll{num}  = center;      
    L2RLSCornersAll{num} = corners;
end

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

lbWQrknXiYmG
最新推荐 更多

2024-05-31