dhash+HogCov

来源:互联网 发布:mac photoshop cc 编辑:程序博客网 时间:2024/05/06 16:25

主函数

clc;clear;close all;warning off;randn('state',0);rand('state',0);cd ./tldFilemex -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;endxx = 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] ); %personcrossinitstate=[32,60,68,78]; %tiger2% initstate=[128,46,104,127]; % E:\image set\girl% initstate=[1119825101]; % jogging1% initstate=[1807937114]; % 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] ); %womaninitstate0 = 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 windowstep = 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;endinitFeatured0 = 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 %%  localfor 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%%  globaltmplG.mean = mean(fea_G0(:),2);    tmplG.basis = [];                                        tmplG.eigval = [];                                      tmplG.numsample = 0;                                     Gdata=[];paramG={};%%opt.ff = 1;    %forgetting factoropt.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));endfor 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);endresponse=[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));    endoBB(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




0 0
原创粉丝点击