本文为tldGenerateFeatures.m的代码附上注释
function f = tldGenerateFeatures(nTREES, nFEAT, show)%产生pixel comparison并显示
SHI = 1/5;
SCA = 1;
OFF = SHI;
x = repmat(ntuples(0:SHI:1,0:SHI:1),2,1); %x:4x36的数组
x = [x x + SHI/2]; %x:4x72
k = size(x,2); %k=72
r = x; r(3,:) = r(3,:) + (SCA*rand(1,k)+OFF); %r:4x72第三行加随机量
l = x; l(3,:) = l(3,:) - (SCA*rand(1,k)+OFF); %l:4x72第三行减随机量
t = x; t(4,:) = t(4,:) - (SCA*rand(1,k)+OFF); %类似
b = x; b(4,:) = b(4,:) + (SCA*rand(1,k)+OFF);%类似
x = [r l t b]; %x:4x288
idx = all(x([1 2],:) < 1 & x([1 2],:) > 0,1); %取出所有1,2行小于1大于0.1的列,相应idx[i]=1
x = x(:,idx); %取出所有idx[i]=1的列组成新的x
x(x > 1) = 1; %大于1的赋1
x(x < 0) = 0;
numF = size(x,2); %计算新x的列数 164
x = x(:,randperm(numF)); %随机排列这16列
x = x(:,1:nFEAT*nTREES); %取特征对数*随机树数个列13*10=130列 4*130
x = reshape(x,4*nFEAT,nTREES); %变为52*10并输出 1、2行为一个坐标 3、4行为一个坐标,两个坐标行成一个特征对,论文里称为pixel comparisons
f.x = x; %输出f.x中为
f.type = 'forest';
% show
if nargin == 3 %只有当第三输入参量赋值且不为0时才输出显示这些特征点,并且在每一对之间连线
if show
for i = 1:nTREES
F = 1+99*reshape(f.x(:,i),4,[]); %f.x的每一列为一个tree里的特征对,这里取出一列重排为4*13 并*99+1保证不出现0
img = zeros(100,100);
imshow(img);
line(F([1 3],:),F([2 4],:),'linewidth',1,'color','w');
pause(.05);
end
end
end
其中ntuples方法的理解,使用一个小例子就明白了。
例如:ntuples([1 2],[1,2,3]),输出如下。
ans =
1 1 1 2 2 2
1 2 3 1 2 3
参考文献: