findsinglethreshold.m
来自「基于boosting的人脸检测的matlab实现」· M 代码 · 共 55 行
M
55 行
%Finds the best threshold using only one feature per each vector, using
%multiclas weights
function [a,b,th,error]=findSingleThreshold(Data,Weights,z,positiveClasses)
[nfeat Nsamples]=size(Data);
[Data, indData] = sort(Data);
Weights=Weights/sum(sum(Weights));
z = z(indData); Weights = Weights(:,indData);
if size(positiveClasses,2)==1
i = positiveClasses(1);
SzW = cumsum(z.*Weights(i,:));
EzW = SzW(end);
SW = cumsum(Weights(i,:));
b = SzW ./ SW;
zz = SW == 1;
SW(zz) = 0;
a = (EzW - SzW) ./ (1-SW) - b;
SW(zz) = 1;
Error = sum(Weights(i,:).*z.^2) - 2*a.*(EzW-SzW) - 2*b*EzW + (a.^2 +2*a.*b) .* (1-SW) + b.^2;
else
for i=1:size(positiveClasses,2)
SzW(i,:) = cumsum(z.*Weights(i,:));
SW(i,:) = cumsum(Weights(i,:));
end
SzW = sum(SzW);
SW = sum(SW);
EzW = SzW(end);
b = SzW ./ SW;
zz = SW == 1;
SW(zz) = 0;
a = (EzW - SzW) ./ (1-SW) - b;
SW(zz) = 1;
Error = sum(Weights(i,:).*z.^2) - 2*a.*(EzW-SzW) - 2*b*EzW + (a.^2 +2*a.*b) .* (1-SW) + b.^2;
end
[error, k] = min(Error);
if k == Nsamples
th = Data(k);
else
th = (Data(k) + Data(k+1))/2;
end
a=a(k);
b=b(k);
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?