📄 meanshift.m
字号:
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 + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -