constructwnew.m

来自「Face recognition using webcam and this d」· M 代码 · 共 64 行

M
64
字号
%NEIGHBOR MODE AND WEIGHTS
function W = constructWnew(fea,options)
fea=double(fea);
if (~exist('options','var'))
   options = [];
else
   if ~strcmpi(class(options),'struct') 
       error('parameter error!');
   end
end
%metric
if ~isfield(options,'Metric')
    options.Metric = 'Euclidean';
end
%KNN
if ~isfield(options,'NeighborMode')
    options.NeighborMode = 'KNN';
end
if ~isfield(options,'k')
   options.k = 5;
end
if options.k < 1
   options.k = 1;
end
%weight mode
if ~isfield(options,'WeightMode')
    options.WeightMode = 'HeatKernel';
end
if ~isfield(options,'t')
   options.t = 1;
end
[nSmp, nFea] = size(fea);
 bDistance = 0;
%euclidean distance
    if strcmpi(options.Metric,'Euclidean')
        D = zeros(nSmp);
        for i=1:nSmp-1
            for j=i+1:nSmp
                D(i,j) = norm(fea(i,:) - fea(j,:));
            end
        end
        D = D+D';
        bDistance = 1;
    end      
        if options.k >= nSmp
            G = ones(nSmp,nSmp);
        else
            G = zeros(nSmp,nSmp);
            if bDistance
                [dump idx] = sort(D, 2); % sort each row
            else
                [dump idx] = sort(-D, 2); % sort each row
            end
            for i=1:nSmp
                G(i,idx(i,1:options.k+1)) = 1;
            end
        end
 %weight mode
 D = exp(-D.^2/options.t);
        W = D.*G;
        W = max(W,W');
        W = sparse(W);     
        size(W);

⌨️ 快捷键说明

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