1

我在问我如何使用 trainCascadeObjectDetector,而我已经创建了一个由文件名和绑定框坐标组成的正样本结构。我也有一个负面的示例图像文件。但是当我将功能作为流

trainCascadeObjectDetector('newDetector.xml', str, negativeFolder, 'FalseAlarmRate', 0.2, 'NumCascadeStages', 5);

我有这个错误:

Error using trainCascadeObjectDetector>parseInputs (line 306)
Argument 'POSITIVE_INSTANCES' failed validation with error:
Cannot find struct field 'imageFilename' in POSITIVE_INSTANCES.

Error in trainCascadeObjectDetector (line 161)
parser = parseInputs(varargin{:});
4

1 回答 1

2

正如错误本身所说, str 不包含名为 的字段imageFilename,它应该是图像文件所在的字段。引用 matlab 文档:

POSITIVE_INSTANCES 是一个结构数组,其中包含有关正实例的信息。结构字段是: imageFilename - 指定图像名称的字符串。图像可以是真彩色、灰度或索引,采用 IMREAD 支持的任何格式。

objectBoundingBoxes    - An M-by-4 matrix of [x y width height] 
                         bounding boxes specifying object
                         locations.

因此,您的str参数应该是包含此信息的结构数组,即(file1 有 3 个框,file2 2 和 file3 4):

str = struct('imageFileName',{'file1Path', 'file2Path', 'file3Path'},...
  'objectBoundingBoxes',{[xBox1 yBox1 w1 h1;xBox2 yBox2 w2 h2;xBox3 yBox3 w3 h3]...
  [xBox1 yBox1 w1 h1;xBox2 yBox2 w2 h2],... 
  [xBox1 yBox1 w1 h1;xBox2 yBox2 w2 h2;xBox3 yBox3 w3 h3,xBox4 yBox4 w4 h4]});

或您想要声明它的任何其他方式。但请确保以这种格式输入文件。

于 2013-08-26T15:02:18.063 回答