function [bbs] = edgeBoxes( I, model, varargin )
思想:通过边缘来检测object proposals
出处: C. Lawrence Zitnick and Piotr Doll.. "Edge Boxes: Locating Object Proposals from Edges", ECCV 2014.
INPUTS
% I - input image(s) of filename(s) of input image(s)
% model - Structured Edge model trained with edgesTrain
% opts - parameters (struct or name/value pairs)
% (1) main parameters, see above for details 最重要的两个参数alpha和beta
% .name - [] target filename (if specified return is 1)
% .alpha - [.65] step size of sliding window search
% .beta - [.75] nms threshold for object proposals
% .eta - [1.0] adaptation rate for nms threshold (see arXiv15)
% .minScore - [.01] min score of boxes to detect
% .maxBoxes - [1e4] max number of boxes to detect
% (2) additional parameters, safe to ignore and leave at default vals 附加参数,最好不要修改
% .edgeMinMag - [.1] increase to trade off accuracy for speed
% .edgeMergeThr - [.5] increase to trade off accuracy for speed
% .clusterMinMag - [.5] increase to trade off accuracy for speed
% .maxAspectRatio - [3] max aspect ratio of boxes
% .minBoxArea - [1000] minimum area of boxes
% .gamma - [2] affinity sensitivity, see equation 1 in paper
% .kappa - [1.5] scale sensitivity, see equation 3 in paper
%
% OUTPUTS
% bbs - [nx5] array containing proposal bbs [x y w h score] score是检测置信度
% USAGE 用法
% opts = edgeBoxes()
% bbs = edgeBoxes( I, model, opts )
代码正文部分:
//get default parameters (unimportant parameters are undocumented)
dfs={'name','', 'alpha',.65, 'beta',.75, 'eta',1, 'minScore',.01, ...
'maxBoxes',1e4, 'edgeMinMag',.1, 'edgeMergeThr',.5,'clusterMinMag',.5,...
'maxAspectRatio',3, 'minBoxArea',1000, 'gamma',2, 'kappa',1.5 };
o=getPrmDflt(varargin,dfs,1); //prm = getPrmDflt( prm, dfs, [checkExtra] )checkExtra =1 ,则有定义外的参数就报错
if(nargin==0), bbs=o; return; end //nargin是输入的参数的数目,如果等于零,就是调用了opts=edgeBoxes(),这个时候只需要把补全了的参数结构体返回就好了,函数也就运行到这里结束。
//run detector possibly over multiple images and optionally save results
f=o.name; if(~isempty(f) && exist(f,'file')), bbs=1; return; end
if(~iscell(I)), bbs=edgeBoxesImg(I,model,o); else n=length(I);
bbs=cell(n,1); parfor i=1:n, bbs{i}=edgeBoxesImg(I{i},model,o); end; end
d=fileparts(f); if(~isempty(d)&&~exist(d,'dir')), mkdir(d); end
if(~isempty(f)), save(f,'bbs'); bbs=1; end
end
function bbs = edgeBoxesImg( I, model, o )
//Generate Edge Boxes object proposals in single image.
if(all(ischar(I))), I=imread(I); end
model.opts.nms=0; [E,O]=edgesDetect(I,model);
if(0), E=gradientMag(convTri(single(I),4)); E=E/max(E(:)); end
E=edgesNmsMex(E,O,2,0,1,model.opts.nThreads);
bbs=edgeBoxesMex(E,O,o.alpha,o.beta,o.eta,o.minScore,o.maxBoxes,...
o.edgeMinMag,o.edgeMergeThr,o.clusterMinMag,...
o.maxAspectRatio,o.minBoxArea,o.gamma,o.kappa);
end
子函数:产生单张图像的object proposals
function bbs = edgeBoxesImg( I, model, o )
% Generate Edge Boxes object proposals in single image.
if(all(ischar(I))), I=imread(I); end
model.opts.nms=0; [E,O]=edgesDetect(I,model);
if(0), E=gradientMag(convTri(single(I),4)); E=E/max(E(:)); end
E=edgesNmsMex(E,O,2,0,1,model.opts.nThreads);
bbs=edgeBoxesMex(E,O,o.alpha,o.beta,o.eta,o.minScore,o.maxBoxes,...
o.edgeMinMag,o.edgeMergeThr,o.clusterMinMag,...
o.maxAspectRatio,o.minBoxArea,o.gamma,o.kappa);
end