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
- dhash+HogCov
- 感知哈希(pHash)和梯度哈希(dHash)的Python+OpenCV+SciPy实现
- 相似图片检测:感知哈希算法之dHash的Python实现
- python︱imagehash中的四种图像哈希方式(phash/ahash/dhash/小波hash)
- Opencv读取视频和打开摄像头
- Windows下搭建PHP开发环境
- WF-Oracle workflow notification mailer status - sql
- ios高级编程相关
- 微信禁止分享不完全解读
- dhash+HogCov
- iOS笔记03
- Table 选中一行(转)
- 获取浏览网站的图片和名称
- Codeforces Round #FF (Div. 2) C - DZY Loves Sequences (DP)
- KeyChain的使用
- C++下一些常用操作的实现
- XCODE6中使用iOS7 SDK的方法
- 【Java】使用Java对Xml的解析,并把它的所有二级结点放到MAP中,再把所有的MAP放到list之中