dhash+HogCov

主函数

clc;clear;close all;warning off;
randn('state',0);
rand('state',0);
cd ./tldFile
mex -O distance.cpp 
cd ..

initParam;

for frame = 2:nFrames
 tic
    fprintf('\n processing ##  %d \n',frame);
%     if frame==40
%         fe=2;
%     end
    img = imread(img_dir(frame).name);
    imgSr = img;% imgSr is used for showing tracking results.
%     img = double(img(:,:,1));
    img=im2double(img);
    ImgHog = double(fhog(single(imgSr) / 255, cell_size, features.hog_orientations));
	ImgHog(:,:,end) = [];  %remove all-zeros channel ("truncation feature")
    initstate0(1)=initstate(1);
    initstate0(2)=initstate(2);
    
    sampleImage = sampleImg(img,initstate,srchwinsz,0,1e5);  
    sampleImage0 = sampleImg(img,initstate0,srchwinsz,0,1e5); 
    [sample,response] = getFtrVal( img,sampleImage,sampleImage0,initFeatured , initFeatured0  );  %有p的代表相对坐标,后面两个是在整张图上的坐标
%     size(sample,2)
    res=zeros( size(sample,2) , 2*step+1 );
        for ip=1 : size(sample,2)
            
            left = sample(1,ip) ;
            top  = sample(2,ip) ;
            right = left + sample(3,ip) - 1 ;
            bottom = top + sample(4,ip) - 1 ;
            
            xl = left-step : 1 : left+step;       xl(xl<1) = 1;
            xr = right+step : -1 : right-step;     xr(xr>imgW) = imgW;
            yt = top-step : 1 : top+step;         yt(yt<1) = 1;
            yb = bottom+step : -1 : bottom-step;   yt(yt>imgH) = imgH;
                    
            for istate=1:2*step+1
                candi_state{ip}(:,istate)=[xl(istate) yt(istate) xr(istate) yb(istate)]';
                [ candi_fea_L( :,:,:,istate,ip ),candi_fea_G( :,:,istate,ip ) , ProDiv ]=compute_candi_fea(ImgHog,candi_state{ip}(:,istate),cell_size);
            end
            %% upate
            if (~isempty(tmplL{1}.basis))
            a = size(candi_fea_L,1);
            b = size(candi_fea_L,2);
            c = size(candi_fea_L,3);
            d = 2*step+1;
            e = size(sample,2);
            difL=zeros(a,b,d,c);
            cal=candi_fea_L(:,:,:,:,ip);   
                %local
                for ic=1:c
                    meanl = tmplL{ic}.mean;
                    basisL = tmplL{ic}.basis;
                    cald=squeeze(cal(:,:,ic,:));
                    cald=reshape(cald,[a*b,d]);
                    difl=cald - repmat( meanl,[1,d]);
                    coef=basisL'*difl;
                    dif=difl-basisL*coef;
                    dif=reshape(dif,[a,b,d,1]);
                    difL(:,:,:,ic)=dif*ProDiv(ic);
                end
                   diff_L=permute(difL,[1,2,4,3]) ;
                   %global
                   meanG=tmplG.mean;
                   basisG = tmplG.basis;
                   cag=candi_fea_G(:,:,:,  ip);
                   cag=squeeze(cag);
                   cag=reshape(cag,[a*b,d]);
                   difg=cag - repmat( meanl,[1,d]);
                   coef=basisG'*difg;
                   dif=difg-basisG*coef;
                   diff_G=reshape(dif,[a,b,d,1]);
            else
            	diff_L=candi_fea_L(:,:,:,:,ip)-repmat(fea_L0,[1,1,1,size(candi_fea_L,4)]);
                diff_G=candi_fea_G(:,:,:,  ip)-repmat(fea_G0,[1,1,  size(candi_fea_G,3)]);
            end
            
            dL=squeeze( sum( sum(sum(abs(diff_L))) ));      dL=dL(:);
            dG=squeeze( sum(sum(abs(diff_G))) );      dG=dG(:);
            co=dL.*dG;
            res(ip,:)=response(ip)*co';
        end

	[rowp, colp] = find(res == min(res(:)), 1);
    colp
%     if colp>1
%         colp=colp-1; 
%     end
    fea_L=candi_fea_L(:,:,:,colp,rowp);   fea_L=squeeze(fea_L);  
    fea_G=candi_fea_G(:,:,rowp);      fea_G=squeeze(fea_G);
    %% 用 fea_G 来更新 fea_G0 
    Gdata=[Gdata fea_G(:)];
    if (  size( Gdata ,2 )>opt.batchsize  )
        [ Gdata , tmplG , paramG ]=update_cov( Gdata , tmplG , paramG ,opt );
    end
    %% 用 fea_L 来更新 fea_L0 
    for iLoc=1:9
        loc_data=squeeze(fea_L(:,:,iLoc));
        Ldata{iLoc}=[Ldata{iLoc} loc_data(:)];
        if (  size( Ldata{iLoc},2 )>opt.batchsize  )
            [ Ldata{iLoc} , tmplL{iLoc} , paramL{iLoc} ]=update_cov( Ldata{iLoc} , tmplL{iLoc} , paramL{iLoc} , opt );
        end
    end

    %%
    state=candi_state{rowp}(:,colp);
	state=state(:)';   %%[xl yt xr yb]
    initstate=round(state);
    initstate(1)=round( state(1) );
    initstate(2)=round( state(2) );
    initstate(3)=round( state(3) -state(1) + 1 );
    initstate(4)=round( state(4) -state(2) + 1 ); %%[xl yt w h]
%     %%
%     if frame==2    
%         center(1)=round( initstate(2) + initstate(4)/2 );
%         center(2)=round( initstate(1) + initstate(3)/2 );
%         w_halfsize=round([ initstate(4)/2 initstate(3)/2]);
%     else
%         center(1)=round( stat(2) + stat(4)/2 );
%         center(2)=round( stat(1) + stat(3)/2 );
%         w_halfsize=round([ stat(4)/2 stat(3)/2]);
%     end
%     w_halfsize_bg=2*w_halfsize;
%     [o_u,v_u]=rgbPDF_bg(double(imgSr),center,w_halfsize,w_halfsize_bg);       % background model
%     pir = cal_pidx(q_u,o_u);
%     box=cal_use_logratio(double(imgSr),center,initstate(3),initstate(4),pir);
%     initbox=box;
%     initbox(3)=initbox(3)-initbox(1)+1;
%     initbox(4)=initbox(4)-initbox(2)+1;

%     sta=0.5*state+0.5*box';
%     stat=round(sta);
%     stat(3)=stat(3)-stat(1)+1;
%     stat(4)=stat(4)-stat(2)+1;
     %%   
    imshow(uint8(imgSr));
    rectangle('Position',initstate,'LineWidth',4,'EdgeColor','r');
%     rectangle('Position',initbox,'LineWidth',2,'EdgeColor','y');
%     rectangle('Position',stat,'LineWidth',1,'EdgeColor','b');
    hold on;
    text(5, 18, strcat('#',num2str(frame)), 'Color','y', 'FontWeight','bold', 'FontSize',20);
    set(gca,'position',[0 0 1 1]); 

    hold off;
%         pos(1)=round( (initstate(1)+initstate(3))/2 );
%         pos(2)=round( (initstate(2)+initstate(4))/2 );
        pause(0.0001)
%         unocc_func;
%     patch=get_patch(img,initstate);
%     initFeatured = dhash_feature_patch(patch);
[dx,dy]=gradient(img);
dhash_code=zeros(size(dx));
% dhash_code(dx>0)=1;
% maxd=max(max(dhash_code));
% mind=min(min(dhash_code));
% dhash_code( dx>=maxd/2 )=1;
% dhash_code( dx<maxd/2 & dx>mind/2 )=0;
% dhash_code( dx<=mind/2 )=-1;

% maxd=max(max(dhash_code)); maxd=squeeze(maxd);
% mind=min(min(dhash_code)); mind=squeeze(mind);
for i=1:size(dx,3)
    img1=img(:,:,i);
    dx1=dx(:,:,i);
    dd=zeros(size(dx1)); dd=squeeze(dd);
%     dd( dx1>=maxd(i)/4 )=1;
%     dd( dx1<maxd(i)/4 & dx1>mind(i)/4 )=0;
%     dd( dx1<=mind(i)/4 )=-1;
    dd( dx1 >= 0 )=1;
    dhash_code(:,:,i)=dd;
end
xx = initstate(1) : 1 : initstate(1)+initstate(3)-1;
yy = initstate(2) : 1 : initstate(2)+initstate(4)-1;
xx(xx<1) = 1;
xx(xx>imgW) = imgW;
yy(yy<1) = 1;
yy(yy>imgH) = imgH;
initFeatured = dhash_code( yy , xx , : );
% initFeatured = dhash_code( initstate(2) : initstate(2)+initstate(4)-1 , initstate(1) : initstate(1)+initstate(3)-1 , : );
t1=toc;
%     hfigure = getframe(gca);
%     imwrite(hfigure.cdata,[directory,sprintf('%03d',frame),'patch','.png']); 
end

初始化函数

addpath('./tldFile')
% addpath('E:\MATLABcode\tracking\Kalman tracking\libsvm-3.18\libsvm-3.18\matlab')
% addpath('E:\MATLABcode\tracking\Kalman tracking\libsvm_complement\')
% addpath('E:\MATLABcode\tracking\Kalman tracking\libsvm_complement\implement[by faruto]\')

% addpath('E:\image set\benchmark\Lemming\img')
% addpath('E:\MATLABcode\tracking\Kalman tracking\car')
% addpath('E:\image set\TLD_DATASET\09_carchase')
% addpath('E:\MATLABcode\tracking\CMT\cmt_dataset\person crossing')
addpath('E:\image set\benchmark\Tiger2\img')
% addpath('E:\image set\girl\imgs')
% addpath('E:\image set\benchmark\Jogging\Jogging\img')
% addpath('E:\image set\Datasets_scm\dataset\animal')
% addpath('E:\image set\Datasets_scm\dataset\board')
% addpath('E:\image set\Datasets_scm\dataset\faceocc2')
% addpath('E:\image set\Datasets_scm\dataset\singer1')   
% addpath('E:\image set\Datasets_scm\dataset\stone')
% addpath('E:\image set\Datasets_scm\dataset\woman_sequence')
%%
% img_dir = dir('E:\image set\benchmark\Lemming\img\*.jpg');
% img_dir = dir('E:\MATLABcode\tracking\Kalman tracking\car\*.jpg');
% img_dir=dir('E:\image set\TLD_DATASET\09_carchase\*.jpg');
% img_dir=dir('E:\MATLABcode\tracking\CMT\cmt_dataset\person crossing\*.png');
img_dir=dir('E:\image set\benchmark\Tiger2\img\*.jpg'); 
% img_dir=dir('E:\image set\girl\imgs\*.png');
% img_dir=dir('E:\image set\benchmark\Jogging\Jogging\img\*.jpg');
% img_dir=dir('E:\image set\Datasets_scm\dataset\animal\*.png');
% img_dir=dir('E:\image set\Datasets_scm\dataset\board\*.png');
% img_dir=dir('E:\image set\Datasets_scm\dataset\faceocc2\*.png');
% img_dir=dir('E:\image set\Datasets_scm\dataset\singer1\*.png');
% img_dir=dir('E:\image set\Datasets_scm\dataset\stone\*.png');
% img_dir=dir('E:\image set\Datasets_scm\dataset\woman_sequence\*.png');
%%

% load init.txt;   
% initstate=init;
% initstate=[40,199,61,103]; % lemmingg
% initstate=[142,125,232-142,164-125]; %car
% initstate=[145,84,199-145,121-84]; %carchase
% initstate=round( [107.93,46.55,56.69,157.02] ); %personcross
initstate=[32,60,68,78]; %tiger2
% initstate=[128,46,104,127]; % E:\image set\girl
% initstate=[111	98	25	101]; % jogging1
% initstate=[180	79	37	114]; % jogging2
% initstate=round( [350-100/2, 40-70/2, 100, 70] ); % animal
% initstate=round( [154-195/2 ,243-153/2 ,195 ,153]); % board
% initstate=round( [156-74/2,107-100/2,74,100] ); % faceocc2
% initstate=round( [100-100/2, 200-300/2, 100, 300] ); % singer1
% initstate=round( [115-43/2 150-20/2 43 20] ); % stone
% initstate=round( [222-35/2  165-95/2  35  95] ); %woman

initstate0 = initstate;
init=initstate;
init(3)=init(1)+init(3)-1;
init(4)=init(2)+init(4)-1;
%%
% init=[xl yt xr yb]
% initstate=[xl yt w h]
%%
nFrames = length(img_dir);% number of frames     这个data文件中一共有462张图
    fprintf('\n processing ##  %d \n',1);
    img = imread(img_dir(1).name);
    imgSr = img;% imgSr is used for showing tracking results.
%     img = double(img(:,:,1));
    img=im2double(img);
imgH=size(img,1);
imgW=size(img,2);
% 
% unocc=ones(initstate(4),initstate(3));
% unocc=repmat( unocc , [1,1,size(img,3)] );
% patch_update = get_patch(img,initstate);
% lRate=0.975;
srchwinsz = 20  ;% size of search window
step = 3 ;
% patch=get_patch(img,initstate);
[dx,dy]=gradient(img);
dhash_code=zeros(size(dx));
% dhash_code(dx>0)=1;
% maxd=max(max(dhash_code)); maxd=squeeze(maxd);
% mind=min(min(dhash_code)); mind=squeeze(mind);
for i=1:size(dx,3)
%     img1=img(:,:,i);
%     dx1=dx(:,:,i);
%     dd=zeros(size(dx1)); dd=squeeze(dd);
%     dd( dx1>=maxd(i)/4 )=1;
%     dd( dx1<maxd(i)/4 & dx1>mind(i)/4 )=0;
%     dd( dx1<=mind(i)/4 )=-1;
%     dhash_code(:,:,i)=dd;
    img1=img(:,:,i);
    dx1=dx(:,:,i);
    dd=zeros(size(dx1)); dd=squeeze(dd);
%     dd( dx1>=maxd(i)/4 )=1;
%     dd( dx1<maxd(i)/4 & dx1>mind(i)/4 )=0;
%     dd( dx1<=mind(i)/4 )=-1;
    dd( dx1 >= 0 )=1;
%     dd( dx1 <  0 )=-1;
    dhash_code(:,:,i)=dd;
end

initFeatured0 = dhash_code( init(2) : init(4) , init(1) : init(3) , : );
initFeatured = initFeatured0;
init=init(:);
		features.hog = true;
		features.hog_orientations = 9;
        features.gray = false;
        cell_size = 4;
    ImgHog = double(fhog(single(imgSr) / 255, cell_size, features.hog_orientations));
	ImgHog(:,:,end) = [];  %remove all-zeros channel ("truncation feature")
    
[ fea_L0 , fea_G0 ,ProDiv ]=compute_candi_fea(ImgHog,init,cell_size);
%[31*31*9 , 31*31 ]
imshow(imgSr);
rectangle('Position',initstate,'LineWidth',4,'EdgeColor','r');
pause(0.0001)
%  hfigure = getframe(gca);
% imwrite(hfigure.cdata,[directory,sprintf('%03d',1),'patch','.png']); 
%%  sklm 
%%  local
for i=1:9
    datal=squeeze( fea_L0(:,:,i) );
    tmplL{i}.mean = mean( datal(:),2 );    
    tmplL{i}.basis = [];                                        
    tmplL{i}.eigval = [];                                      
    tmplL{i}.numsample = 0;                                     
    Ldata{i}=[];
    paramL{i}={};
end

%%  global
tmplG.mean = mean(fea_G0(:),2);    
tmplG.basis = [];                                        
tmplG.eigval = [];                                      
tmplG.numsample = 0;                                     
Gdata=[];
paramG={};
%%
opt.ff = 1;    %forgetting factor
opt.batchsize = 8;
opt.maxbasis = 16;
%% 颜色似然
w_halfsize=round( [initstate(4)/2 ,initstate(3)/2]);
w_halfsize_bg=2*w_halfsize;   
center(1)=round( ( init(2)+init(4) )/2 );
center(2)=round( ( init(1)+init(3) )/2 );

q_u=rgbPDF( double(imgSr) ,center,w_halfsize); 

    [o_u,v_u]=rgbPDF_bg(double(imgSr),center,w_halfsize,w_halfsize_bg);       % background model
    pir = cal_pidx(q_u,o_u);
    q_u=q_u.*v_u/(q_u*v_u'); 
 
dhash特征的函数

function [ oBB , oConf ] = getFtrVal( img,samples,samples0,initFeatured ,initFeatured0)
sx = samples.sx;
sy = samples.sy;
sw = samples.sw;
sh = samples.sh;
sx0 = samples0.sx;
sy0 = samples0.sy;
sw0 = samples0.sw;
sh0 = samples0.sh;
imgHeight = size(img,1);
imgWidth = size(img,2);
% BW = edge(img,'canny');
% maximg=max(max(img));
% img(BW==1)=maximg;
[dx,dy]=gradient(img);
dhash_code=zeros(size(dx));
%% 1 this is fine
% maxd=max(max(dhash_code));
% mind=min(min(dhash_code));
% dhash_code( dx>=maxd/2 )=1;
% dhash_code( dx<maxd/2 & dx>mind/2 )=0;
% dhash_code( dx<=mind/2 )=-1;
% maxd=max(max(dhash_code)); maxd=squeeze(maxd);
% mind=min(min(dhash_code)); mind=squeeze(mind);

for i=1:size(dx,3)
    img1=img(:,:,i);
    dx1=dx(:,:,i);
    dd=zeros(size(dx1)); dd=squeeze(dd);
%     dd( dx1>=maxd(i)/4 )=1;
%     dd( dx1<maxd(i)/4 & dx1>mind(i)/4 )=0;
%     dd( dx1<=mind(i)/4 )=-1;
    dd( dx1 >= 0 )=1;
%     dd( dx1 <  0 )=-1;
    dhash_code(:,:,i)=dd;
end
% dhash_code(dx>0)=1;
kk=5;
for i=1:size(sx,2)
    xs=sx(i):1:sx(i)+sw(i)-1;
    ys=sy(i):1:sy(i)+sh(i)-1;
    xs(xs < 1) = 1;
	ys(ys < 1) = 1;
	xs(xs > imgWidth) = imgWidth ;
	ys(ys > imgHeight) = imgHeight ;
    ys=ys(1,kk:end-kk);
    xs=xs(1,kk:end-kk);
    fea=dhash_code(ys, xs, :);
    diff(i) = sum( sum(sum(abs( fea-initFeatured(kk:end-kk,kk:end-kk,:) ))) )/(sw(i)*sh(i)*3);
%     diff(i) = sum( sum(sum(abs( unocc.*(fea-initFeatured) ))) )/(sw(i)*sh(i));
end

for i=1:size(sx0,2)
    xs=sx0(i):1:sx0(i)+sw0(i)-1;
    ys=sy0(i):1:sy0(i)+sh0(i)-1;
    xs(xs < 1) = 1;
	ys(ys < 1) = 1;
	xs(xs > imgWidth) = imgWidth ;
	ys(ys > imgHeight) = imgHeight ;
    ys=ys(1,kk:end-kk);
    xs=xs(1,kk:end-kk);
    fea=dhash_code(ys, xs, :);
    diff0(i)= sum( sum(sum(abs( fea-initFeatured0(kk:end-kk,kk:end-kk,:) ))) )/(sw0(i)*sh0(i)*3);
end
response=[diff(:) ;diff0(:)];
SampleReg=[sx,sx0;sy,sy0;sw,sw0;sh,sh0];
    resTh=sort(response(:),'ascend'); 
    index=find( response<=resTh(20) );
sample=SampleReg(:,index);
response=response(index,:);

SPACE_THR=0.05;

bb=sample;
bb(3:4,:)=bb(3:4,:)+bb(1:2,:)-1;
bbd = bb_distance(bb);
Z = linkagemex(bbd,'si');
T = cluster(Z,'cutoff', SPACE_THR,'criterion','distance');

idx_cluster  = unique(T);
num_clusters = length(idx_cluster);

oBB    = nan(4,num_clusters);
oConf  = nan(1,num_clusters);

for i = 1:num_clusters
    
    idx = T == idx_cluster(i);
    
    oBB(:,i)  = mean(bb(1:4,idx),2);
    oConf(i)  = mean(response(idx));
    
end

oBB(3:4,:)=oBB(3:4,:)-oBB(1:2,:)+1;
% 
% for i=1:length(index)
%     s=[sx(index(i)) sy(index(i)) sw(index(i)) sh(index(i))]';
%     SampleReg=[SampleReg s];
%     response=[response ; diff(index(i))];
% end
% for i=1:length(index0)
%     s=[sx0(index0(i)) sy0(index0(i)) sw0(index0(i)) sh0(index0(i))]';
%     SampleReg=[SampleReg s];
%     response=[response ; diff(index0(i))];
% end






  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值