meanshift.m

来自「mean shift tracker mean shift tracker 」· M 代码 · 共 69 行

M
69
字号
function [newPoint] = MeanShift(candidate,target)

sizeRegX = size(candidate.qgradX);
sizeRegY = size(candidate.qgradY);

wh = min([sizeRegX(1) sizeRegX(2)]);
ww =  min([sizeRegX(2) sizeRegY(2)]);


height = candidate.h(2)*2;
width = candidate.h(1)*2;

startX = candidate.center(1)-candidate.h(1);
startY = candidate.center(2)-candidate.h(2);

diffX = 0;
diffY = 0;
wi(wh,ww) = 0;
numerator = [0 0];
denominator = 0;

sizeRegX = size(candidate.qgradX);
sizeRegY = size(candidate.qgradY);

maxheight = min([sizeRegX(1) sizeRegX(2)]);
maxwidth =  min([sizeRegX(2) sizeRegY(2)]);

for y=startY:startY + height-1
  for x=startX:startX + width-1;
    
    indexX = x;
    indexY = y;
    
	
    if(x < 1)
     indexX=1;
    end
    if(y < 1)
     indexY=1;
    end

    if(x>=maxwidth)
	indexX = maxwidth;
    end
    if(y>=maxheight)
        indexY = maxheight;
    end

    diffX = candidate.qgradX(indexY,indexX);
    diffY = candidate.qgradY(indexY,indexX);
   
    if(candidate.modelDist(diffX,diffY) == 0)
	  significance = 0;	
    end
   
    if(candidate.modelDist(diffX,diffY) ~= 0)
	significance = target(diffX,diffY)/candidate.modelDist(diffX,diffY);
    end
    
    wi(indexX,indexY) = candidate.gradTable(diffX,diffY)*significance;
    parameter = (candidate.center-[x y])./candidate.h;
    numerator = numerator + ([x y]*wi(indexX,indexY)*uniformK(parameter));
    denominator = denominator + wi(indexX,indexY)*uniformK(parameter);
  end
end

newPoint = numerator/denominator;
newPoint = round(newPoint);

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?