Commit b0acb13e243de04c956e6b83626681e18c46c944

Authored by Jordan Cheney
1 parent 53b24eed

Updated plugin documentation, documented command line API and added to C++ Plugin API

Showing 183 changed files with 2628 additions and 2772 deletions

Too many changes.

To preserve performance only 100 of 183 files are displayed.

app/br/br.cpp
@@ -251,19 +251,22 @@ private: @@ -251,19 +251,22 @@ private:
251 "-train <gallery> ... <gallery> [{model}]\n" 251 "-train <gallery> ... <gallery> [{model}]\n"
252 "-enroll <input_gallery> ... <input_gallery> {output_gallery}\n" 252 "-enroll <input_gallery> ... <input_gallery> {output_gallery}\n"
253 "-compare <target_gallery> <query_gallery> [{output}]\n" 253 "-compare <target_gallery> <query_gallery> [{output}]\n"
  254 + "-pairwiseCompare <target_gallery> <query_gallery> [{output}]\n"
254 "-eval <simmat> [<mask>] [{csv}] [{matches}]\n" 255 "-eval <simmat> [<mask>] [{csv}] [{matches}]\n"
  256 + "-inplaceEval <simmat> <target> <query> [{csv}]\n"
255 "-plot <file> ... <file> {destination}\n" 257 "-plot <file> ... <file> {destination}\n"
256 "\n" 258 "\n"
257 "==== Other Commands ====\n" 259 "==== Other Commands ====\n"
258 "-fuse <simmat> ... <simmat> (None|MinMax|ZScore|WScore) (Min|Max|Sum[W1:W2:...:Wn]|Replace|Difference|None) {simmat}\n" 260 "-fuse <simmat> ... <simmat> (None|MinMax|ZScore|WScore) (Min|Max|Sum[W1:W2:...:Wn]|Replace|Difference|None) {simmat}\n"
259 "-cluster <simmat> ... <simmat> <aggressiveness> {csv}\n" 261 "-cluster <simmat> ... <simmat> <aggressiveness> {csv}\n"
260 "-makeMask <target_gallery> <query_gallery> {mask}\n" 262 "-makeMask <target_gallery> <query_gallery> {mask}\n"
  263 + "-makePairwiseMask <target_gallery> <query_gallery> {mask}\n"
261 "-combineMasks <mask> ... <mask> {mask} (And|Or)\n" 264 "-combineMasks <mask> ... <mask> {mask} (And|Or)\n"
262 "-cat <gallery> ... <gallery> {gallery}\n" 265 "-cat <gallery> ... <gallery> {gallery}\n"
263 "-convert (Format|Gallery|Output) <input_file> {output_file}\n" 266 "-convert (Format|Gallery|Output) <input_file> {output_file}\n"
264 "-evalClassification <predicted_gallery> <truth_gallery> <predicted property name> <ground truth proprty name>\n" 267 "-evalClassification <predicted_gallery> <truth_gallery> <predicted property name> <ground truth proprty name>\n"
265 "-evalClustering <clusters> <gallery>\n" 268 "-evalClustering <clusters> <gallery>\n"
266 - "-evalDetection <predicted_gallery> <truth_gallery> [{csv}] [{normalize}] [{minSize}]\n" 269 + "-evalDetection <predicted_gallery> <truth_gallery> [{csv}] [{normalize}] [{minSize}] [{maxSize}]\n"
267 "-evalLandmarking <predicted_gallery> <truth_gallery> [{csv} [<normalization_index_a> <normalization_index_b>] [sample_index] [total_examples]]\n" 270 "-evalLandmarking <predicted_gallery> <truth_gallery> [{csv} [<normalization_index_a> <normalization_index_b>] [sample_index] [total_examples]]\n"
268 "-evalRegression <predicted_gallery> <truth_gallery> <predicted property name> <ground truth property name>\n" 271 "-evalRegression <predicted_gallery> <truth_gallery> <predicted property name> <ground truth property name>\n"
269 "-assertEval <simmat> <mask> <accuracy>\n" 272 "-assertEval <simmat> <mask> <accuracy>\n"
@@ -271,6 +274,7 @@ private: @@ -271,6 +274,7 @@ private:
271 "-plotLandmarking <file> ... <file> {destination}\n" 274 "-plotLandmarking <file> ... <file> {destination}\n"
272 "-plotMetadata <file> ... <file> <columns>\n" 275 "-plotMetadata <file> ... <file> <columns>\n"
273 "-project <input_gallery> {output_gallery}\n" 276 "-project <input_gallery> {output_gallery}\n"
  277 + "-deduplicate <input_gallery> <output_gallery> <threshold>"
274 "-getHeader <matrix>\n" 278 "-getHeader <matrix>\n"
275 "-setHeader {<matrix>} <target_gallery> <query_gallery>\n" 279 "-setHeader {<matrix>} <target_gallery> <query_gallery>\n"
276 "-<key> <value>\n" 280 "-<key> <value>\n"
@@ -282,6 +286,7 @@ private: @@ -282,6 +286,7 @@ private:
282 "-about\n" 286 "-about\n"
283 "-version\n" 287 "-version\n"
284 "-daemon\n" 288 "-daemon\n"
  289 + "-slave\n"
285 "-exit\n"); 290 "-exit\n");
286 } 291 }
287 }; 292 };
docs/docs/api_docs/c_api/functions.md
@@ -263,7 +263,7 @@ Creates a **.csv** file containing performance metrics from evaluating the simil @@ -263,7 +263,7 @@ Creates a **.csv** file containing performance metrics from evaluating the simil
263 263
264 ## br_assert_eval 264 ## br_assert_eval
265 265
266 -Evaluates the similarity matrix using the mask matrix. Function aborts ff TAR @ FAR = 0.001 does not meet an expected performance value. 266 +Evaluates the similarity matrix using the mask matrix. Function aborts if TAR @ FAR = 0.001 does not meet an expected performance value.
267 267
268 * **function definition:** 268 * **function definition:**
269 269
@@ -794,7 +794,7 @@ Returns the full path to the root of the SDK. @@ -794,7 +794,7 @@ Returns the full path to the root of the SDK.
794 794
795 ## br_get_header 795 ## br_get_header
796 796
797 -Retrieve the target and query inputs in the [BEE matrix](../../technical.md#the-evaluation-harness) header. See the bullets at the top of this page on managed return values. 797 +Retrieve the target and query inputs in the [BEE matrix](../../technical.md#the-evaluation-harness) header. For information on managed return values see [here](../c_api.md#memory).
798 798
799 * **function definition:** 799 * **function definition:**
800 800
@@ -900,8 +900,8 @@ Convenience function for training on multiple inputs @@ -900,8 +900,8 @@ Convenience function for training on multiple inputs
900 Parameter | Type | Description 900 Parameter | Type | Description
901 --- | --- | --- 901 --- | --- | ---
902 num_inputs | int | Size of **inputs** 902 num_inputs | int | Size of **inputs**
903 - inputs[] | const char * | An array of [galleries](../cpp_api.md#gallery) to train on.  
904 - modell | const char *model = | (Optional) String specifying the binary file to serialize training results to. The trained algorithm can be recovered by using this file as the algorithm. By default the trained algorithm will not be serialized to disk. 903 + inputs[] | const char * | An array of [galleries](../cpp_api/gallery/gallery.md) to train on.
  904 + model | const char * | (Optional) String specifying the binary file to serialize training results to. The trained algorithm can be recovered by using this file as the algorithm. By default the trained algorithm will not be serialized to disk.
905 905
906 * **output:** (void) 906 * **output:** (void)
907 * **see:** [br_train](#br_train) 907 * **see:** [br_train](#br_train)
@@ -922,6 +922,24 @@ Get the current OpenBR version. @@ -922,6 +922,24 @@ Get the current OpenBR version.
922 922
923 --- 923 ---
924 924
  925 +## br_slave_process
  926 +
  927 +For internal use via [ProcessWrapperTransform](../plugins/core.md#processwrappertransform)
  928 +
  929 +* **function definition:**
  930 +
  931 + void br_slave_process(const char * baseKey)
  932 +
  933 +* **parameters:**
  934 +
  935 + Parameter | Type | Description
  936 + --- | --- | ---
  937 + baseKey | const char * | base key for the slave process
  938 +
  939 +* **output:** (void)
  940 +
  941 +---
  942 +
925 ## br_load_img 943 ## br_load_img
926 944
927 Load an image from a string buffer. This is an easy way to pass an image in memory from another programming language to openbr. 945 Load an image from a string buffer. This is an easy way to pass an image in memory from another programming language to openbr.
@@ -1179,7 +1197,7 @@ Enroll a [Template](../cpp_api/template/template.md) from the C API! @@ -1179,7 +1197,7 @@ Enroll a [Template](../cpp_api/template/template.md) from the C API!
1179 1197
1180 Parameter | Type | Description 1198 Parameter | Type | Description
1181 --- | --- | --- 1199 --- | --- | ---
1182 - tmpl | br_template | Pointer to a [Template](../cpp_api.md#template). 1200 + tmpl | br_template | Pointer to a [Template](../cpp_api/template/template.md).
1183 1201
1184 * **output:** ([br_template_list](typedefs.md#br_template_list)) Returns a pointer to a [TemplateList](../cpp_api/templatelist/templatelist.md) 1202 * **output:** ([br_template_list](typedefs.md#br_template_list)) Returns a pointer to a [TemplateList](../cpp_api/templatelist/templatelist.md)
1185 1203
docs/docs/api_docs/cl_api.md
  1 +The command line API is a tool to run OpenBR from the command line. The command line is the easiest and fastest way to run OpenBR!
  2 +
  3 +The following is a detailed description of the command line API. The command line API is really just a set of wrappers to call the [C API](c_api.md). All of the flags in this API have a corresponding C API call. To help display the examples the following shorthand definitions will be used:
  4 +
  5 +Shortcut | Definition
  6 +--- | ---
  7 +<arg> | <> Represent an input argument
  8 +{arg} | {} Represent an output argument
  9 +[arg] | [] Represent an optional argument
  10 +(arg0|...|argN) | (...|...) Represent a choice.
  11 +
  12 +## Algorithms
  13 +
  14 +Almost every command line process needs to specify an algorithm to work properly. Algorithms in OpenBR are described in detail [here](../tutorials.md#algorithms-in-openbr). To specify algorithms to the command line use the <tt>-algorithm</tt> flag like so:
  15 +
  16 + -algorithm "AlgorithmString"
  17 +
  18 +Make sure you use the quotes if your algorithm is longer than one plugin because special characters in OpenBR are also special characters (with very different meanings!) in Bash.
  19 +
  20 +## Core Commands
  21 +
  22 +### -train {: #train }
  23 +
  24 +Train a model
  25 +
  26 +* **arguments:**
  27 +
  28 + -train <gallery> ... <gallery> [{model}]
  29 +
  30 +* **wraps:** [br_train_n](c_api/functions.md#br_train_n)
  31 +
  32 +### -enroll {: #enroll }
  33 +
  34 +Enroll a [Gallery](cpp_api/gallery/gallery.md) through an algorithm
  35 +
  36 +* **arguments:**
  37 +
  38 + -enroll <input_gallery> ... <input_gallery> {output_gallery}
  39 +
  40 +* **wraps:** [br_enroll](c_api/functions.md#br_enroll) or [br_enroll_n](c_api/functions.md#br_enroll_n) depending on the input size
  41 +
  42 +### -compare {: #compare }
  43 +
  44 +Compare query [Templates](cpp_api/template/template.md) against a target [Gallery](cpp_api/gallery/gallery.md)
  45 +
  46 +* **arguments:**
  47 +
  48 + -compare <target_gallery> <query_gallery> [{output}]
  49 +
  50 +* **wraps:** [br_compare](c_api/functions.md#br_compare)
  51 +
  52 +### -pairwiseCompare {: #pairwisecompare }
  53 +
  54 +DOCUMENT ME
  55 +
  56 +* **arguments:**
  57 +
  58 + -pairwiseCompare <target_gallery> <query_gallery> [{output}]
  59 +
  60 +* **wraps:** [br_pairwise_compare](c_api/functions.md#br_pairwise_compare)
  61 +
  62 +### -eval {: #eval }
  63 +
  64 +Evaluate a similarity matrix
  65 +
  66 +* **arguments:**
  67 +
  68 + -eval <simmat> [<mask>] [{csv}] [{matches}]
  69 +
  70 +* **wraps:** [br_eval](c_api/functions.md#br_eval)
  71 +
  72 +### -inplaceEval {: #inplaceeval }
  73 +
  74 +DOCUMENT ME
  75 +
  76 +* **arguments:**
  77 +
  78 + -inplaceEval <simmat> <target> <query> [{output}]
  79 +
  80 +* **wraps:** [br_inplace_eval](c_api/functions.md#br_inplace_eval)
  81 +
  82 +### -plot {: #inplaceeval}
  83 +
  84 +Plot the results of an evaluation
  85 +
  86 +* **arguments:**
  87 +
  88 + -plot <file> ... <file> {destination}
  89 +
  90 +* **wraps:** [br_plot](c_api/functions.md#br_plot)
  91 +
  92 +
  93 +## Other Commands
  94 +
  95 +### -fuse {: #fuse }
  96 +
  97 +Perform score level fusion on similarity matrices.
  98 +
  99 +* **arguments:**
  100 +
  101 + -fuse <simmat> ... <simmat> (None|MinMax|ZScore|WScore) (Min|Max|Sum[W1:W2:...:Wn]|Replace|Difference|None) {simmat}
  102 +
  103 +* **wraps:** [br_fuse](c_api/functions.md#br_fuse)
  104 +
  105 +### -cluster {: #cluster }
  106 +
  107 +Clusters one or more similarity matrices into a list of subjects
  108 +
  109 +* **arguments:**
  110 +
  111 + -cluster <simmat> ... <simmat> <aggressiveness> {csv}
  112 +
  113 +* **wraps:** [br_cluster](c_api/functions.md#br_cluster)
  114 +
  115 +### -makeMask {: #makemask }
  116 +
  117 +Constructs a mask from target and query inputs
  118 +
  119 +* **arguments:**
  120 +
  121 + -makeMask <target_gallery> <query_gallery> {mask}
  122 +
  123 +* **wraps:** [br_make_mask](c_api/functions.md#br_make_mask)
  124 +
  125 +### -makePairwiseMask {: #makepairwisemask }
  126 +
  127 +Constructs a mask from target and query inputs considering the target and input sets to be definite pairwise comparisons.
  128 +
  129 +* **arguments:**
  130 +
  131 + -makePairwiseMask <target_gallery> <query_gallery> {mask}
  132 +
  133 +* **wraps:** [br_make_pairwise_mask](c_api/functions.md#br_make_pairwise_mask)
  134 +
  135 +### -combineMasks {: #combinemask }
  136 +
  137 +Combines several equal-sized mask matrices. A comparison may not be simultaneously indentified as both a genuine and an imposter by different input masks.
  138 +
  139 +* **arguments:**
  140 +
  141 + -combineMasks <mask> ... <mask> {mask} (And|Or)
  142 +
  143 +* **wraps:** [br_combine_masks](c_api/functions.md#br_combine_masks)
  144 +
  145 +### -cat {: #cat }
  146 +
  147 +Concatenates a list of galleries into 1 gallery
  148 +
  149 +* **arguments:**
  150 +
  151 + -cat <gallery> ... <gallery> {gallery}
  152 +
  153 +* **wraps:** [br_cat](c_api/functions.md#br_cat)
  154 +
  155 +### -convert {: #convert }
  156 +
  157 +Convert a file to a different type. Files can only be converted to types within the same group. For example formats can only be converted to other formats.
  158 +
  159 +* **arguments:**
  160 +
  161 + -convert (Format|Gallery|Output) <input_file> {output_file}
  162 +
  163 +* **wraps:** [br_convert](c_api/functions.md#br_convert)
  164 +
  165 +### -evalClassification {: #evalclassification }
  166 +
  167 +Evaluates and prints classification accuracy to terminal
  168 +
  169 +* **arguments:**
  170 +
  171 + -evalClassification <predicted_gallery> <truth_gallery> <predicted property name> <ground truth property name>
  172 +
  173 +* **wraps:** [br_eval_classification](c_api/functions.md#br_eval_classification)
  174 +
  175 +### -evalClustering {: #evalclustering }
  176 +
  177 +Evaluates and prints clustering accuracy to the terminal
  178 +
  179 +* **arguments:**
  180 +
  181 + -evalClustering <clusters> <gallery>
  182 +
  183 +* **wraps:** [br_eval_clustering](c_api/functions.md#br_eval_clustering)
  184 +
  185 +### -evalDetection {: #evaldetection }
  186 +
  187 +Evaluates and prints detection accuracy to terminal
  188 +
  189 +* **arguments:**
  190 +
  191 + -evalDetection <predicted_gallery> <truth_gallery> [{csv}] [{normalize}] [{minSize}] [{maxSize}]
  192 +
  193 +* **wraps:** [br_eval_detection](c_api/functions.md#br_eval_detection)
  194 +
  195 +### -evalLandmarking {: #evallandmarking }
  196 +
  197 +Evaluates and prints landmarking accuracy to terminal
  198 +
  199 +* **arguments:**
  200 +
  201 + -evalLandmarking <predicted_gallery> <truth_gallery> [{csv} [<normalization_index_a> <normalization_index_b>] [sample_index] [total_examples]]
  202 +
  203 +* **wraps:** [br_eval_landmarking](c_api/functions.md#br_eval_landmarking)
  204 +
  205 +
  206 +### -evalRegression {: #evalregression }
  207 +
  208 +Evaluates regression accuracy to disk
  209 +
  210 +* **arguments:**
  211 +
  212 + -evalRegression <predicted_gallery> <truth_gallery> <predicted property name> <ground truth property name>
  213 +
  214 +* **wraps:** [br_eval_regression](c_api/functions.md#br_eval_regression)
  215 +
  216 +### -assertEval {: #asserteval }
  217 +
  218 +Evaluates the similarity matrix using the mask matrix. Function aborts if TAR @ FAR = 0.001 does not meet an expected performance value.
  219 +
  220 +* **arguments:**
  221 +
  222 + -assertEval <simmat> <mask> <accuracy>
  223 +
  224 +* **wraps:** [br_assert_eval](c_api/functions.md#br_assert_eval)
  225 +
  226 +### -plotDetection {: #plotdetection }
  227 +
  228 +Renders detection performance figures for a set of .csv files created by [-evalDetection](#evaldetection).
  229 +
  230 +* **arguments:**
  231 +
  232 + -plotDetection <file> ... <file> {destination}
  233 +
  234 +* **wraps:** [br_plot_detection](c_api/functions.md#br_plot_detection)
  235 +
  236 +### -plotLandmarking {: #plotlandmarking }
  237 +
  238 +Renders landmarking performance figures for a set of .csv files created by [-evalLandmarking](#evallandmarking)
  239 +
  240 +* **arguments:**
  241 +
  242 + -plotLandmarking <file> ... <file> {destination}
  243 +
  244 +* **wraps:** [br_plot_landmarking](c_api/functions.md#br_plot_landmarking)
  245 +
  246 +### -plotMetadata {: #plotmetadata }
  247 +
  248 +Renders metadata figures for a set of .csv files with specified columns
  249 +
  250 +* **arguments:**
  251 +
  252 + -plotMetadata <file> ... <file> <columns>
  253 +
  254 +* **wraps:** [br_plot_metadata](c_api/functions.md#br_plot_metadata)
  255 +
  256 +### -project {: #project }
  257 +
  258 +A naive alternative to [-enroll](#enroll)
  259 +
  260 +* **arguments:**
  261 +
  262 + -project <input_gallery> {output_gallery}
  263 +
  264 +* **wraps:** [br_project](c_api/functions.md#br_project)
  265 +
  266 +### -getHeader {: #getheader }
  267 +
  268 +Retrieve the target and query inputs in the [BEE matrix](../technical.md#the-evaluation-harness) header
  269 +
  270 +* **arguments:**
  271 +
  272 + -getHeader <matrix>
  273 +
  274 +* **wraps:** [br_get_header](c_api/functions.md#br_get_header)
  275 +
  276 +### -setHeader {: #setheader }
  277 +
  278 +Update the target and query inputs in the [BEE matrix](../technical.md#the-evaluation-harness) header
  279 +
  280 +* **arguments:**
  281 +
  282 + -setHeader {<matrix>} <target_gallery> <query_gallery>
  283 +
  284 +* **wraps:** [br_set_header](c_api/functions.md#br_set_header)
  285 +
  286 +### -&lt;key&gt; &lt;value&gt; {: #setproperty }
  287 +
  288 +Appends a provided value to the [global metadata](cpp_api/context/context.md) using a provided key
  289 +
  290 +* **arguments:**
  291 +
  292 + -<key> <value>
  293 +
  294 +* **wraps:** [br_set_property](c_api/functions.md#br_set_property)
  295 +
  296 +
  297 +## Miscellaneous
  298 +
  299 +### -help {: #help }
  300 +
  301 +Print command line API documentation to the terminal
  302 +
  303 +* **arguments:**
  304 +
  305 + -help
  306 +
  307 +* **wraps:** N/A
  308 +
  309 +### -gui {: #gui }
  310 +
  311 +If this flag is set OpenBR will enable GUI windows to be launched. It must be the first flag set.
  312 +
  313 +* **arguments:**
  314 +
  315 + br -gui
  316 +
  317 +* **wraps:** N/A
  318 +
  319 +### -objects {: #objects }
  320 +
  321 +Returns names and parameters for the requested objects. Each object is newline seperated. Arguments are seperated from the object name with a tab. This function uses [QRegExp][QRegExp] syntax
  322 +
  323 +* **arguments:**
  324 +
  325 + -objects [abstraction [implementation]]
  326 +
  327 +* **wraps:** [br_objects](c_api/functions.md#br_objects)
  328 +
  329 +### -about {: #about }
  330 +
  331 +Get a string with the name, version, and copyright of the project. This string is suitable for printing or terminal
  332 +
  333 +* **arguments:**
  334 +
  335 + -about
  336 +
  337 +* **wraps:** [br_about](c_api/functions.md#br_about)
  338 +
  339 +### -version {: #version }
  340 +
  341 +Get the current OpenBR version
  342 +
  343 +* **arguments:**
  344 +
  345 + -version
  346 +
  347 +* **wraps:** [br_version](c_api/functions.md#br_version)
  348 +
  349 +### -slave {: #slave }
  350 +
  351 +For internal use via [ProcessWrapperTransform](../plugins/core.md#processwrappertransform)
  352 +
  353 +* **arguments:**
  354 +
  355 + -slave <baseKey>
  356 +
  357 +* **wraps:** [br_slave_process](c_api/functions.md#br_slave_process)
  358 +
  359 +### -daemon {: #daemon }
  360 +
  361 +DOCUMENT ME
  362 +
  363 +* **arguments:**
  364 +
  365 + -daemon <daemon_pipe>
  366 +
  367 +* **wraps:** N/A
  368 +
  369 +### -exit
  370 +
  371 +Exit the application
  372 +
  373 +* **arguments:**
  374 +
  375 + -exit
  376 +
  377 +* **wraps:** N/A
0 \ No newline at end of file 378 \ No newline at end of file
docs/docs/api_docs/cpp_api.md
1 # C++ Plugin API 1 # C++ Plugin API
2 2
3 -The C++ Plugin API is a pluggable API designed to allow the succinct expression of biometrics algorithms as a series of independent plugins. The API exposes a number of data structures and plugin abstractions to use as simple building blocks for complex algorithms. 3 +The C++ Plugin API is a pluggable API designed to allow the succinct expression of biometrics algorithms as a series of independent plugins. The API exposes a number of data structures and plugin abstractions to use as simple building blocks for complex algorithms.
4 4
5 ## Data Structures 5 ## Data Structures
6 6
7 -The API defines two data structures: 7 +The API defines two data structures:
8 8
9 * [Files](cpp_api/file/file.md) 9 * [Files](cpp_api/file/file.md)
10 * [Templates](cpp_api/template/template.md) 10 * [Templates](cpp_api/template/template.md)
11 11
12 -[Files](cpp_api/file/file.md) are used for storing textual data and [Templates](cpp_api/template/template.md) act as containers that hold images, stored as OpenCV [Mats][Mat], and [Files](cpp_api/file/file.md). 12 +[Files](cpp_api/file/file.md) are used for storing textual data and [Templates](cpp_api/template/template.md) act as containers that hold images, stored as OpenCV [Mats][Mat], and [Files](cpp_api/file/file.md).
13 13
14 ## Plugin Abstractions 14 ## Plugin Abstractions
15 15
@@ -25,20 +25,19 @@ Plugin | Function @@ -25,20 +25,19 @@ Plugin | Function
25 [Output](cpp_api/output/output.md) | Used for I/O. Outputs handle the results of Distance comparisons. 25 [Output](cpp_api/output/output.md) | Used for I/O. Outputs handle the results of Distance comparisons.
26 [Representation](cpp_api/representation/representation.md) | Converts images into feature vectors. Slightly different then Transforms in implementation and available API calls. 26 [Representation](cpp_api/representation/representation.md) | Converts images into feature vectors. Slightly different then Transforms in implementation and available API calls.
27 [Classifier](cpp_api/classifier/classifier.md) | Classifies feature vectors as members of specific classes 27 [Classifier](cpp_api/classifier/classifier.md) | Classifies feature vectors as members of specific classes
28 - 28 +
29 Additionally, there are several child-abstractions for specific use cases. They are: 29 Additionally, there are several child-abstractions for specific use cases. They are:
30 - 30 +
31 Plugin | Parent | Function 31 Plugin | Parent | Function
32 --- | --- | --- 32 --- | --- | ---
33 [UntrainableTransform](cpp_api/untrainabletransform/untrainabletransform.md) | [Transform](cpp_api/transform/transform.md) | A [Transform](cpp_api/transform/transform.md) that cannot be trained 33 [UntrainableTransform](cpp_api/untrainabletransform/untrainabletransform.md) | [Transform](cpp_api/transform/transform.md) | A [Transform](cpp_api/transform/transform.md) that cannot be trained
34 [MetaTransform](cpp_api/metatransform/metatransform.md) | [Transform](cpp_api/transform/transform.md) | A [Transform](cpp_api/transform/transform.md) that is *not* [independent](cpp_api/transform/members.md#independent) 34 [MetaTransform](cpp_api/metatransform/metatransform.md) | [Transform](cpp_api/transform/transform.md) | A [Transform](cpp_api/transform/transform.md) that is *not* [independent](cpp_api/transform/members.md#independent)
35 [UntrainableMetaTransform](cpp_api/untrainablemetatransform/untrainablemetatransform.md) | [UntrainableTransform](cpp_api/untrainabletransform/untrainabletransform.md) | A [Transform](cpp_api/transform/transform.md) that is *not* [independent](cpp_api/transform/members.md#independent) and cannot be trained 35 [UntrainableMetaTransform](cpp_api/untrainablemetatransform/untrainablemetatransform.md) | [UntrainableTransform](cpp_api/untrainabletransform/untrainabletransform.md) | A [Transform](cpp_api/transform/transform.md) that is *not* [independent](cpp_api/transform/members.md#independent) and cannot be trained
36 - [MetadataTransform](cpp_api/metadatatransform/metadatatransform.md) | [Transform](cpp_api/transform/transform.md) | A [Transform](cpp_api/transform/transform.md) that operates only on [Transform](cpp_api/transform/transform.md) [metadata](cpp_api/transform/members.md#file) 36 + [MetadataTransform](cpp_api/metadatatransform/metadatatransform.md) | [Transform](cpp_api/transform/transform.md) | A [Transform](cpp_api/transform/transform.md) that operates only on [Template](cpp_api/template/template.md) [metadata](cpp_api/template/members.md#file)
37 [UntrainableMetadataTransform](cpp_api/untrainablemetadatatransform/untrainablemetadatatransform.md) | [MetadataTransform](cpp_api/metadatatransform/metadatatransform.md) | A [MetadataTransform](cpp_api/metadatatransform/metadatatransform.md) that cannot be trained 37 [UntrainableMetadataTransform](cpp_api/untrainablemetadatatransform/untrainablemetadatatransform.md) | [MetadataTransform](cpp_api/metadatatransform/metadatatransform.md) | A [MetadataTransform](cpp_api/metadatatransform/metadatatransform.md) that cannot be trained
38 [TimeVaryingTransform](cpp_api/timevaryingtransform/timevaryingtransform.md) | [Transform](cpp_api/transform/transform.md) | A [Transform](cpp_api/transform/transform.md) that changes at runtime as a result of the input 38 [TimeVaryingTransform](cpp_api/timevaryingtransform/timevaryingtransform.md) | [Transform](cpp_api/transform/transform.md) | A [Transform](cpp_api/transform/transform.md) that changes at runtime as a result of the input
39 [UntrainableDistance](cpp_api/untrainabledistance/untrainabledistance.md) | [Distance](cpp_api/distance/distance.md) | A [Distance](cpp_api/distance/distance.md) that cannot be trained 39 [UntrainableDistance](cpp_api/untrainabledistance/untrainabledistance.md) | [Distance](cpp_api/distance/distance.md) | A [Distance](cpp_api/distance/distance.md) that cannot be trained
40 [FileGallery](cpp_api/filegallery/filegallery.md) | [Gallery](cpp_api/gallery/gallery.md) | DOCUMENT ME 40 [FileGallery](cpp_api/filegallery/filegallery.md) | [Gallery](cpp_api/gallery/gallery.md) | DOCUMENT ME
41 [MatrixOutput](cpp_api/matrixoutput/matrixoutput.md) | [Output](cpp_api/output/output.md) | A [Output](cpp_api/output/output.md) that outputs data as a matrix 41 [MatrixOutput](cpp_api/matrixoutput/matrixoutput.md) | [Output](cpp_api/output/output.md) | A [Output](cpp_api/output/output.md) that outputs data as a matrix
42 - 42 +
43 As was stated before, all plugins in OpenBR are constructed using strings stored as [Files](cpp_api/file/file.md). The construction is done at runtime by a [Factory](cpp_api/factory/factory.md) class. The [Factory](cpp_api/factory/factory.md) expects strings of the form "PluginName(property1=value1,propert2=value2...propertyN=valueN)". It then looks up the "PluginName" in a static registry and builds the plugin if found. The registry is populated using a special macro [BR_REGISTER](cpp_api/factory/macros.md#br_register); each plugin needs to register itself and its base abstraction in the factory to enable construction. The purpose of this is to allow algorithms to be described completely by strings. For more information on algorithms in OpenBR please see the [tutorial](../tutorials.md#algorithms-in-openbr) 43 As was stated before, all plugins in OpenBR are constructed using strings stored as [Files](cpp_api/file/file.md). The construction is done at runtime by a [Factory](cpp_api/factory/factory.md) class. The [Factory](cpp_api/factory/factory.md) expects strings of the form "PluginName(property1=value1,propert2=value2...propertyN=valueN)". It then looks up the "PluginName" in a static registry and builds the plugin if found. The registry is populated using a special macro [BR_REGISTER](cpp_api/factory/macros.md#br_register); each plugin needs to register itself and its base abstraction in the factory to enable construction. The purpose of this is to allow algorithms to be described completely by strings. For more information on algorithms in OpenBR please see the [tutorial](../tutorials.md#algorithms-in-openbr)
44 -  
45 \ No newline at end of file 44 \ No newline at end of file
docs/docs/api_docs/cpp_api/compositetransform/compositetransform.md 0 โ†’ 100644
  1 +<!-- CompositeTransform -->
  2 +
  3 +Inherits [TimeVaryingTransform](../timevaryingtransform/timevaryingtransform.md)
  4 +
  5 +Base class for [Transforms](../transform/transform.md) that aggregate subtransforms.
  6 +
  7 +See:
  8 +
  9 +* [Properties](properties.md)
  10 +* [Members](members.md)
  11 +* [Constructors](constructors.md)
  12 +* [Static Functions](statics.md)
  13 +* [Functions](functions.md)
  14 +
  15 +A CompositeTransform is a wrapper around a list of child transforms. It is used internally for plugins like pipes and forks. It offers
0 \ No newline at end of file 16 \ No newline at end of file
docs/docs/api_docs/cpp_api/filegallery/constructors.md 0 โ†’ 100644
  1 +Constructor / Destructor | Description
  2 +--- | ---
  3 +virtual ~FileGallery() | Default destructor. Closes [f](members.md#f)
0 \ No newline at end of file 4 \ No newline at end of file
docs/docs/api_docs/cpp_api/filegallery/filegallery.md
1 <!-- FILE GALLERY --> 1 <!-- FILE GALLERY -->
2 2
3 Inherits [Gallery](../gallery/gallery.md) 3 Inherits [Gallery](../gallery/gallery.md)
  4 +
  5 +A [Gallery](../gallery/gallery.md) that handles data stored on disk (as opposed to data already in memory).
  6 +
  7 +See:
  8 +
  9 +* [Members](members.md)
  10 +* [Constructors](constructors.md)
  11 +* [Static Functions](statics.md)
  12 +* [Functions](functions.md)
  13 +
  14 +[FileGalleries](filegallery.md) are the base abstraction for all [Galleries](../gallery/gallery.md) that handle I/O with the hard drive. They automatically track the size and current position of a file and also provide convienience opererators for opening them for reading and writing.
4 \ No newline at end of file 15 \ No newline at end of file
docs/docs/api_docs/cpp_api/filegallery/functions.md 0 โ†’ 100644
  1 +## void init() {: #init }
  2 +
  3 +Initialize the [FileGallery](filegallery.md). This sets [f](members.md#f) using the file name from [file](../object/members.md#file). It also calls [Gallery](../gallery/gallery.md)::[init](../gallery/functions.md#init).
  4 +
  5 +* **function definition:**
  6 +
  7 + void init()
  8 +
  9 +* **parameters:** NONE
  10 +* **output:** (void)
  11 +
  12 +## qint64 totalSize() {: #totalsize }
  13 +
  14 +Get the total size of the file. This is useful for estimating progress.
  15 +
  16 +* **function definition:**
  17 +
  18 + qint64 totalSize()
  19 +
  20 +* **parameters:** NONE
  21 +* **output:** (qint64) Returns the total size of the file in bytes
  22 +
  23 +## qint64 position() {: #pos }
  24 +
  25 +Get the current index in the file. This is useful for reading and writing blocks of data
  26 +
  27 +* **function definition:**
  28 +
  29 + qint64 position()
  30 +
  31 +* **parameters:** NONE
  32 +* **output:** (qint64) Returns the current position in the file
  33 +
  34 +## bool readOpen() {: #readopen }
  35 +
  36 +Open [f](members.md#f) in read-only mode
  37 +
  38 +* **function definition:**
  39 +
  40 + bool readOpen()
  41 +
  42 +* **parameters:** NONE
  43 +* **output:** (bool) Returns true if the file was opened successfully, false otherwise
  44 +
  45 +## void writeOnly() {: #writeonly }
  46 +
  47 +Open [f](members.md#f) in write-only mode
  48 +
  49 +* **function definition:**
  50 +
  51 + void writeOpen()
  52 +
  53 +* **parameters:** NONE
  54 +* **output:** (void)
0 \ No newline at end of file 55 \ No newline at end of file
docs/docs/api_docs/cpp_api/filegallery/members.md 0 โ†’ 100644
  1 +Member | Type | Description
  2 +--- | --- | ---
  3 +<a class="table-anchor" id="f"></a>f | [QFile][QFile] | The file on disk. It has the same name as [file](../object/members.md#file)
docs/docs/api_docs/cpp_api/filegallery/statics.md 0 โ†’ 100644
  1 +NONE
0 \ No newline at end of file 2 \ No newline at end of file
docs/docs/api_docs/cpp_api/gallery/gallery.md
@@ -6,6 +6,7 @@ Plugin base class for storing a list of enrolled templates. @@ -6,6 +6,7 @@ Plugin base class for storing a list of enrolled templates.
6 6
7 See: 7 See:
8 8
  9 +* [Properties](properties.md)
9 * [Members](members.md) 10 * [Members](members.md)
10 * [Constructors](constructors.md) 11 * [Constructors](constructors.md)
11 * [Static Functions](statics.md) 12 * [Static Functions](statics.md)
docs/docs/api_docs/cpp_api/metadatatransform/metadatatransform.md
@@ -11,4 +11,4 @@ See: @@ -11,4 +11,4 @@ See:
11 * [Static Functions](statics.md) 11 * [Static Functions](statics.md)
12 * [Functions](functions.md) 12 * [Functions](functions.md)
13 13
14 -[MetadataTransforms](metadatatransform.md) are [Transforms](../transform/transform.md) that operate soley on textual [metadata](../transform/members.md#file). They are *not* [independent](../transform/members.md#independent) because [Templates](../template/template.md) can only every have one collection of [metadata](../template/members.md#file). 14 +[MetadataTransforms](metadatatransform.md) are [Transforms](../transform/transform.md) that operate soley on textual [metadata](../template/members.md#file). They are *not* [independent](../transform/members.md#independent) because [Templates](../template/template.md) can only every have one collection of [metadata](../template/members.md#file).
docs/docs/api_docs/cpp_api/transform/functions.md
@@ -380,7 +380,7 @@ Convenience function to call [smartCopy](#smartcopy-1) without arguments @@ -380,7 +380,7 @@ Convenience function to call [smartCopy](#smartcopy-1) without arguments
380 380
381 ## [Transform](transform.md) \*simplify(bool &newTransform) {: #simplify } 381 ## [Transform](transform.md) \*simplify(bool &newTransform) {: #simplify }
382 382
383 -This is a virtual function. Get a simplified version of the transform for use at project time. The simplified version of the [Transform](transform.md) does not include any [Transforms](transform.md) that are only active at train time. It also removes any [LoadStore](../../plugins/core.md#loadstoretransform) transforms and keeps only their children. Transforms that only are active at train time (see [DownsampleTransform](../../plugins/core.md#downsampletransform) as an example) should overload this function and return their children if they have any or NULL if they do not. 383 +This is a virtual function. Get a simplified version of the transform for use at project time. The simplified version of the [Transform](transform.md) does not include any [Transforms](transform.md) that are only active at train time. It also removes any [LoadStore](../../plugins/core.md#loadstoretransform) transforms and keeps only their children. Transforms that only are active at train time (see [DownsampleTrainingTransform](../../plugins/core.md#downsampletrainingtransform) as an example) should overload this function and return their children if they have any or NULL if they do not.
384 384
385 * **function definition:** 385 * **function definition:**
386 386
docs/docs/api_docs/cpp_api/untrainablemetadatatransform/untrainablemetadatatransform.md
@@ -11,4 +11,4 @@ See: @@ -11,4 +11,4 @@ See:
11 * [Static Functions](statics.md) 11 * [Static Functions](statics.md)
12 * [Functions](functions.md) 12 * [Functions](functions.md)
13 13
14 -[UntrainableMetadataTransforms](untrainablemetadatatransform.md) are [Transforms](../transform/transform.md) that operate soley on textual [metadata](../transform/members.md#file). They are *not* [independent](../transform/members.md#independent), because [Templates](../template/template.md) can only every have one collection of [metadata](../template/members.md#file), and they are *not* [trainable](../transform/members.md#trainable). 14 +[UntrainableMetadataTransforms](untrainablemetadatatransform.md) are [Transforms](../transform/transform.md) that operate soley on textual [metadata](../template/members.md#file). They are *not* [independent](../transform/members.md#independent), because [Templates](../template/template.md) can only every have one collection of [metadata](../template/members.md#file), and they are *not* [trainable](../transform/members.md#trainable).
docs/docs/api_docs/cpp_api/untrainabletransform/untrainabletransform.md
@@ -11,4 +11,4 @@ See: @@ -11,4 +11,4 @@ See:
11 * [Static Functions](statics.md) 11 * [Static Functions](statics.md)
12 * [Functions](functions.md) 12 * [Functions](functions.md)
13 13
14 -This is a base class for [Transforms](../transform/transform.md) that are not trainable. It overloads [train](../transform/functions.md#train-1), [load](../transform/functions.md#load), and [store](../transform/functions.md#store) so that they cannot be used in derived classes. Load and store are overloaded because a [Transform](../transform/transform.md) that doesn't train should also have nothing to save.  
15 \ No newline at end of file 14 \ No newline at end of file
  15 +This is a base class for [Transforms](../transform/transform.md) that are not trainable. It overloads [train](../transform/functions.md#train-1), [load](../object/functions.md#load), and [store](../object/functions.md#store) so that they cannot be used in derived classes. Load and store are overloaded because a [Transform](../transform/transform.md) that doesn't train should also have nothing to save.
docs/docs/api_docs/cpp_api/wrappertransform/constructors.md 0 โ†’ 100644
docs/docs/api_docs/cpp_api/wrappertransform/functions.md 0 โ†’ 100644
docs/docs/api_docs/cpp_api/wrappertransform/members.md 0 โ†’ 100644
docs/docs/api_docs/cpp_api/wrappertransform/properties.md 0 โ†’ 100644
docs/docs/api_docs/cpp_api/wrappertransform/statics.md 0 โ†’ 100644
docs/docs/api_docs/cpp_api/wrappertransform/wrappertransform.md 0 โ†’ 100644
  1 +<!-- WrapperTransform -->
  2 +
  3 +Inherits [Transform](../transform/transform.md)
  4 +
  5 +Base class for [Transforms](../transform/transform.md) that act as decorators of another [Transform](../transform/transform.md)
  6 +
  7 +See:
  8 +
  9 +* [Properties](properties.md)
  10 +* [Members](members.md)
  11 +* [Constructors](constructors.md)
  12 +* [Static Functions](statics.md)
  13 +* [Functions](functions.md)
0 \ No newline at end of file 14 \ No newline at end of file
docs/docs/api_docs/plugins/classification.md
1 # AdaBoostTransform 1 # AdaBoostTransform
2 2
3 Wraps OpenCV's Ada Boost framework 3 Wraps OpenCV's Ada Boost framework
  4 +
4 5
5 * **file:** classification/adaboost.cpp 6 * **file:** classification/adaboost.cpp
6 * **inherits:** [Transform](../cpp_api/transform/transform.md) 7 * **inherits:** [Transform](../cpp_api/transform/transform.md)
  8 +* **author(s):** [Scott Klum][sklum]
7 * **see:** [http://docs.opencv.org/modules/ml/doc/boosting.html](http://docs.opencv.org/modules/ml/doc/boosting.html) 9 * **see:** [http://docs.opencv.org/modules/ml/doc/boosting.html](http://docs.opencv.org/modules/ml/doc/boosting.html)
8 -* **author:** Scott Klum  
9 * **properties:** 10 * **properties:**
10 11
11 -Property | Type | Description  
12 ---- | --- | ---  
13 -type | enum | Type of Adaboost to perform. Options are:<ul><li>Discrete</li><li>Real</li><li>Logit</li><li>Gentle</li></ul>Default is Real.  
14 -splitCriteria | enum | Splitting criteria used to choose optimal splits during a weak tree construction. Options are:<ul><li>Default</li><li>Gini</li><li>Misclass</li><li>Sqerr</li></ul>Default is Default.  
15 -weakCount | int | Maximum number of weak classifiers per stage. Default is 100.  
16 -trimRate | float | A threshold between 0 and 1 used to save computational time. Samples with summary weight  
17 -folds | int | OpenCV parameter variable. Default value is 0.  
18 -maxDepth | int | Maximum height of each weak classifier tree. Default is 1 (stumps).  
19 -returnConfidence | bool | Return the confidence value of the classification or the class value of the classification. Default is true (return confidence value).  
20 -overwriteMat | bool | If true, the output template will be a 1x1 matrix with value equal to the confidence or classification (depending on returnConfidence). If false the output template will be the same as the input template. Default is true.  
21 -inputVariable | QString | Metadata variable storing the label for each template. Default is "Label".  
22 -outputVariable | QString | Metadata variable to store the confidence or classification of each template (depending on returnConfidence). If overwriteMat is true nothing will be written here. Default is "". 12 + Property | Type | Description
  13 + --- | --- | ---
  14 + enum | type | Type of Adaboost to perform. Options are:<ul><li>Discrete</li><li>Real</li><li>Logit</li><li>Gentle</li></ul>Default is Real.
  15 + enum | splitCriteria | Splitting criteria used to choose optimal splits during a weak tree construction. Options are:<ul><li>Default</li><li>Gini</li><li>Misclass</li><li>Sqerr</li></ul>Default is Default.
  16 + int | weakCount | Maximum number of weak classifiers per stage. Default is 100.
  17 + float | trimRate | A threshold between 0 and 1 used to save computational time. Samples with summary weight
  18 + int | folds | OpenCV parameter variable. Default value is 0.
  19 + int | maxDepth | Maximum height of each weak classifier tree. Default is 1 (stumps).
  20 + bool | returnConfidence | Return the confidence value of the classification or the class value of the classification. Default is true (return confidence value).
  21 + bool | overwriteMat | If true, the output template will be a 1x1 matrix with value equal to the confidence or classification (depending on returnConfidence). If false the output template will be the same as the input template. Default is true.
  22 + QString | inputVariable | Metadata variable storing the label for each template. Default is "Label".
  23 + QString | outputVariable | Metadata variable to store the confidence or classification of each template (depending on returnConfidence). If overwriteMat is true nothing will be written here. Default is "".
23 24
24 --- 25 ---
25 26
26 # DFFSTransform 27 # DFFSTransform
27 28
28 -Computes Distance From Feature Space (DFFS) 29 +Computes [Distance](../cpp_api/distance/distance.md) From Feature Space (DFFS)
  30 +
29 31
30 * **file:** classification/lda.cpp 32 * **file:** classification/lda.cpp
31 * **inherits:** [Transform](../cpp_api/transform/transform.md) 33 * **inherits:** [Transform](../cpp_api/transform/transform.md)
32 -* **author:** Josh Klontz 34 +* **author(s):** [Josh Klontz][jklontz]
  35 +* **read:**
  36 +
  37 + 1. *Moghaddam, Baback, and Alex Pentland.*
  38 + **"Probabilistic visual learning for object representation."**
  39 + Pattern Analysis and Machine Intelligence, IEEE Transactions on 19.7 (1997): 696-710.
  40 +
33 * **properties:** 41 * **properties:**
34 42
35 -Property | Type | Description  
36 ---- | --- | ---  
37 -keep | float | Sets PCA keep property. Default is 0.95. 43 + Property | Type | Description
  44 + --- | --- | ---
  45 + keep | float | Sets PCA keep property. Default is 0.95.
38 46
39 --- 47 ---
40 48
41 # EBIFTransform 49 # EBIFTransform
42 50
43 Face Recognition Using Early Biologically Inspired Features 51 Face Recognition Using Early Biologically Inspired Features
  52 +
44 53
45 * **file:** classification/ebif.cpp 54 * **file:** classification/ebif.cpp
46 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md) 55 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md)
47 -* **see:** [Min Li (IBM China Research Lab, China), Nalini Ratha (IBM Watson Research Center, USA), Weihong Qian (IBM China Research Lab, China), Shenghua Bao (IBM China Research Lab, China), Zhong Su (IBM China Research Lab, China)](#min li (ibm china research lab, china), nalini ratha (ibm watson research center, usa), weihong qian (ibm china research lab, china), shenghua bao (ibm china research lab, china), zhong su (ibm china research lab, china))  
48 -* **author:** Josh Klontz 56 +* **author(s):** [Josh Klontz][jklontz]
  57 +* **read:**
  58 +
  59 + 1. *Li, Min, et al.*
  60 + **"Face recognition using early biologically inspired features."**
  61 + Biometrics: Theory, Applications and Systems (BTAS), 2013 IEEE Sixth International Conference on. IEEE, 2013.
  62 +
49 * **properties:** 63 * **properties:**
50 64
51 -Property | Type | Description  
52 ---- | --- | ---  
53 -N | int | The number of scales. Default is 6.  
54 -M | int | The number of orientations between 0 and pi. Default is 9. 65 + Property | Type | Description
  66 + --- | --- | ---
  67 + N | int | The number of scales. Default is 6.
  68 + M | int | The number of orientations between 0 and pi. Default is 9.
55 69
56 --- 70 ---
57 71
58 # ForestInductionTransform 72 # ForestInductionTransform
59 73
60 Wraps OpenCV's random trees framework to induce features 74 Wraps OpenCV's random trees framework to induce features
  75 +
61 76
62 * **file:** classification/forest.cpp 77 * **file:** classification/forest.cpp
63 * **inherits:** [ForestTransform](#foresttransform) 78 * **inherits:** [ForestTransform](#foresttransform)
  79 +* **author(s):** [Scott Klum][sklum]
64 * **see:** [https://lirias.kuleuven.be/bitstream/123456789/316661/1/icdm11-camready.pdf](https://lirias.kuleuven.be/bitstream/123456789/316661/1/icdm11-camready.pdf) 80 * **see:** [https://lirias.kuleuven.be/bitstream/123456789/316661/1/icdm11-camready.pdf](https://lirias.kuleuven.be/bitstream/123456789/316661/1/icdm11-camready.pdf)
65 -* **author:** Scott Klum  
66 * **properties:** 81 * **properties:**
67 82
68 -Property | Type | Description  
69 ---- | --- | ---  
70 -useRegressionValue | bool | SCOTT FILL ME IN. 83 + Property | Type | Description
  84 + --- | --- | ---
  85 + useRegressionValue | bool | SCOTT FILL ME IN.
71 86
72 --- 87 ---
73 88
74 # ForestTransform 89 # ForestTransform
75 90
76 Wraps OpenCV's random trees framework 91 Wraps OpenCV's random trees framework
  92 +
77 93
78 * **file:** classification/forest.cpp 94 * **file:** classification/forest.cpp
79 * **inherits:** [Transform](../cpp_api/transform/transform.md) 95 * **inherits:** [Transform](../cpp_api/transform/transform.md)
  96 +* **author(s):** [Scott Klum][sklum]
80 * **see:** [http://docs.opencv.org/modules/ml/doc/random_trees.html](http://docs.opencv.org/modules/ml/doc/random_trees.html) 97 * **see:** [http://docs.opencv.org/modules/ml/doc/random_trees.html](http://docs.opencv.org/modules/ml/doc/random_trees.html)
81 -* **author:** Scott Klum  
82 * **properties:** 98 * **properties:**
83 99
84 -Property | Type | Description  
85 ---- | --- | ---  
86 -classification | bool | If true the labels are expected to be categorical. Otherwise they are expected to be numerical. Default is true.  
87 -splitPercentage | float | Used to calculate the minimum number of samples per split in a random tree. The minimum number of samples is calculated as the number of samples x splitPercentage. Default is 0.01.  
88 -maxDepth | int | The maximum depth of each decision tree. Default is std::numeric_limits<int>::max() and typically should be set by the user.  
89 -maxTrees | int | The maximum number of trees in the forest. Default is 10.  
90 -forestAccuracy | float | A sufficient accuracy for the forest for training to terminate. Used if termCrit is EPS or Both. Default is 0.1.  
91 -returnConfidence | bool | If both classification and returnConfidence are use a fuzzy class label as the output of the forest. Default is true.  
92 -overwriteMat | bool | If true set dst to be a 1x1 Mat with the forest response as its value. Otherwise append the forest response to metadata using outputVariable as a key. Default is true.  
93 -inputVariable | QString | The metadata key for each templates label. Default is "Label".  
94 -outputVariable | QString | The metadata key for the forest response if overwriteMat is false. Default is "".  
95 -weight | bool | If true and classification is true the random forest will use prior accuracies. Default is false.  
96 -termCrit | enum | Termination criteria for training the random forest. Options are Iter, EPS and Both. Iter terminates when the maximum number of trees is reached. EPS terminates when forestAccuracy is met. Both terminates when either is true. Default is Iter. 100 + Property | Type | Description
  101 + --- | --- | ---
  102 + classification | bool | If true the labels are expected to be categorical. Otherwise they are expected to be numerical. Default is true.
  103 + splitPercentage | float | Used to calculate the minimum number of samples per split in a random tree. The minimum number of samples is calculated as the number of samples x splitPercentage. Default is 0.01.
  104 + maxDepth | int | The maximum depth of each decision tree. Default is std::numeric_limits<int>::max() and typically should be set by the user.
  105 + maxTrees | int | The maximum number of trees in the forest. Default is 10.
  106 + forestAccuracy | float | A sufficient accuracy for the forest for training to terminate. Used if termCrit is EPS or Both. Default is 0.1.
  107 + returnConfidence | bool | If both classification and returnConfidence are use a fuzzy class label as the output of the forest. Default is true.
  108 + overwriteMat | bool | If true set dst to be a 1x1 Mat with the forest response as its value. Otherwise append the forest response to metadata using outputVariable as a key. Default is true.
  109 + inputVariable | QString | The metadata key for each templates label. Default is "Label".
  110 + outputVariable | QString | The metadata key for the forest response if overwriteMat is false. Default is "".
  111 + weight | bool | If true and classification is true the random forest will use prior accuracies. Default is false.
  112 + termCrit | enum | Termination criteria for training the random forest. Options are Iter, EPS and Both. Iter terminates when the maximum number of trees is reached. EPS terminates when forestAccuracy is met. Both terminates when either is true. Default is Iter.
97 113
98 --- 114 ---
99 115
100 # IPC2013FaceRecognitionTransform 116 # IPC2013FaceRecognitionTransform
101 117
102 Intel Perceptual Computing SDK 2013 Face Recognition 118 Intel Perceptual Computing SDK 2013 Face Recognition
  119 +
103 120
104 * **file:** classification/ipc2013.cpp 121 * **file:** classification/ipc2013.cpp
105 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md) 122 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md)
106 -* **author:** Josh Klontz 123 +* **author(s):** [Josh Klontz][jklontz]
107 * **properties:** None 124 * **properties:** None
108 125
109 126
@@ -112,52 +129,68 @@ Intel Perceptual Computing SDK 2013 Face Recognition @@ -112,52 +129,68 @@ Intel Perceptual Computing SDK 2013 Face Recognition
112 # LDATransform 129 # LDATransform
113 130
114 Projects input into learned Linear Discriminant Analysis subspace. 131 Projects input into learned Linear Discriminant Analysis subspace.
  132 +
115 133
116 * **file:** classification/lda.cpp 134 * **file:** classification/lda.cpp
117 * **inherits:** [Transform](../cpp_api/transform/transform.md) 135 * **inherits:** [Transform](../cpp_api/transform/transform.md)
118 -* **authors:** Brendan Klare, Josh Klontz 136 +* **author(s):** [Brendan Klare][bklare], [Josh Klontz][jklontz]
119 * **properties:** 137 * **properties:**
120 138
121 -Property | Type | Description  
122 ---- | --- | ---  
123 -pcaKeep | float | BRENDAN OR JOSH FILL ME IN. Default is 0.98.  
124 -pcaWhiten | bool | BRENDAN OR JOSH FILL ME IN. Default is false.  
125 -directLDA | int | BRENDAN OR JOSH FILL ME IN. Default is 0.  
126 -directDrop | float | BRENDAN OR JOSH FILL ME IN. Default is 0.1.  
127 -inputVariable | QString | BRENDAN OR JOSH FILL ME IN. Default is "Label".  
128 -isBinary | bool | BRENDAN OR JOSH FILL ME IN. Default is false.  
129 -normalize | bool | BRENDAN OR JOSH FILL ME IN. Default is true. 139 + Property | Type | Description
  140 + --- | --- | ---
  141 + pcaKeep | float | BRENDAN OR JOSH FILL ME IN. Default is 0.98.
  142 + pcaWhiten | bool | BRENDAN OR JOSH FILL ME IN. Default is false.
  143 + directLDA | int | BRENDAN OR JOSH FILL ME IN. Default is 0.
  144 + directDrop | float | BRENDAN OR JOSH FILL ME IN. Default is 0.1.
  145 + inputVariable | QString | BRENDAN OR JOSH FILL ME IN. Default is "Label".
  146 + isBinary | bool | BRENDAN OR JOSH FILL ME IN. Default is false.
  147 + normalize | bool | BRENDAN OR JOSH FILL ME IN. Default is true.
  148 +
  149 +---
  150 +
  151 +# Linear
  152 +
  153 +DOCUMENT ME SCOTT
  154 +
  155 +
  156 +* **file:** classification/liblinear.cpp
  157 +* **inherits:** [Transform](../cpp_api/transform/transform.md)
  158 +* **author(s):** [Scott Klum][sklum]
  159 +* **properties:** None
  160 +
130 161
131 --- 162 ---
132 163
133 # MLPTransform 164 # MLPTransform
134 165
135 Wraps OpenCV's multi-layer perceptron framework 166 Wraps OpenCV's multi-layer perceptron framework
  167 +
136 168
137 * **file:** classification/mlp.cpp 169 * **file:** classification/mlp.cpp
138 * **inherits:** [MetaTransform](../cpp_api/metatransform/metatransform.md) 170 * **inherits:** [MetaTransform](../cpp_api/metatransform/metatransform.md)
  171 +* **author(s):** [Scott Klum][sklum]
139 * **see:** [http://docs.opencv.org/modules/ml/doc/neural_networks.html](http://docs.opencv.org/modules/ml/doc/neural_networks.html) 172 * **see:** [http://docs.opencv.org/modules/ml/doc/neural_networks.html](http://docs.opencv.org/modules/ml/doc/neural_networks.html)
140 -* **author:** Scott Klum  
141 * **properties:** 173 * **properties:**
142 174
143 -Property | Type | Description  
144 ---- | --- | ---  
145 -kernel | enum | Type of MLP kernel to use. Options are Identity, Sigmoid, Gaussian. Default is Sigmoid.  
146 -alpha | float | Determines activation function for neural network. See OpenCV documentation for more details. Default is 1.  
147 -beta | float | Determines activation function for neural network. See OpenCV documentation for more details. Default is 1.  
148 -inputVariables | QStringList | Metadata keys for the labels associated with each template. There should be the same number of keys in the list as there are neurons in the final layer. Default is QStringList().  
149 -outputVariables | QStringList | Metadata keys to store the output of the neural network. There should be the same number of keys in the list as there are neurons in the final layer. Default is QStringList().  
150 -neuronsPerLayer | QList<int> | The number of neurons in each layer of the net. Default is QList<int>() << 1 << 1. 175 + Property | Type | Description
  176 + --- | --- | ---
  177 + kernel | enum | Type of MLP kernel to use. Options are Identity, Sigmoid, Gaussian. Default is Sigmoid.
  178 + alpha | float | Determines activation function for neural network. See OpenCV documentation for more details. Default is 1.
  179 + beta | float | Determines activation function for neural network. See OpenCV documentation for more details. Default is 1.
  180 + inputVariables | QStringList | Metadata keys for the labels associated with each template. There should be the same number of keys in the list as there are neurons in the final layer. Default is QStringList().
  181 + outputVariables | QStringList | Metadata keys to store the output of the neural network. There should be the same number of keys in the list as there are neurons in the final layer. Default is QStringList().
  182 + neuronsPerLayer | QList<int> | The number of neurons in each layer of the net. Default is QList<int>() << 1 << 1.
151 183
152 --- 184 ---
153 185
154 # NT4Compare 186 # NT4Compare
155 187
156 Compare templates with Neurotech SDK 4 188 Compare templates with Neurotech SDK 4
  189 +
157 190
158 * **file:** classification/nt4.cpp 191 * **file:** classification/nt4.cpp
159 * **inherits:** [Distance](../cpp_api/distance/distance.md) 192 * **inherits:** [Distance](../cpp_api/distance/distance.md)
160 -* **authors:** Josh Klontz, E. Taborsky 193 +* **author(s):** [Josh Klontz][jklontz], [E. Taborsky][mmtaborsky]
161 * **properties:** None 194 * **properties:** None
162 195
163 196
@@ -166,10 +199,11 @@ Compare templates with Neurotech SDK 4 @@ -166,10 +199,11 @@ Compare templates with Neurotech SDK 4
166 # NT4DetectFace 199 # NT4DetectFace
167 200
168 Neurotech face detection 201 Neurotech face detection
  202 +
169 203
170 * **file:** classification/nt4.cpp 204 * **file:** classification/nt4.cpp
171 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md) 205 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md)
172 -* **authors:** Josh Klontz, E. Taborsky 206 +* **author(s):** [Josh Klontz][jklontz], [E. Taborsky][mmtaborsky]
173 * **properties:** None 207 * **properties:** None
174 208
175 209
@@ -178,10 +212,11 @@ Neurotech face detection @@ -178,10 +212,11 @@ Neurotech face detection
178 # NT4EnrollFace 212 # NT4EnrollFace
179 213
180 Enroll face in Neurotech SDK 4 214 Enroll face in Neurotech SDK 4
  215 +
181 216
182 * **file:** classification/nt4.cpp 217 * **file:** classification/nt4.cpp
183 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md) 218 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md)
184 -* **author:** Josh Klontz 219 +* **author(s):** [Josh Klontz][jklontz]
185 * **properties:** None 220 * **properties:** None
186 221
187 222
@@ -190,10 +225,11 @@ Enroll face in Neurotech SDK 4 @@ -190,10 +225,11 @@ Enroll face in Neurotech SDK 4
190 # NT4EnrollIris 225 # NT4EnrollIris
191 226
192 Enroll iris in Neurotech SDK 4 227 Enroll iris in Neurotech SDK 4
  228 +
193 229
194 * **file:** classification/nt4.cpp 230 * **file:** classification/nt4.cpp
195 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md) 231 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md)
196 -* **author:** E. Taborsky 232 +* **author(s):** [E. Taborsky][mmtaborsky]
197 * **properties:** None 233 * **properties:** None
198 234
199 235
@@ -202,27 +238,29 @@ Enroll iris in Neurotech SDK 4 @@ -202,27 +238,29 @@ Enroll iris in Neurotech SDK 4
202 # PCATransform 238 # PCATransform
203 239
204 Projects input into learned Principal Component Analysis subspace. 240 Projects input into learned Principal Component Analysis subspace.
  241 +
205 242
206 * **file:** classification/lda.cpp 243 * **file:** classification/lda.cpp
207 * **inherits:** [Transform](../cpp_api/transform/transform.md) 244 * **inherits:** [Transform](../cpp_api/transform/transform.md)
208 -* **authors:** Brendan Klare, Josh Klontz 245 +* **author(s):** [Brendan Klare][bklare], [Josh Klontz][jklontz]
209 * **properties:** 246 * **properties:**
210 247
211 -Property | Type | Description  
212 ---- | --- | ---  
213 -keep | float | Options are:<ul><li>keep < 0 - All eigenvalues are retained</li><li>keep == 0 - No PCA is performed and the eigenvectors form an identity matrix</li><li>0 < keep < 1 - Keep is the fraction of the variance to retain</li><li>keep >= 1 - keep is the number of leading eigenvectors to retain</li></ul>Default is 0.95.  
214 -drop | int | BRENDAN OR JOSH FILL ME IN. Default is 0.  
215 -whiten | bool | BRENDAN OR JOSH FILL ME IN. Default is false. 248 + Property | Type | Description
  249 + --- | --- | ---
  250 + keep | float | Options are:<ul><li>keep < 0 - All eigenvalues are retained</li><li>keep == 0 - No PCA is performed and the eigenvectors form an identity matrix</li><li>0 < keep < 1 - Keep is the fraction of the variance to retain</li><li>keep >= 1 - keep is the number of leading eigenvectors to retain</li></ul>Default is 0.95.
  251 + drop | int | BRENDAN OR JOSH FILL ME IN. Default is 0.
  252 + whiten | bool | BRENDAN OR JOSH FILL ME IN. Default is false.
216 253
217 --- 254 ---
218 255
219 # PP4Compare 256 # PP4Compare
220 257
221 Compare faces using PittPatt 4. 258 Compare faces using PittPatt 4.
  259 +
222 260
223 * **file:** classification/pp4.cpp 261 * **file:** classification/pp4.cpp
224 * **inherits:** [Distance](../cpp_api/distance/distance.md) 262 * **inherits:** [Distance](../cpp_api/distance/distance.md)
225 -* **author:** Josh Klontz 263 +* **author(s):** [Josh Klontz][jklontz]
226 * **properties:** None 264 * **properties:** None
227 265
228 266
@@ -231,25 +269,27 @@ Compare faces using PittPatt 4. @@ -231,25 +269,27 @@ Compare faces using PittPatt 4.
231 # PP4EnrollTransform 269 # PP4EnrollTransform
232 270
233 Enroll faces in PittPatt 4 271 Enroll faces in PittPatt 4
  272 +
234 273
235 * **file:** classification/pp4.cpp 274 * **file:** classification/pp4.cpp
236 * **inherits:** [UntrainableMetaTransform](../cpp_api/untrainablemetatransform/untrainablemetatransform.md) 275 * **inherits:** [UntrainableMetaTransform](../cpp_api/untrainablemetatransform/untrainablemetatransform.md)
237 -* **author:** Josh Klontz 276 +* **author(s):** [Josh Klontz][jklontz]
238 * **properties:** 277 * **properties:**
239 278
240 -Property | Type | Description  
241 ---- | --- | ---  
242 -detectOnly | bool | If true, return all detected faces. Otherwise, return only faces that are suitable for recognition. Default is false. 279 + Property | Type | Description
  280 + --- | --- | ---
  281 + detectOnly | bool | If true, return all detected faces. Otherwise, return only faces that are suitable for recognition. Default is false.
243 282
244 --- 283 ---
245 284
246 # PP5CompareDistance 285 # PP5CompareDistance
247 286
248 -Compare templates with PP5 287 +Compare templates with PP5. PP5 distance is known to be asymmetric
  288 +
249 289
250 * **file:** classification/pp5.cpp 290 * **file:** classification/pp5.cpp
251 * **inherits:** [UntrainableDistance](../cpp_api/untrainabledistance/untrainabledistance.md) 291 * **inherits:** [UntrainableDistance](../cpp_api/untrainabledistance/untrainabledistance.md)
252 -* **authors:** Josh Klontz, E. Taborsky 292 +* **author(s):** [Josh Klontz][jklontz], [E. Taborsky][mmtaborsky]
253 * **properties:** None 293 * **properties:** None
254 294
255 295
@@ -258,30 +298,45 @@ Compare templates with PP5 @@ -258,30 +298,45 @@ Compare templates with PP5
258 # PP5EnrollTransform 298 # PP5EnrollTransform
259 299
260 Enroll faces in PP5 300 Enroll faces in PP5
  301 +
261 302
262 * **file:** classification/pp5.cpp 303 * **file:** classification/pp5.cpp
263 * **inherits:** [UntrainableMetaTransform](../cpp_api/untrainablemetatransform/untrainablemetatransform.md) 304 * **inherits:** [UntrainableMetaTransform](../cpp_api/untrainablemetatransform/untrainablemetatransform.md)
264 -* **authors:** Josh Klontz, E. Taborsky 305 +* **author(s):** [Josh Klontz][jklontz], [E. Taborsky][mmtaborsky]
265 * **properties:** 306 * **properties:**
266 307
267 -Property | Type | Description  
268 ---- | --- | ---  
269 -detectOnly | bool | If true, enroll all detected faces. Otherwise, only enroll faces suitable for recognition. Default is false.  
270 -requireLandmarks | bool | If true, require the right eye, left eye, and nose base to be detectable by PP5. If this does not happen FTE is set to true for that template. Default is false.  
271 -adaptiveMinSize | float | The minimum face size as a percentage of total image width. 0.1 corresponds to a minimum face size of 10% the total image width. Default is 0.01.  
272 -minSize | int | The absolute minimum face size to search for. This is not a pixel value. Please see PittPatt documentation for the relationship between minSize and pixel IPD. Default is 4.  
273 -landmarkRange | enum | Range of landmarks to search for. Options are Frontal, Extended, Full, and Comprehensive. Default is Comprehensive.  
274 -searchPruningAggressiveness | int | The amount of aggressiveness involved in search for faces in images. 0 means all scales and locations are searched. 1 means fewer detectors are used in the early stages but all scales are still searched. 2-4 means that the largest faces are found first and then fewer scales are searched. Default is 0. 308 + Property | Type | Description
  309 + --- | --- | ---
  310 + detectOnly | bool | If true, enroll all detected faces. Otherwise, only enroll faces suitable for recognition. Default is false.
  311 + requireLandmarks | bool | If true, require the right eye, left eye, and nose base to be detectable by PP5. If this does not happen FTE is set to true for that template. Default is false.
  312 + adaptiveMinSize | float | The minimum face size as a percentage of total image width. 0.1 corresponds to a minimum face size of 10% the total image width. Default is 0.01.
  313 + minSize | int | The absolute minimum face size to search for. This is not a pixel value. Please see PittPatt documentation for the relationship between minSize and pixel IPD. Default is 4.
  314 + landmarkRange | enum | Range of landmarks to search for. Options are Frontal, Extended, Full, and Comprehensive. Default is Comprehensive.
  315 + searchPruningAggressiveness | int | The amount of aggressiveness involved in search for faces in images. 0 means all scales and locations are searched. 1 means fewer detectors are used in the early stages but all scales are still searched. 2-4 means that the largest faces are found first and then fewer scales are searched. Default is 0.
  316 +
  317 +---
  318 +
  319 +# PP5GalleryTransform
  320 +
  321 +DOCUMENT ME
  322 +
  323 +
  324 +* **file:** classification/pp5.cpp
  325 +* **inherits:** [UntrainableMetaTransform](../cpp_api/untrainablemetatransform/untrainablemetatransform.md)
  326 +* **author(s):** [Unknown][unknown]
  327 +* **properties:** None
  328 +
275 329
276 --- 330 ---
277 331
278 # RowWisePCATransform 332 # RowWisePCATransform
279 333
280 PCA on each row. 334 PCA on each row.
  335 +
281 336
282 * **file:** classification/lda.cpp 337 * **file:** classification/lda.cpp
283 * **inherits:** [PCATransform](#pcatransform) 338 * **inherits:** [PCATransform](#pcatransform)
284 -* **author:** Josh Klontz 339 +* **author(s):** [Josh Klontz][jklontz]
285 * **properties:** None 340 * **properties:** None
286 341
287 342
@@ -290,63 +345,68 @@ PCA on each row. @@ -290,63 +345,68 @@ PCA on each row.
290 # SVMTransform 345 # SVMTransform
291 346
292 Wraps OpenCV's SVM framework. 347 Wraps OpenCV's SVM framework.
  348 +
293 349
294 * **file:** classification/svm.cpp 350 * **file:** classification/svm.cpp
295 * **inherits:** [Transform](../cpp_api/transform/transform.md) 351 * **inherits:** [Transform](../cpp_api/transform/transform.md)
296 -* **see:** 352 +* **author(s):** [Josh Klontz][jklontz]
  353 +* **see:** [http://docs.opencv.org/modules/ml/doc/support_vector_machines.html](http://docs.opencv.org/modules/ml/doc/support_vector_machines.html)
  354 +* **read:**
297 355
298 - * [http://docs.opencv.org/modules/ml/doc/support_vector_machines.html](http://docs.opencv.org/modules/ml/doc/support_vector_machines.html)  
299 - * [C. Burges. "A tutorial on support vector machines for pattern recognition", Knowledge Discovery and Data Mining 2(2), 1998.](C. Burges. "A tutorial on support vector machines for pattern recognition", Knowledge Discovery and Data Mining 2(2), 1998.) 356 + 1. *C. Burges.*
  357 + **"A tutorial on support vector machines for pattern recognition"**
  358 + Knowledge Discovery and Data Mining 2(2), 1998.
300 359
301 -* **author:** Josh Klontz  
302 * **properties:** 360 * **properties:**
303 361
304 -Property | Type | Description  
305 ---- | --- | ---  
306 -Kernel | enum | The type of SVM kernel to use. Options are Linear, Poly, RBF, Sigmoid. Default is Linear.  
307 -Type | enum | The type of SVM to do. Options are C_SVC, NU_SVC, ONE_CLASS, EPS_SVR, NU_SVR. Default is C_SVC.  
308 -C | float | Parameter C of an SVM optimization problem. Needed when Type is C_SVC, EPS_SVR or NU_SVR. Default is -1.  
309 -gamma | float | Parameter gamma of a kernel function. Needed when Kernel is Poly, RBF, or Sigmoid. Default is -1.  
310 -inputVariable | QString | Metadata variable storing the label for each template. Default is "Label".  
311 -outputVariable | QString | Metadata variable to store the prediction value of the trained SVM. If type is EPS_SVR or NU_SVR the stored value is the output of the SVM. Otherwise the value is the output of the SVM mapped through the reverse lookup table. Default is "".  
312 -returnDFVal | bool | If true, dst is set to a 1x1 Mat with value equal to the predicted output of the SVM. Default is false.  
313 -termCriteria | int | The maximum number of training iterations. Default is 1000.  
314 -folds | int | Cross validation parameter used for autoselecting other parameters. Default is 5.  
315 -balanceFolds | bool | If true and the problem is 2-class classification then more balanced cross validation subsets are created. Default is false. 362 + Property | Type | Description
  363 + --- | --- | ---
  364 + Kernel | enum | The type of SVM kernel to use. Options are Linear, Poly, RBF, Sigmoid. Default is Linear.
  365 + Type | enum | The type of SVM to do. Options are C_SVC, NU_SVC, ONE_CLASS, EPS_SVR, NU_SVR. Default is C_SVC.
  366 + C | float | Parameter C of an SVM optimization problem. Needed when Type is C_SVC, EPS_SVR or NU_SVR. Default is -1.
  367 + gamma | float | Parameter gamma of a kernel function. Needed when Kernel is Poly, RBF, or Sigmoid. Default is -1.
  368 + inputVariable | QString | Metadata variable storing the label for each template. Default is "Label".
  369 + outputVariable | QString | Metadata variable to store the prediction value of the trained SVM. If type is EPS_SVR or NU_SVR the stored value is the output of the SVM. Otherwise the value is the output of the SVM mapped through the reverse lookup table. Default is "".
  370 + returnDFVal | bool | If true, dst is set to a 1x1 Mat with value equal to the predicted output of the SVM. Default is false.
  371 + termCriteria | int | The maximum number of training iterations. Default is 1000.
  372 + folds | int | Cross validation parameter used for autoselecting other parameters. Default is 5.
  373 + balanceFolds | bool | If true and the problem is 2-class classification then more balanced cross validation subsets are created. Default is false.
316 374
317 --- 375 ---
318 376
319 # SparseLDATransform 377 # SparseLDATransform
320 378
321 Projects input into learned Linear Discriminant Analysis subspace learned on a sparse subset of features with the highest weight in the original LDA algorithm. 379 Projects input into learned Linear Discriminant Analysis subspace learned on a sparse subset of features with the highest weight in the original LDA algorithm.
  380 +
322 381
323 * **file:** classification/lda.cpp 382 * **file:** classification/lda.cpp
324 * **inherits:** [Transform](../cpp_api/transform/transform.md) 383 * **inherits:** [Transform](../cpp_api/transform/transform.md)
325 -* **author:** Brendan Klare 384 +* **author(s):** [Brendan Klare][bklare]
326 * **properties:** 385 * **properties:**
327 386
328 -Property | Type | Description  
329 ---- | --- | ---  
330 -varThreshold | float | BRENDAN FILL ME IN. Default is 1.5.  
331 -pcaKeep | float | BRENDAN FILL ME IN. Default is 0.98.  
332 -normalize | bool | BRENDAN FILL ME IN. Default is true. 387 + Property | Type | Description
  388 + --- | --- | ---
  389 + varThreshold | float | BRENDAN FILL ME IN. Default is 1.5.
  390 + pcaKeep | float | BRENDAN FILL ME IN. Default is 0.98.
  391 + normalize | bool | BRENDAN FILL ME IN. Default is true.
333 392
334 --- 393 ---
335 394
336 # TurkClassifierTransform 395 # TurkClassifierTransform
337 396
338 Convenience class for training turk attribute regressors 397 Convenience class for training turk attribute regressors
  398 +
339 399
340 * **file:** classification/turk.cpp 400 * **file:** classification/turk.cpp
341 * **inherits:** [Transform](../cpp_api/transform/transform.md) 401 * **inherits:** [Transform](../cpp_api/transform/transform.md)
342 -* **author:** Josh Klontz 402 +* **author(s):** [Josh Klontz][jklontz]
343 * **properties:** 403 * **properties:**
344 404
345 -Property | Type | Description  
346 ---- | --- | ---  
347 -key | QString | Metadata key to pass input values to SVM. Actual lookup key is "key_value" where value is each value in the parameter values. Default is "".  
348 -values | QStringList | Metadata keys to pass input values to SVM. Actual lookup key is "key_value" where key is the parameter key and value is each value in this list. Each passed value trains a new SVM with the input values found in metadata<ul><li>"key_value"</li></ul>. Default is "".  
349 -isMeta | bool | If true, "Average+SaveMat(predicted_key_value)" is appended to each classifier. If false, nothing is appended. Default is false. 405 + Property | Type | Description
  406 + --- | --- | ---
  407 + key | QString | Metadata key to pass input values to SVM. Actual lookup key is "key_value" where value is each value in the parameter values. Default is "".
  408 + values | QStringList | Metadata keys to pass input values to SVM. Actual lookup key is "key_value" where key is the parameter key and value is each value in this list. Each passed value trains a new SVM with the input values found in metadata<ul><li>"key_value"</li></ul>. Default is "".
  409 + isMeta | bool | If true, "Average+SaveMat(predicted_key_value)" is appended to each classifier. If false, nothing is appended. Default is false.
350 410
351 --- 411 ---
352 412
docs/docs/api_docs/plugins/cluster.md
1 # CollectNNTransform 1 # CollectNNTransform
2 2
3 Collect nearest neighbors and append them to metadata. 3 Collect nearest neighbors and append them to metadata.
  4 +
4 5
5 * **file:** cluster/collectnn.cpp 6 * **file:** cluster/collectnn.cpp
6 * **inherits:** [UntrainableMetaTransform](../cpp_api/untrainablemetatransform/untrainablemetatransform.md) 7 * **inherits:** [UntrainableMetaTransform](../cpp_api/untrainablemetatransform/untrainablemetatransform.md)
7 -* **author:** Charles Otto 8 +* **author(s):** [Charles Otto][caotto]
8 * **properties:** 9 * **properties:**
9 10
10 -Property | Type | Description  
11 ---- | --- | ---  
12 -keep | int | The maximum number of nearest neighbors to keep. Default is 20. 11 + Property | Type | Description
  12 + --- | --- | ---
  13 + keep | int | The maximum number of nearest neighbors to keep. Default is 20.
13 14
14 --- 15 ---
15 16
16 # KMeansTransform 17 # KMeansTransform
17 18
18 Wraps OpenCV kmeans and flann. 19 Wraps OpenCV kmeans and flann.
  20 +
19 21
20 * **file:** cluster/kmeans.cpp 22 * **file:** cluster/kmeans.cpp
21 * **inherits:** [Transform](../cpp_api/transform/transform.md) 23 * **inherits:** [Transform](../cpp_api/transform/transform.md)
  24 +* **author(s):** [Josh Klontz][jklontz]
22 * **see:** [http://docs.opencv.org/modules/flann/doc/flann_fast_approximate_nearest_neighbor_search.html](http://docs.opencv.org/modules/flann/doc/flann_fast_approximate_nearest_neighbor_search.html) 25 * **see:** [http://docs.opencv.org/modules/flann/doc/flann_fast_approximate_nearest_neighbor_search.html](http://docs.opencv.org/modules/flann/doc/flann_fast_approximate_nearest_neighbor_search.html)
23 -* **author:** Josh Klontz  
24 * **properties:** 26 * **properties:**
25 27
26 -Property | Type | Description  
27 ---- | --- | ---  
28 -kTrain | int | The number of random centroids to make at train time. Default is 256.  
29 -kSearch | int | The number of nearest neighbors to search for at runtime. Default is 1. 28 + Property | Type | Description
  29 + --- | --- | ---
  30 + kTrain | int | The number of random centroids to make at train time. Default is 256.
  31 + kSearch | int | The number of nearest neighbors to search for at runtime. Default is 1.
30 32
31 --- 33 ---
32 34
33 # KNNTransform 35 # KNNTransform
34 36
35 K nearest neighbors classifier. 37 K nearest neighbors classifier.
  38 +
36 39
37 * **file:** cluster/knn.cpp 40 * **file:** cluster/knn.cpp
38 * **inherits:** [Transform](../cpp_api/transform/transform.md) 41 * **inherits:** [Transform](../cpp_api/transform/transform.md)
39 -* **author:** Josh Klontz 42 +* **author(s):** [Josh Klontz][jklontz]
40 * **properties:** None 43 * **properties:** None
41 44
42 45
@@ -45,32 +48,34 @@ K nearest neighbors classifier. @@ -45,32 +48,34 @@ K nearest neighbors classifier.
45 # LogNNTransform 48 # LogNNTransform
46 49
47 Log nearest neighbors to specified file. 50 Log nearest neighbors to specified file.
  51 +
48 52
49 * **file:** cluster/lognn.cpp 53 * **file:** cluster/lognn.cpp
50 * **inherits:** [TimeVaryingTransform](../cpp_api/timevaryingtransform/timevaryingtransform.md) 54 * **inherits:** [TimeVaryingTransform](../cpp_api/timevaryingtransform/timevaryingtransform.md)
51 -* **author:** Charles Otto 55 +* **author(s):** [Charles Otto][caotto]
52 * **properties:** 56 * **properties:**
53 57
54 -Property | Type | Description  
55 ---- | --- | ---  
56 -fileName | QString | The name of the log file. An empty fileName won't be written to. Default is "". 58 + Property | Type | Description
  59 + --- | --- | ---
  60 + fileName | QString | The name of the log file. An empty fileName won't be written to. Default is "".
57 61
58 --- 62 ---
59 63
60 # RandomCentroidsTransform 64 # RandomCentroidsTransform
61 65
62 Chooses k random points to be centroids. 66 Chooses k random points to be centroids.
  67 +
63 68
64 * **file:** cluster/randomcentroids.cpp 69 * **file:** cluster/randomcentroids.cpp
65 * **inherits:** [Transform](../cpp_api/transform/transform.md) 70 * **inherits:** [Transform](../cpp_api/transform/transform.md)
  71 +* **author(s):** [Austin Blanton][imaus10]
66 * **see:** [http://docs.opencv.org/modules/flann/doc/flann_fast_approximate_nearest_neighbor_search.html](http://docs.opencv.org/modules/flann/doc/flann_fast_approximate_nearest_neighbor_search.html) 72 * **see:** [http://docs.opencv.org/modules/flann/doc/flann_fast_approximate_nearest_neighbor_search.html](http://docs.opencv.org/modules/flann/doc/flann_fast_approximate_nearest_neighbor_search.html)
67 -* **author:** Austin Blanton  
68 * **properties:** 73 * **properties:**
69 74
70 -Property | Type | Description  
71 ---- | --- | ---  
72 -kTrain | int | The number of random centroids to make at train time. Default is 256.  
73 -kSearch | int | The number of nearest neighbors to search for at runtime. Default is 1. 75 + Property | Type | Description
  76 + --- | --- | ---
  77 + kTrain | int | The number of random centroids to make at train time. Default is 256.
  78 + kSearch | int | The number of nearest neighbors to search for at runtime. Default is 1.
74 79
75 --- 80 ---
76 81
docs/docs/api_docs/plugins/core.md
1 # CacheTransform 1 # CacheTransform
2 2
3 -Caches br::Transform::project() results. 3 +Caches [Transform](../cpp_api/transform/transform.md)::project() results.
  4 +
4 5
5 * **file:** core/cache.cpp 6 * **file:** core/cache.cpp
6 * **inherits:** [MetaTransform](../cpp_api/metatransform/metatransform.md) 7 * **inherits:** [MetaTransform](../cpp_api/metatransform/metatransform.md)
7 -* **author:** Josh Klontz 8 +* **author(s):** [Josh Klontz][jklontz]
8 * **properties:** None 9 * **properties:** None
9 10
10 11
@@ -13,10 +14,11 @@ Caches br::Transform::project() results. @@ -13,10 +14,11 @@ Caches br::Transform::project() results.
13 # CollectOutputTransform 14 # CollectOutputTransform
14 15
15 DOCUMENT ME CHARLES 16 DOCUMENT ME CHARLES
  17 +
16 18
17 * **file:** core/stream.cpp 19 * **file:** core/stream.cpp
18 * **inherits:** [TimeVaryingTransform](../cpp_api/timevaryingtransform/timevaryingtransform.md) 20 * **inherits:** [TimeVaryingTransform](../cpp_api/timevaryingtransform/timevaryingtransform.md)
19 -* **author:** Charles Otto 21 +* **author(s):** [Charles Otto][caotto]
20 * **properties:** None 22 * **properties:** None
21 23
22 24
@@ -26,9 +28,12 @@ DOCUMENT ME CHARLES @@ -26,9 +28,12 @@ DOCUMENT ME CHARLES
26 28
27 It's like the opposite of ExpandTransform, but not really 29 It's like the opposite of ExpandTransform, but not really
28 30
  31 +Given a [TemplateList](../cpp_api/templatelist/templatelist.md) as input, concatenate them into a single [Template](../cpp_api/template/template.md)
  32 +
  33 +
29 * **file:** core/contract.cpp 34 * **file:** core/contract.cpp
30 * **inherits:** [UntrainableMetaTransform](../cpp_api/untrainablemetatransform/untrainablemetatransform.md) 35 * **inherits:** [UntrainableMetaTransform](../cpp_api/untrainablemetatransform/untrainablemetatransform.md)
31 -* **author:** Charles Otto 36 +* **author(s):** [Charles Otto][caotto]
32 * **properties:** None 37 * **properties:** None
33 38
34 39
@@ -36,11 +41,15 @@ It&#39;s like the opposite of ExpandTransform, but not really @@ -36,11 +41,15 @@ It&#39;s like the opposite of ExpandTransform, but not really
36 41
37 # CrossValidateTransform 42 # CrossValidateTransform
38 43
39 -Cross validate a trainable transform. 44 +Cross validate a trainable [Transform](../cpp_api/transform/transform.md).
  45 +
  46 +To use an extended [Gallery](../cpp_api/gallery/gallery.md), add an allPartitions="true" flag to the gallery sigset for those images that should be compared
  47 +against for all testing partitions.
  48 +
40 49
41 * **file:** core/crossvalidate.cpp 50 * **file:** core/crossvalidate.cpp
42 * **inherits:** [MetaTransform](../cpp_api/metatransform/metatransform.md) 51 * **inherits:** [MetaTransform](../cpp_api/metatransform/metatransform.md)
43 -* **authors:** Josh Klontz, Scott Klum 52 +* **author(s):** [Josh Klontz][jklontz], [Scott Klum][sklum]
44 * **properties:** None 53 * **properties:** None
45 54
46 55
@@ -49,10 +58,24 @@ Cross validate a trainable transform. @@ -49,10 +58,24 @@ Cross validate a trainable transform.
49 # DirectStreamTransform 58 # DirectStreamTransform
50 59
51 DOCUMENT ME CHARLES 60 DOCUMENT ME CHARLES
  61 +
52 62
53 * **file:** core/stream.cpp 63 * **file:** core/stream.cpp
54 -* **inherits:** [CompositeTransform](#compositetransform)  
55 -* **author:** Charles Otto 64 +* **inherits:** [CompositeTransform](../cpp_api/compositetransform/compositetransform.md)
  65 +* **author(s):** [Charles Otto][caotto]
  66 +* **properties:** None
  67 +
  68 +
  69 +---
  70 +
  71 +# DiscardTemplatesTransform
  72 +
  73 +DOCUMENT ME
  74 +
  75 +
  76 +* **file:** core/discardtemplates.cpp
  77 +* **inherits:** [UntrainableMetaTransform](../cpp_api/untrainablemetatransform/untrainablemetatransform.md)
  78 +* **author(s):** [Unknown][unknown]
56 * **properties:** None 79 * **properties:** None
57 80
58 81
@@ -60,12 +83,25 @@ DOCUMENT ME CHARLES @@ -60,12 +83,25 @@ DOCUMENT ME CHARLES
60 83
61 # DiscardTransform 84 # DiscardTransform
62 85
63 -Removes all template's matrices. 86 +Removes all matrices from a [Template](../cpp_api/template/template.md).
  87 +
64 88
65 * **file:** core/discard.cpp 89 * **file:** core/discard.cpp
66 * **inherits:** [UntrainableMetaTransform](../cpp_api/untrainablemetatransform/untrainablemetatransform.md) 90 * **inherits:** [UntrainableMetaTransform](../cpp_api/untrainablemetatransform/untrainablemetatransform.md)
67 -* **see:** [IdentityTransform FirstTransform RestTransform RemoveTransform](#identitytransform firsttransform resttransform removetransform)  
68 -* **author:** Josh Klontz 91 +* **author(s):** [Josh Klontz][jklontz]
  92 +* **properties:** None
  93 +
  94 +
  95 +---
  96 +
  97 +# DistributeTemplateTransform
  98 +
  99 +DOCUMENT ME
  100 +
  101 +
  102 +* **file:** core/distributetemplate.cpp
  103 +* **inherits:** [MetaTransform](../cpp_api/metatransform/metatransform.md)
  104 +* **author(s):** [Unknown][unknown]
69 * **properties:** None 105 * **properties:** None
70 106
71 107
@@ -74,10 +110,24 @@ Removes all template&#39;s matrices. @@ -74,10 +110,24 @@ Removes all template&#39;s matrices.
74 # DownsampleTrainingTransform 110 # DownsampleTrainingTransform
75 111
76 DOCUMENT ME JOSH 112 DOCUMENT ME JOSH
  113 +
77 114
78 * **file:** core/downsampletraining.cpp 115 * **file:** core/downsampletraining.cpp
79 * **inherits:** [Transform](../cpp_api/transform/transform.md) 116 * **inherits:** [Transform](../cpp_api/transform/transform.md)
80 -* **author:** Josh Klontz 117 +* **author(s):** [Josh Klontz][jklontz]
  118 +* **properties:** None
  119 +
  120 +
  121 +---
  122 +
  123 +# EventTransform
  124 +
  125 +DOCUMENT ME
  126 +
  127 +
  128 +* **file:** core/event.cpp
  129 +* **inherits:** [UntrainableMetaTransform](../cpp_api/untrainablemetatransform/untrainablemetatransform.md)
  130 +* **author(s):** [Unknown][unknown]
81 * **properties:** None 131 * **properties:** None
82 132
83 133
@@ -85,12 +135,12 @@ DOCUMENT ME JOSH @@ -85,12 +135,12 @@ DOCUMENT ME JOSH
85 135
86 # ExpandTransform 136 # ExpandTransform
87 137
88 -Performs an expansion step on input templatelists 138 +Performs an expansion step on an input [TemplateList](../cpp_api/templatelist/templatelist.md). Each matrix in each input [Template](../cpp_api/template/template.md) is expanded into its own [Template](../cpp_api/template/template.md).
  139 +
89 140
90 * **file:** core/expand.cpp 141 * **file:** core/expand.cpp
91 * **inherits:** [UntrainableMetaTransform](../cpp_api/untrainablemetatransform/untrainablemetatransform.md) 142 * **inherits:** [UntrainableMetaTransform](../cpp_api/untrainablemetatransform/untrainablemetatransform.md)
92 -* **see:** [PipeTransform](#pipetransform)  
93 -* **author:** Josh Klontz 143 +* **author(s):** [Josh Klontz][jklontz]
94 * **properties:** None 144 * **properties:** None
95 145
96 146
@@ -98,11 +148,12 @@ Performs an expansion step on input templatelists @@ -98,11 +148,12 @@ Performs an expansion step on input templatelists
98 148
99 # FTETransform 149 # FTETransform
100 150
101 -Flags images that failed to enroll based on the specified transform. 151 +Flags images that failed to enroll based on the specified [Transform](../cpp_api/transform/transform.md).
  152 +
102 153
103 * **file:** core/fte.cpp 154 * **file:** core/fte.cpp
104 * **inherits:** [Transform](../cpp_api/transform/transform.md) 155 * **inherits:** [Transform](../cpp_api/transform/transform.md)
105 -* **author:** Josh Klontz 156 +* **author(s):** [Josh Klontz][jklontz]
106 * **properties:** None 157 * **properties:** None
107 158
108 159
@@ -110,12 +161,12 @@ Flags images that failed to enroll based on the specified transform. @@ -110,12 +161,12 @@ Flags images that failed to enroll based on the specified transform.
110 161
111 # FirstTransform 162 # FirstTransform
112 163
113 -Removes all but the first matrix from the template. 164 +Removes all but the first matrix from the [Template](../cpp_api/template/template.md).
  165 +
114 166
115 * **file:** core/first.cpp 167 * **file:** core/first.cpp
116 * **inherits:** [UntrainableMetaTransform](../cpp_api/untrainablemetatransform/untrainablemetatransform.md) 168 * **inherits:** [UntrainableMetaTransform](../cpp_api/untrainablemetatransform/untrainablemetatransform.md)
117 -* **see:** [IdentityTransform DiscardTransform RestTransform RemoveTransform](#identitytransform discardtransform resttransform removetransform)  
118 -* **author:** Josh Klontz 169 +* **author(s):** [Josh Klontz][jklontz]
119 * **properties:** None 170 * **properties:** None
120 171
121 172
@@ -125,10 +176,12 @@ Removes all but the first matrix from the template. @@ -125,10 +176,12 @@ Removes all but the first matrix from the template.
125 176
126 Transforms in parallel. 177 Transforms in parallel.
127 178
  179 +The source [Template](../cpp_api/template/template.md) is seperately given to each transform and the results are appended together.
  180 +
  181 +
128 * **file:** core/fork.cpp 182 * **file:** core/fork.cpp
129 -* **inherits:** [CompositeTransform](#compositetransform)  
130 -* **see:** [PipeTransform](#pipetransform)  
131 -* **author:** Josh Klontz 183 +* **inherits:** [CompositeTransform](../cpp_api/compositetransform/compositetransform.md)
  184 +* **author(s):** [Josh Klontz][jklontz]
132 * **properties:** None 185 * **properties:** None
133 186
134 187
@@ -136,11 +189,13 @@ Transforms in parallel. @@ -136,11 +189,13 @@ Transforms in parallel.
136 189
137 # GalleryCompareTransform 190 # GalleryCompareTransform
138 191
139 -Compare each template to a fixed gallery (with name = galleryName), using the specified distance. 192 +Compare each [Template](../cpp_api/template/template.md) to a fixed [Gallery](../cpp_api/gallery/gallery.md) (with name = galleryName), using the specified distance.
  193 +dst will contain a 1 by n vector of scores.
  194 +
140 195
141 * **file:** core/gallerycompare.cpp 196 * **file:** core/gallerycompare.cpp
142 * **inherits:** [Transform](../cpp_api/transform/transform.md) 197 * **inherits:** [Transform](../cpp_api/transform/transform.md)
143 -* **author:** Charles Otto 198 +* **author(s):** [Charles Otto][caotto]
144 * **properties:** None 199 * **properties:** None
145 200
146 201
@@ -148,12 +203,12 @@ Compare each template to a fixed gallery (with name = galleryName), using the sp @@ -148,12 +203,12 @@ Compare each template to a fixed gallery (with name = galleryName), using the sp
148 203
149 # IdentityTransform 204 # IdentityTransform
150 205
151 -A no-op transform. 206 +A no-op [Transform](../cpp_api/transform/transform.md).
  207 +
152 208
153 * **file:** core/identity.cpp 209 * **file:** core/identity.cpp
154 * **inherits:** [UntrainableMetaTransform](../cpp_api/untrainablemetatransform/untrainablemetatransform.md) 210 * **inherits:** [UntrainableMetaTransform](../cpp_api/untrainablemetatransform/untrainablemetatransform.md)
155 -* **see:** [DiscardTransform FirstTransform RestTransform RemoveTransform](#discardtransform firsttransform resttransform removetransform)  
156 -* **author:** Josh Klontz 211 +* **author(s):** [Josh Klontz][jklontz]
157 * **properties:** None 212 * **properties:** None
158 213
159 214
@@ -161,11 +216,27 @@ A no-op transform. @@ -161,11 +216,27 @@ A no-op transform.
161 216
162 # IndependentTransform 217 # IndependentTransform
163 218
164 -Clones the transform so that it can be applied independently. 219 +Clones the [Transform](../cpp_api/transform/transform.md) so that it can be applied independently.
  220 +
  221 +Independent [Transform](../cpp_api/transform/transform.md)s expect single-matrix [Template](../cpp_api/template/template.md).
  222 +
165 223
166 * **file:** core/independent.cpp 224 * **file:** core/independent.cpp
167 * **inherits:** [MetaTransform](../cpp_api/metatransform/metatransform.md) 225 * **inherits:** [MetaTransform](../cpp_api/metatransform/metatransform.md)
168 -* **author:** Josh Klontz 226 +* **author(s):** [Josh Klontz][jklontz]
  227 +* **properties:** None
  228 +
  229 +
  230 +---
  231 +
  232 +# JNITransform
  233 +
  234 +Execute Java code from OpenBR using the JNI
  235 +
  236 +
  237 +* **file:** core/jni.cpp
  238 +* **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md)
  239 +* **author(s):** [Jordan Cheney][jcheney]
169 * **properties:** None 240 * **properties:** None
170 241
171 242
@@ -174,10 +245,12 @@ Clones the transform so that it can be applied independently. @@ -174,10 +245,12 @@ Clones the transform so that it can be applied independently.
174 # LikelyTransform 245 # LikelyTransform
175 246
176 Generic interface to Likely JIT compiler 247 Generic interface to Likely JIT compiler
  248 +
177 249
178 * **file:** core/likely.cpp 250 * **file:** core/likely.cpp
179 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md) 251 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md)
180 -* **author:** Josh Klontz 252 +* **author(s):** [Josh Klontz][jklontz]
  253 +* **see:** [www.liblikely.org](www.liblikely.org)
181 * **properties:** None 254 * **properties:** None
182 255
183 256
@@ -185,11 +258,12 @@ Generic interface to Likely JIT compiler @@ -185,11 +258,12 @@ Generic interface to Likely JIT compiler
185 258
186 # LoadStoreTransform 259 # LoadStoreTransform
187 260
188 -Caches transform training. 261 +Caches [Transform](../cpp_api/transform/transform.md) training.
  262 +
189 263
190 * **file:** core/loadstore.cpp 264 * **file:** core/loadstore.cpp
191 * **inherits:** [MetaTransform](../cpp_api/metatransform/metatransform.md) 265 * **inherits:** [MetaTransform](../cpp_api/metatransform/metatransform.md)
192 -* **author:** Josh Klontz 266 +* **author(s):** [Josh Klontz][jklontz]
193 * **properties:** None 267 * **properties:** None
194 268
195 269
@@ -199,14 +273,12 @@ Caches transform training. @@ -199,14 +273,12 @@ Caches transform training.
199 273
200 Transforms in series. 274 Transforms in series.
201 275
202 -* **file:** core/pipe.cpp  
203 -* **inherits:** [CompositeTransform](#compositetransform)  
204 -* **see:**  
205 -  
206 - * [ExpandTransform](ExpandTransform)  
207 - * [ForkTransform](ForkTransform) 276 +The source [Template](../cpp_api/template/template.md) is given to the first transform and the resulting [Template](../cpp_api/template/template.md) is passed to the next transform, etc.
  277 +
208 278
209 -* **author:** Josh Klontz 279 +* **file:** core/pipe.cpp
  280 +* **inherits:** [CompositeTransform](../cpp_api/compositetransform/compositetransform.md)
  281 +* **author(s):** [Josh Klontz][jklontz]
210 * **properties:** None 282 * **properties:** None
211 283
212 284
@@ -215,10 +287,11 @@ Transforms in series. @@ -215,10 +287,11 @@ Transforms in series.
215 # ProcessWrapperTransform 287 # ProcessWrapperTransform
216 288
217 Interface to a separate process 289 Interface to a separate process
  290 +
218 291
219 * **file:** core/processwrapper.cpp 292 * **file:** core/processwrapper.cpp
220 -* **inherits:** [WrapperTransform](#wrappertransform)  
221 -* **author:** Charles Otto 293 +* **inherits:** [WrapperTransform](../cpp_api/wrappertransform/wrappertransform.md)
  294 +* **author(s):** [Charles Otto][caotto]
222 * **properties:** None 295 * **properties:** None
223 296
224 297
@@ -227,10 +300,43 @@ Interface to a separate process @@ -227,10 +300,43 @@ Interface to a separate process
227 # ProcrustesAlignTransform 300 # ProcrustesAlignTransform
228 301
229 Improved procrustes alignment of points, to include a post processing scaling of points 302 Improved procrustes alignment of points, to include a post processing scaling of points
  303 +to faciliate subsequent texture mapping.
  304 +
230 305
231 * **file:** core/align.cpp 306 * **file:** core/align.cpp
232 * **inherits:** [Transform](../cpp_api/transform/transform.md) 307 * **inherits:** [Transform](../cpp_api/transform/transform.md)
233 -* **author:** Brendan Klare 308 +* **author(s):** [Brendan Klare][bklare]
  309 +* **properties:**
  310 +
  311 + Property | Type | Description
  312 + --- | --- | ---
  313 + width | float | Width of output coordinate space (before padding)
  314 + padding | float | Amount of padding around the coordinate space
  315 + useFirst | bool | Whether or not to use the first instance as the reference object
  316 +
  317 +---
  318 +
  319 +# ProgressCounterTransform
  320 +
  321 +DOCUMENT ME
  322 +
  323 +
  324 +* **file:** core/progresscounter.cpp
  325 +* **inherits:** [TimeVaryingTransform](../cpp_api/timevaryingtransform/timevaryingtransform.md)
  326 +* **author(s):** [Unknown][unknown]
  327 +* **properties:** None
  328 +
  329 +
  330 +---
  331 +
  332 +# RemoveTransform
  333 +
  334 +Removes the matrix from the [Template](../cpp_api/template/template.md) at the specified index.
  335 +
  336 +
  337 +* **file:** core/remove.cpp
  338 +* **inherits:** [UntrainableMetaTransform](../cpp_api/untrainablemetatransform/untrainablemetatransform.md)
  339 +* **author(s):** [Josh Klontz][jklontz]
234 * **properties:** None 340 * **properties:** None
235 341
236 342
@@ -238,12 +344,12 @@ Improved procrustes alignment of points, to include a post processing scaling of @@ -238,12 +344,12 @@ Improved procrustes alignment of points, to include a post processing scaling of
238 344
239 # RestTransform 345 # RestTransform
240 346
241 -Removes the first matrix from the template. 347 +Removes the first matrix from the [Template](../cpp_api/template/template.md).
  348 +
242 349
243 * **file:** core/rest.cpp 350 * **file:** core/rest.cpp
244 * **inherits:** [UntrainableMetaTransform](../cpp_api/untrainablemetatransform/untrainablemetatransform.md) 351 * **inherits:** [UntrainableMetaTransform](../cpp_api/untrainablemetatransform/untrainablemetatransform.md)
245 -* **see:** [IdentityTransform DiscardTransform FirstTransform RemoveTransform](#identitytransform discardtransform firsttransform removetransform)  
246 -* **author:** Josh Klontz 352 +* **author(s):** [Josh Klontz][jklontz]
247 * **properties:** None 353 * **properties:** None
248 354
249 355
@@ -251,11 +357,13 @@ Removes the first matrix from the template. @@ -251,11 +357,13 @@ Removes the first matrix from the template.
251 357
252 # SchrodingerTransform 358 # SchrodingerTransform
253 359
254 -Generates two templates, one of which is passed through a transform and the other 360 +Generates two [Template](../cpp_api/template/template.md), one of which is passed through a [Transform](../cpp_api/transform/transform.md) and the other
  361 +is not. No cats were harmed in the making of this [Transform](../cpp_api/transform/transform.md).
  362 +
255 363
256 * **file:** core/schrodinger.cpp 364 * **file:** core/schrodinger.cpp
257 * **inherits:** [MetaTransform](../cpp_api/metatransform/metatransform.md) 365 * **inherits:** [MetaTransform](../cpp_api/metatransform/metatransform.md)
258 -* **author:** Scott Klum 366 +* **author(s):** [Scott Klum][sklum]
259 * **properties:** None 367 * **properties:** None
260 368
261 369
@@ -263,11 +371,12 @@ Generates two templates, one of which is passed through a transform and the othe @@ -263,11 +371,12 @@ Generates two templates, one of which is passed through a transform and the othe
263 371
264 # SingletonTransform 372 # SingletonTransform
265 373
266 -A globally shared transform. 374 +A globally shared [Transform](../cpp_api/transform/transform.md).
  375 +
267 376
268 * **file:** core/singleton.cpp 377 * **file:** core/singleton.cpp
269 * **inherits:** [MetaTransform](../cpp_api/metatransform/metatransform.md) 378 * **inherits:** [MetaTransform](../cpp_api/metatransform/metatransform.md)
270 -* **author:** Josh Klontz 379 +* **author(s):** [Josh Klontz][jklontz]
271 * **properties:** None 380 * **properties:** None
272 381
273 382
@@ -276,10 +385,11 @@ A globally shared transform. @@ -276,10 +385,11 @@ A globally shared transform.
276 # StreamTransform 385 # StreamTransform
277 386
278 DOCUMENT ME CHARLES 387 DOCUMENT ME CHARLES
  388 +
279 389
280 * **file:** core/stream.cpp 390 * **file:** core/stream.cpp
281 -* **inherits:** [WrapperTransform](#wrappertransform)  
282 -* **author:** Charles Otto 391 +* **inherits:** [WrapperTransform](../cpp_api/wrappertransform/wrappertransform.md)
  392 +* **author(s):** [Charles Otto][caotto]
283 * **properties:** None 393 * **properties:** None
284 394
285 395
@@ -288,10 +398,11 @@ DOCUMENT ME CHARLES @@ -288,10 +398,11 @@ DOCUMENT ME CHARLES
288 # SynthesizePointsTransform 398 # SynthesizePointsTransform
289 399
290 Synthesize additional points via triangulation. 400 Synthesize additional points via triangulation.
  401 +
291 402
292 * **file:** core/align.cpp 403 * **file:** core/align.cpp
293 * **inherits:** [MetadataTransform](../cpp_api/metadatatransform/metadatatransform.md) 404 * **inherits:** [MetadataTransform](../cpp_api/metadatatransform/metadatatransform.md)
294 -* **author:** Josh Klontz 405 +* **author(s):** [Josh Klontz][jklontz]
295 * **properties:** None 406 * **properties:** None
296 407
297 408
@@ -300,10 +411,11 @@ Synthesize additional points via triangulation. @@ -300,10 +411,11 @@ Synthesize additional points via triangulation.
300 # TextureMapTransform 411 # TextureMapTransform
301 412
302 Maps texture from one set of points to another. Assumes that points are rigidly transformed 413 Maps texture from one set of points to another. Assumes that points are rigidly transformed
  414 +
303 415
304 * **file:** core/align.cpp 416 * **file:** core/align.cpp
305 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md) 417 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md)
306 -* **authors:** Brendan Klare, Scott Klum 418 +* **author(s):** [Brendan Klare][bklare], [Scott Klum][sklum]
307 * **properties:** None 419 * **properties:** None
308 420
309 421
docs/docs/api_docs/plugins/distance.md
1 # AttributeDistance 1 # AttributeDistance
2 2
3 Attenuation function based distance from attributes 3 Attenuation function based distance from attributes
  4 +
4 5
5 * **file:** distance/attribute.cpp 6 * **file:** distance/attribute.cpp
6 * **inherits:** [UntrainableDistance](../cpp_api/untrainabledistance/untrainabledistance.md) 7 * **inherits:** [UntrainableDistance](../cpp_api/untrainabledistance/untrainabledistance.md)
7 -* **author:** Scott Klum 8 +* **author(s):** [Scott Klum][sklum]
8 * **properties:** None 9 * **properties:** None
9 10
10 11
@@ -12,11 +13,12 @@ Attenuation function based distance from attributes @@ -12,11 +13,12 @@ Attenuation function based distance from attributes
12 13
13 # BayesianQuantizationDistance 14 # BayesianQuantizationDistance
14 15
15 -Bayesian quantization distance 16 +Bayesian quantization [Distance](../cpp_api/distance/distance.md)
  17 +
16 18
17 * **file:** distance/bayesianquantization.cpp 19 * **file:** distance/bayesianquantization.cpp
18 * **inherits:** [Distance](../cpp_api/distance/distance.md) 20 * **inherits:** [Distance](../cpp_api/distance/distance.md)
19 -* **author:** Josh Klontz 21 +* **author(s):** [Josh Klontz][jklontz]
20 * **properties:** None 22 * **properties:** None
21 23
22 24
@@ -25,10 +27,11 @@ Bayesian quantization distance @@ -25,10 +27,11 @@ Bayesian quantization distance
25 # ByteL1Distance 27 # ByteL1Distance
26 28
27 Fast 8-bit L1 distance 29 Fast 8-bit L1 distance
  30 +
28 31
29 * **file:** distance/byteL1.cpp 32 * **file:** distance/byteL1.cpp
30 * **inherits:** [UntrainableDistance](../cpp_api/untrainabledistance/untrainabledistance.md) 33 * **inherits:** [UntrainableDistance](../cpp_api/untrainabledistance/untrainabledistance.md)
31 -* **author:** Josh Klontz 34 +* **author(s):** [Josh Klontz][jklontz]
32 * **properties:** None 35 * **properties:** None
33 36
34 37
@@ -36,11 +39,12 @@ Fast 8-bit L1 distance @@ -36,11 +39,12 @@ Fast 8-bit L1 distance
36 39
37 # CrossValidateDistance 40 # CrossValidateDistance
38 41
39 -Cross validate a distance metric. 42 +Cross validate a [Distance](../cpp_api/distance/distance.md) metric.
  43 +
40 44
41 * **file:** distance/crossvalidate.cpp 45 * **file:** distance/crossvalidate.cpp
42 * **inherits:** [UntrainableDistance](../cpp_api/untrainabledistance/untrainabledistance.md) 46 * **inherits:** [UntrainableDistance](../cpp_api/untrainabledistance/untrainabledistance.md)
43 -* **author:** Josh Klontz 47 +* **author(s):** [Josh Klontz][jklontz]
44 * **properties:** None 48 * **properties:** None
45 49
46 50
@@ -49,10 +53,11 @@ Cross validate a distance metric. @@ -49,10 +53,11 @@ Cross validate a distance metric.
49 # DefaultDistance 53 # DefaultDistance
50 54
51 DistDistance wrapper. 55 DistDistance wrapper.
  56 +
52 57
53 * **file:** distance/default.cpp 58 * **file:** distance/default.cpp
54 * **inherits:** [UntrainableDistance](../cpp_api/untrainabledistance/untrainabledistance.md) 59 * **inherits:** [UntrainableDistance](../cpp_api/untrainabledistance/untrainabledistance.md)
55 -* **author:** Josh Klontz 60 +* **author(s):** [Josh Klontz][jklontz]
56 * **properties:** None 61 * **properties:** None
57 62
58 63
@@ -60,11 +65,12 @@ DistDistance wrapper. @@ -60,11 +65,12 @@ DistDistance wrapper.
60 65
61 # DistDistance 66 # DistDistance
62 67
63 -Standard distance metrics 68 +Standard [Distance](../cpp_api/distance/distance.md) metrics
  69 +
64 70
65 * **file:** distance/dist.cpp 71 * **file:** distance/dist.cpp
66 * **inherits:** [UntrainableDistance](../cpp_api/untrainabledistance/untrainabledistance.md) 72 * **inherits:** [UntrainableDistance](../cpp_api/untrainabledistance/untrainabledistance.md)
67 -* **author:** Josh Klontz 73 +* **author(s):** [Josh Klontz][jklontz]
68 * **properties:** None 74 * **properties:** None
69 75
70 76
@@ -73,10 +79,11 @@ Standard distance metrics @@ -73,10 +79,11 @@ Standard distance metrics
73 # FilterDistance 79 # FilterDistance
74 80
75 Checks target metadata against filters. 81 Checks target metadata against filters.
  82 +
76 83
77 * **file:** distance/filter.cpp 84 * **file:** distance/filter.cpp
78 * **inherits:** [UntrainableDistance](../cpp_api/untrainabledistance/untrainabledistance.md) 85 * **inherits:** [UntrainableDistance](../cpp_api/untrainabledistance/untrainabledistance.md)
79 -* **author:** Josh Klontz 86 +* **author(s):** [Josh Klontz][jklontz]
80 * **properties:** None 87 * **properties:** None
81 88
82 89
@@ -84,23 +91,28 @@ Checks target metadata against filters. @@ -84,23 +91,28 @@ Checks target metadata against filters.
84 91
85 # FuseDistance 92 # FuseDistance
86 93
87 -Fuses similarity scores across multiple matrices of compared templates 94 +Fuses similarity scores across multiple matrices of compared [Template](../cpp_api/template/template.md)
  95 +
88 96
89 * **file:** distance/fuse.cpp 97 * **file:** distance/fuse.cpp
90 * **inherits:** [Distance](../cpp_api/distance/distance.md) 98 * **inherits:** [Distance](../cpp_api/distance/distance.md)
91 -* **author:** Scott Klum  
92 -* **properties:** None 99 +* **author(s):** [Scott Klum][sklum]
  100 +* **properties:**
93 101
  102 + Property | Type | Description
  103 + --- | --- | ---
  104 + Operation | enum | Possible values are:<ul><li>Mean</li><li>sum</li><li>min</li><li>max</li></ul>.
94 105
95 --- 106 ---
96 107
97 # HalfByteL1Distance 108 # HalfByteL1Distance
98 109
99 Fast 4-bit L1 distance 110 Fast 4-bit L1 distance
  111 +
100 112
101 * **file:** distance/halfbyteL1.cpp 113 * **file:** distance/halfbyteL1.cpp
102 * **inherits:** [UntrainableDistance](../cpp_api/untrainabledistance/untrainabledistance.md) 114 * **inherits:** [UntrainableDistance](../cpp_api/untrainabledistance/untrainabledistance.md)
103 -* **author:** Josh Klontz 115 +* **author(s):** [Josh Klontz][jklontz]
104 * **properties:** None 116 * **properties:** None
105 117
106 118
@@ -109,10 +121,11 @@ Fast 4-bit L1 distance @@ -109,10 +121,11 @@ Fast 4-bit L1 distance
109 # HeatMapDistance 121 # HeatMapDistance
110 122
111 1v1 heat map comparison 123 1v1 heat map comparison
  124 +
112 125
113 * **file:** distance/heatmap.cpp 126 * **file:** distance/heatmap.cpp
114 * **inherits:** [Distance](../cpp_api/distance/distance.md) 127 * **inherits:** [Distance](../cpp_api/distance/distance.md)
115 -* **author:** Scott Klum 128 +* **author(s):** [Scott Klum][sklum]
116 * **properties:** None 129 * **properties:** None
117 130
118 131
@@ -120,11 +133,12 @@ Fast 4-bit L1 distance @@ -120,11 +133,12 @@ Fast 4-bit L1 distance
120 133
121 # IdenticalDistance 134 # IdenticalDistance
122 135
123 -Returns 136 +Returns true if the [Template](../cpp_api/template/template.md) are identical, false otherwise.
  137 +
124 138
125 * **file:** distance/identical.cpp 139 * **file:** distance/identical.cpp
126 * **inherits:** [UntrainableDistance](../cpp_api/untrainabledistance/untrainabledistance.md) 140 * **inherits:** [UntrainableDistance](../cpp_api/untrainabledistance/untrainabledistance.md)
127 -* **author:** Josh Klontz 141 +* **author(s):** [Josh Klontz][jklontz]
128 * **properties:** None 142 * **properties:** None
129 143
130 144
@@ -133,10 +147,12 @@ Returns @@ -133,10 +147,12 @@ Returns
133 # KeyPointMatcherDistance 147 # KeyPointMatcherDistance
134 148
135 Wraps OpenCV Key Point Matcher 149 Wraps OpenCV Key Point Matcher
  150 +
136 151
137 * **file:** distance/keypointmatcher.cpp 152 * **file:** distance/keypointmatcher.cpp
138 * **inherits:** [UntrainableDistance](../cpp_api/untrainabledistance/untrainabledistance.md) 153 * **inherits:** [UntrainableDistance](../cpp_api/untrainabledistance/untrainabledistance.md)
139 -* **author:** Josh Klontz 154 +* **author(s):** [Josh Klontz][jklontz]
  155 +* **see:** [http://docs.opencv.org/modules/features2d/doc/common_interfaces_of_feature_detectors.html](http://docs.opencv.org/modules/features2d/doc/common_interfaces_of_feature_detectors.html)
140 * **properties:** None 156 * **properties:** None
141 157
142 158
@@ -145,10 +161,11 @@ Wraps OpenCV Key Point Matcher @@ -145,10 +161,11 @@ Wraps OpenCV Key Point Matcher
145 # L1Distance 161 # L1Distance
146 162
147 L1 distance computed using eigen. 163 L1 distance computed using eigen.
  164 +
148 165
149 * **file:** distance/L1.cpp 166 * **file:** distance/L1.cpp
150 * **inherits:** [UntrainableDistance](../cpp_api/untrainabledistance/untrainabledistance.md) 167 * **inherits:** [UntrainableDistance](../cpp_api/untrainabledistance/untrainabledistance.md)
151 -* **author:** Josh Klontz 168 +* **author(s):** [Josh Klontz][jklontz]
152 * **properties:** None 169 * **properties:** None
153 170
154 171
@@ -157,10 +174,11 @@ L1 distance computed using eigen. @@ -157,10 +174,11 @@ L1 distance computed using eigen.
157 # L2Distance 174 # L2Distance
158 175
159 L2 distance computed using eigen. 176 L2 distance computed using eigen.
  177 +
160 178
161 * **file:** distance/L2.cpp 179 * **file:** distance/L2.cpp
162 * **inherits:** [UntrainableDistance](../cpp_api/untrainabledistance/untrainabledistance.md) 180 * **inherits:** [UntrainableDistance](../cpp_api/untrainabledistance/untrainabledistance.md)
163 -* **author:** Josh Klontz 181 +* **author(s):** [Josh Klontz][jklontz]
164 * **properties:** None 182 * **properties:** None
165 183
166 184
@@ -169,10 +187,11 @@ L2 distance computed using eigen. @@ -169,10 +187,11 @@ L2 distance computed using eigen.
169 # MatchProbabilityDistance 187 # MatchProbabilityDistance
170 188
171 Match Probability 189 Match Probability
  190 +
172 191
173 * **file:** distance/matchprobability.cpp 192 * **file:** distance/matchprobability.cpp
174 * **inherits:** [Distance](../cpp_api/distance/distance.md) 193 * **inherits:** [Distance](../cpp_api/distance/distance.md)
175 -* **author:** Josh Klontz 194 +* **author(s):** [Josh Klontz][jklontz]
176 * **properties:** None 195 * **properties:** None
177 196
178 197
@@ -181,10 +200,11 @@ Match Probability @@ -181,10 +200,11 @@ Match Probability
181 # MetadataDistance 200 # MetadataDistance
182 201
183 Checks target metadata against query metadata. 202 Checks target metadata against query metadata.
  203 +
184 204
185 * **file:** distance/metadata.cpp 205 * **file:** distance/metadata.cpp
186 * **inherits:** [UntrainableDistance](../cpp_api/untrainabledistance/untrainabledistance.md) 206 * **inherits:** [UntrainableDistance](../cpp_api/untrainabledistance/untrainabledistance.md)
187 -* **author:** Scott Klum 207 +* **author(s):** [Scott Klum][sklum]
188 * **properties:** None 208 * **properties:** None
189 209
190 210
@@ -193,10 +213,11 @@ Checks target metadata against query metadata. @@ -193,10 +213,11 @@ Checks target metadata against query metadata.
193 # NegativeLogPlusOneDistance 213 # NegativeLogPlusOneDistance
194 214
195 Returns -log(distance(a,b)+1) 215 Returns -log(distance(a,b)+1)
  216 +
196 217
197 * **file:** distance/neglogplusone.cpp 218 * **file:** distance/neglogplusone.cpp
198 * **inherits:** [UntrainableDistance](../cpp_api/untrainabledistance/untrainabledistance.md) 219 * **inherits:** [UntrainableDistance](../cpp_api/untrainabledistance/untrainabledistance.md)
199 -* **author:** Josh Klontz 220 +* **author(s):** [Josh Klontz][jklontz]
200 * **properties:** None 221 * **properties:** None
201 222
202 223
@@ -204,11 +225,12 @@ Returns -log(distance(a,b)+1) @@ -204,11 +225,12 @@ Returns -log(distance(a,b)+1)
204 225
205 # OnlineDistance 226 # OnlineDistance
206 227
207 -Online distance metric to attenuate match scores across multiple frames 228 +Online [Distance](../cpp_api/distance/distance.md) metric to attenuate match scores across multiple frames
  229 +
208 230
209 * **file:** distance/online.cpp 231 * **file:** distance/online.cpp
210 * **inherits:** [UntrainableDistance](../cpp_api/untrainabledistance/untrainabledistance.md) 232 * **inherits:** [UntrainableDistance](../cpp_api/untrainabledistance/untrainabledistance.md)
211 -* **author:** Brendan klare 233 +* **author(s):** [Brendan klare][bklare]
212 * **properties:** None 234 * **properties:** None
213 235
214 236
@@ -218,9 +240,14 @@ Online distance metric to attenuate match scores across multiple frames @@ -218,9 +240,14 @@ Online distance metric to attenuate match scores across multiple frames
218 240
219 Distances in series. 241 Distances in series.
220 242
  243 +The [Template](../cpp_api/template/template.md) are compared using each [Distance](../cpp_api/distance/distance.md) in order.
  244 +If the result of the comparison with any given distance is -FLOAT_MAX then this result is returned early.
  245 +Otherwise the returned result is the value of comparing the [Template](../cpp_api/template/template.md) using the last [Distance](../cpp_api/distance/distance.md).
  246 +
  247 +
221 * **file:** distance/pipe.cpp 248 * **file:** distance/pipe.cpp
222 * **inherits:** [Distance](../cpp_api/distance/distance.md) 249 * **inherits:** [Distance](../cpp_api/distance/distance.md)
223 -* **author:** Josh Klontz 250 +* **author(s):** [Josh Klontz][jklontz]
224 * **properties:** None 251 * **properties:** None
225 252
226 253
@@ -228,11 +255,12 @@ Distances in series. @@ -228,11 +255,12 @@ Distances in series.
228 255
229 # RejectDistance 256 # RejectDistance
230 257
231 -Sets distance to -FLOAT_MAX if a target template has/doesn't have a key. 258 +Sets [Distance](../cpp_api/distance/distance.md) to -FLOAT_MAX if a target [Template](../cpp_api/template/template.md) has/doesn't have a key.
  259 +
232 260
233 * **file:** distance/reject.cpp 261 * **file:** distance/reject.cpp
234 * **inherits:** [UntrainableDistance](../cpp_api/untrainabledistance/untrainabledistance.md) 262 * **inherits:** [UntrainableDistance](../cpp_api/untrainabledistance/untrainabledistance.md)
235 -* **author:** Scott Klum 263 +* **author(s):** [Scott Klum][sklum]
236 * **properties:** None 264 * **properties:** None
237 265
238 266
@@ -240,11 +268,12 @@ Sets distance to -FLOAT_MAX if a target template has/doesn&#39;t have a key. @@ -240,11 +268,12 @@ Sets distance to -FLOAT_MAX if a target template has/doesn&#39;t have a key.
240 268
241 # SVMDistance 269 # SVMDistance
242 270
243 -SVM Regression on template absolute differences. 271 +SVM Regression on [Template](../cpp_api/template/template.md) absolute differences.
  272 +
244 273
245 * **file:** distance/svm.cpp 274 * **file:** distance/svm.cpp
246 * **inherits:** [Distance](../cpp_api/distance/distance.md) 275 * **inherits:** [Distance](../cpp_api/distance/distance.md)
247 -* **author:** Josh Klontz 276 +* **author(s):** [Josh Klontz][jklontz]
248 * **properties:** None 277 * **properties:** None
249 278
250 279
@@ -252,11 +281,12 @@ SVM Regression on template absolute differences. @@ -252,11 +281,12 @@ SVM Regression on template absolute differences.
252 281
253 # SumDistance 282 # SumDistance
254 283
255 -Sum match scores across multiple distances 284 +Sum match scores across multiple [Distance](../cpp_api/distance/distance.md)
  285 +
256 286
257 * **file:** distance/sum.cpp 287 * **file:** distance/sum.cpp
258 * **inherits:** [UntrainableDistance](../cpp_api/untrainabledistance/untrainabledistance.md) 288 * **inherits:** [UntrainableDistance](../cpp_api/untrainabledistance/untrainabledistance.md)
259 -* **author:** Scott Klum 289 +* **author(s):** [Scott Klum][sklum]
260 * **properties:** None 290 * **properties:** None
261 291
262 292
@@ -265,10 +295,11 @@ Sum match scores across multiple distances @@ -265,10 +295,11 @@ Sum match scores across multiple distances
265 # TurkDistance 295 # TurkDistance
266 296
267 Unmaps Turk HITs to be compared against query mats 297 Unmaps Turk HITs to be compared against query mats
  298 +
268 299
269 * **file:** distance/turk.cpp 300 * **file:** distance/turk.cpp
270 * **inherits:** [UntrainableDistance](../cpp_api/untrainabledistance/untrainabledistance.md) 301 * **inherits:** [UntrainableDistance](../cpp_api/untrainabledistance/untrainabledistance.md)
271 -* **author:** Scott Klum 302 +* **author(s):** [Scott Klum][sklum]
272 * **properties:** None 303 * **properties:** None
273 304
274 305
@@ -276,11 +307,25 @@ Unmaps Turk HITs to be compared against query mats @@ -276,11 +307,25 @@ Unmaps Turk HITs to be compared against query mats
276 307
277 # UnitDistance 308 # UnitDistance
278 309
279 -Linear normalizes of a distance so the mean impostor score is 0 and the mean genuine score is 1. 310 +Linear normalizes of a [Distance](../cpp_api/distance/distance.md) so the mean impostor score is 0 and the mean genuine score is 1.
  311 +
280 312
281 * **file:** distance/unit.cpp 313 * **file:** distance/unit.cpp
282 * **inherits:** [Distance](../cpp_api/distance/distance.md) 314 * **inherits:** [Distance](../cpp_api/distance/distance.md)
283 -* **author:** Josh Klontz 315 +* **author(s):** [Josh Klontz][jklontz]
  316 +* **properties:** None
  317 +
  318 +
  319 +---
  320 +
  321 +# ZScoreDistance
  322 +
  323 +DOCUMENT ME
  324 +
  325 +
  326 +* **file:** distance/zscore.cpp
  327 +* **inherits:** [Distance](../cpp_api/distance/distance.md)
  328 +* **author(s):** [Unknown][unknown]
284 * **properties:** None 329 * **properties:** None
285 330
286 331
docs/docs/api_docs/plugins/format.md
1 # DefaultFormat 1 # DefaultFormat
2 2
3 Reads image files. 3 Reads image files.
  4 +
4 5
5 * **file:** format/video.cpp 6 * **file:** format/video.cpp
6 * **inherits:** [Format](../cpp_api/format/format.md) 7 * **inherits:** [Format](../cpp_api/format/format.md)
7 -* **author:** Josh Klontz 8 +* **author(s):** [Josh Klontz][jklontz]
8 * **properties:** None 9 * **properties:** None
9 10
10 11
@@ -13,10 +14,12 @@ Reads image files. @@ -13,10 +14,12 @@ Reads image files.
13 # binaryFormat 14 # binaryFormat
14 15
15 A simple binary matrix format. 16 A simple binary matrix format.
  17 +
16 18
17 * **file:** format/binary.cpp 19 * **file:** format/binary.cpp
18 * **inherits:** [Format](../cpp_api/format/format.md) 20 * **inherits:** [Format](../cpp_api/format/format.md)
19 -* **author:** Josh Klontz 21 +* **author(s):** [Josh Klontz][jklontz]
  22 +* **format:** First 4 bytes indicate the number of rows. Second 4 bytes indicate the number of columns. The rest of the bytes are 32-bit floating data elements in row-major order.
20 * **properties:** None 23 * **properties:** None
21 24
22 25
@@ -25,10 +28,11 @@ A simple binary matrix format. @@ -25,10 +28,11 @@ A simple binary matrix format.
25 # csvFormat 28 # csvFormat
26 29
27 Reads a comma separated value file. 30 Reads a comma separated value file.
  31 +
28 32
29 * **file:** format/csv.cpp 33 * **file:** format/csv.cpp
30 * **inherits:** [Format](../cpp_api/format/format.md) 34 * **inherits:** [Format](../cpp_api/format/format.md)
31 -* **author:** Josh Klontz 35 +* **author(s):** [Josh Klontz][jklontz]
32 * **properties:** None 36 * **properties:** None
33 37
34 38
@@ -37,10 +41,12 @@ Reads a comma separated value file. @@ -37,10 +41,12 @@ Reads a comma separated value file.
37 # ebtsFormat 41 # ebtsFormat
38 42
39 Reads FBI EBTS transactions. 43 Reads FBI EBTS transactions.
  44 +
40 45
41 * **file:** format/ebts.cpp 46 * **file:** format/ebts.cpp
42 * **inherits:** [Format](../cpp_api/format/format.md) 47 * **inherits:** [Format](../cpp_api/format/format.md)
43 -* **author:** Scott Klum 48 +* **author(s):** [Scott Klum][sklum]
  49 +* **see:** [https://www.fbibiospecs.org/ebts.html](https://www.fbibiospecs.org/ebts.html)
44 * **properties:** None 50 * **properties:** None
45 51
46 52
@@ -49,10 +55,11 @@ Reads FBI EBTS transactions. @@ -49,10 +55,11 @@ Reads FBI EBTS transactions.
49 # lffsFormat 55 # lffsFormat
50 56
51 Reads a NIST LFFS file. 57 Reads a NIST LFFS file.
  58 +
52 59
53 * **file:** format/lffs.cpp 60 * **file:** format/lffs.cpp
54 * **inherits:** [Format](../cpp_api/format/format.md) 61 * **inherits:** [Format](../cpp_api/format/format.md)
55 -* **author:** Josh Klontz 62 +* **author(s):** [Josh Klontz][jklontz]
56 * **properties:** None 63 * **properties:** None
57 64
58 65
@@ -61,10 +68,12 @@ Reads a NIST LFFS file. @@ -61,10 +68,12 @@ Reads a NIST LFFS file.
61 # lmatFormat 68 # lmatFormat
62 69
63 Likely matrix format 70 Likely matrix format
  71 +
64 72
65 * **file:** format/lmat.cpp 73 * **file:** format/lmat.cpp
66 * **inherits:** [Format](../cpp_api/format/format.md) 74 * **inherits:** [Format](../cpp_api/format/format.md)
67 -* **author:** Josh Klontz 75 +* **author(s):** [Josh Klontz][jklontz]
  76 +* **see:** [www.liblikely.org](www.liblikely.org)
68 * **properties:** None 77 * **properties:** None
69 78
70 79
@@ -73,10 +82,11 @@ Likely matrix format @@ -73,10 +82,11 @@ Likely matrix format
73 # maskFormat 82 # maskFormat
74 83
75 Reads a NIST BEE mask matrix. 84 Reads a NIST BEE mask matrix.
  85 +
76 86
77 * **file:** format/mtx.cpp 87 * **file:** format/mtx.cpp
78 * **inherits:** [mtxFormat](#mtxformat) 88 * **inherits:** [mtxFormat](#mtxformat)
79 -* **author:** Josh Klontz 89 +* **author(s):** [Josh Klontz][jklontz]
80 * **properties:** None 90 * **properties:** None
81 91
82 92
@@ -86,9 +96,13 @@ Reads a NIST BEE mask matrix. @@ -86,9 +96,13 @@ Reads a NIST BEE mask matrix.
86 96
87 MATLAB <tt>.mat</tt> format. 97 MATLAB <tt>.mat</tt> format.
88 98
  99 +matFormat is known not to work with compressed matrices
  100 +
  101 +
89 * **file:** format/mat.cpp 102 * **file:** format/mat.cpp
90 * **inherits:** [Format](../cpp_api/format/format.md) 103 * **inherits:** [Format](../cpp_api/format/format.md)
91 -* **author:** Josh Klontz 104 +* **author(s):** [Josh Klontz][jklontz]
  105 +* **see:** [http://www.mathworks.com/help/pdf_doc/matlab/matfile_format.pdf](http://www.mathworks.com/help/pdf_doc/matlab/matfile_format.pdf)
92 * **properties:** None 106 * **properties:** None
93 107
94 108
@@ -97,10 +111,11 @@ MATLAB &lt;tt&gt;.mat&lt;/tt&gt; format. @@ -97,10 +111,11 @@ MATLAB &lt;tt&gt;.mat&lt;/tt&gt; format.
97 # mtxFormat 111 # mtxFormat
98 112
99 Reads a NIST BEE similarity matrix. 113 Reads a NIST BEE similarity matrix.
  114 +
100 115
101 * **file:** format/mtx.cpp 116 * **file:** format/mtx.cpp
102 * **inherits:** [Format](../cpp_api/format/format.md) 117 * **inherits:** [Format](../cpp_api/format/format.md)
103 -* **author:** Josh Klontz 118 +* **author(s):** [Josh Klontz][jklontz]
104 * **properties:** None 119 * **properties:** None
105 120
106 121
@@ -109,10 +124,11 @@ Reads a NIST BEE similarity matrix. @@ -109,10 +124,11 @@ Reads a NIST BEE similarity matrix.
109 # nullFormat 124 # nullFormat
110 125
111 Returns an empty matrix. 126 Returns an empty matrix.
  127 +
112 128
113 * **file:** format/null.cpp 129 * **file:** format/null.cpp
114 * **inherits:** [Format](../cpp_api/format/format.md) 130 * **inherits:** [Format](../cpp_api/format/format.md)
115 -* **author:** Josh Klontz 131 +* **author(s):** [Josh Klontz][jklontz]
116 * **properties:** None 132 * **properties:** None
117 133
118 134
@@ -121,10 +137,11 @@ Returns an empty matrix. @@ -121,10 +137,11 @@ Returns an empty matrix.
121 # postFormat 137 # postFormat
122 138
123 Handle POST requests 139 Handle POST requests
  140 +
124 141
125 * **file:** format/post.cpp 142 * **file:** format/post.cpp
126 * **inherits:** [Format](../cpp_api/format/format.md) 143 * **inherits:** [Format](../cpp_api/format/format.md)
127 -* **author:** Josh Klontz 144 +* **author(s):** [Josh Klontz][jklontz]
128 * **properties:** None 145 * **properties:** None
129 146
130 147
@@ -133,10 +150,12 @@ Handle POST requests @@ -133,10 +150,12 @@ Handle POST requests
133 # rawFormat 150 # rawFormat
134 151
135 RAW format 152 RAW format
  153 +
136 154
137 * **file:** format/raw.cpp 155 * **file:** format/raw.cpp
138 * **inherits:** [Format](../cpp_api/format/format.md) 156 * **inherits:** [Format](../cpp_api/format/format.md)
139 -* **author:** Josh Klontz 157 +* **author(s):** [Josh Klontz][jklontz]
  158 +* **see:** [http://www.nist.gov/srd/nistsd27.cfm](http://www.nist.gov/srd/nistsd27.cfm)
140 * **properties:** None 159 * **properties:** None
141 160
142 161
@@ -145,10 +164,14 @@ RAW format @@ -145,10 +164,14 @@ RAW format
145 # scoresFormat 164 # scoresFormat
146 165
147 Reads in scores or ground truth from a text table. 166 Reads in scores or ground truth from a text table.
  167 +
148 168
149 * **file:** format/scores.cpp 169 * **file:** format/scores.cpp
150 * **inherits:** [Format](../cpp_api/format/format.md) 170 * **inherits:** [Format](../cpp_api/format/format.md)
151 -* **author:** Josh Klontz 171 +* **author(s):** [Josh Klontz][jklontz]
  172 +* **format:** Example of the format: <pre><code>2.2531514 FALSE 99990377 99990164
  173 +2.2549822 TRUE 99990101 99990101
  174 +</code></pre>
152 * **properties:** None 175 * **properties:** None
153 176
154 177
@@ -157,10 +180,11 @@ Reads in scores or ground truth from a text table. @@ -157,10 +180,11 @@ Reads in scores or ground truth from a text table.
157 # urlFormat 180 # urlFormat
158 181
159 Reads image files from the web. 182 Reads image files from the web.
  183 +
160 184
161 * **file:** format/url.cpp 185 * **file:** format/url.cpp
162 * **inherits:** [Format](../cpp_api/format/format.md) 186 * **inherits:** [Format](../cpp_api/format/format.md)
163 -* **author:** Josh Klontz 187 +* **author(s):** [Josh Klontz][jklontz]
164 * **properties:** None 188 * **properties:** None
165 189
166 190
@@ -169,10 +193,11 @@ Reads image files from the web. @@ -169,10 +193,11 @@ Reads image files from the web.
169 # videoFormat 193 # videoFormat
170 194
171 Read all frames of a video using OpenCV 195 Read all frames of a video using OpenCV
  196 +
172 197
173 * **file:** format/video.cpp 198 * **file:** format/video.cpp
174 * **inherits:** [Format](../cpp_api/format/format.md) 199 * **inherits:** [Format](../cpp_api/format/format.md)
175 -* **author:** Charles Otto 200 +* **author(s):** [Charles Otto][caotto]
176 * **properties:** None 201 * **properties:** None
177 202
178 203
@@ -181,10 +206,11 @@ Read all frames of a video using OpenCV @@ -181,10 +206,11 @@ Read all frames of a video using OpenCV
181 # webcamFormat 206 # webcamFormat
182 207
183 Retrieves an image from a webcam. 208 Retrieves an image from a webcam.
  209 +
184 210
185 * **file:** format/video.cpp 211 * **file:** format/video.cpp
186 * **inherits:** [Format](../cpp_api/format/format.md) 212 * **inherits:** [Format](../cpp_api/format/format.md)
187 -* **author:** Josh Klontz 213 +* **author(s):** [Josh Klontz][jklontz]
188 * **properties:** None 214 * **properties:** None
189 215
190 216
@@ -193,10 +219,11 @@ Retrieves an image from a webcam. @@ -193,10 +219,11 @@ Retrieves an image from a webcam.
193 # xmlFormat 219 # xmlFormat
194 220
195 Decodes images from Base64 xml 221 Decodes images from Base64 xml
  222 +
196 223
197 * **file:** format/xml.cpp 224 * **file:** format/xml.cpp
198 * **inherits:** [Format](../cpp_api/format/format.md) 225 * **inherits:** [Format](../cpp_api/format/format.md)
199 -* **authors:** Scott Klum, Josh Klontz 226 +* **author(s):** [Scott Klum][sklum], [Josh Klontz][jklontz]
200 * **properties:** None 227 * **properties:** None
201 228
202 229
docs/docs/api_docs/plugins/gallery.md
1 # BinaryGallery 1 # BinaryGallery
2 2
3 An abstract gallery for handling binary data 3 An abstract gallery for handling binary data
  4 +
4 5
5 * **file:** gallery/binary.cpp 6 * **file:** gallery/binary.cpp
6 * **inherits:** [Gallery](../cpp_api/gallery/gallery.md) 7 * **inherits:** [Gallery](../cpp_api/gallery/gallery.md)
7 -* **author:** Unknown 8 +* **author(s):** [Josh Klontz][jklontz]
8 * **properties:** None 9 * **properties:** None
9 10
10 11
@@ -12,11 +13,12 @@ An abstract gallery for handling binary data @@ -12,11 +13,12 @@ An abstract gallery for handling binary data
12 13
13 # DefaultGallery 14 # DefaultGallery
14 15
15 -Treats the gallery as a br::Format. 16 +Treats the gallery as a [Format](../cpp_api/format/format.md).
  17 +
16 18
17 * **file:** gallery/default.cpp 19 * **file:** gallery/default.cpp
18 * **inherits:** [Gallery](../cpp_api/gallery/gallery.md) 20 * **inherits:** [Gallery](../cpp_api/gallery/gallery.md)
19 -* **author:** Josh Klontz 21 +* **author(s):** [Josh Klontz][jklontz]
20 * **properties:** None 22 * **properties:** None
21 23
22 24
@@ -25,22 +27,28 @@ Treats the gallery as a br::Format. @@ -25,22 +27,28 @@ Treats the gallery as a br::Format.
25 # EmptyGallery 27 # EmptyGallery
26 28
27 Reads/writes templates to/from folders. 29 Reads/writes templates to/from folders.
  30 +
28 31
29 * **file:** gallery/empty.cpp 32 * **file:** gallery/empty.cpp
30 * **inherits:** [Gallery](../cpp_api/gallery/gallery.md) 33 * **inherits:** [Gallery](../cpp_api/gallery/gallery.md)
31 -* **author:** Josh Klontz  
32 -* **properties:** None 34 +* **author(s):** [Josh Klontz][jklontz]
  35 +* **properties:**
33 36
  37 + Property | Type | Description
  38 + --- | --- | ---
  39 + regexp | QString | An optional regular expression to match against the files extension.
34 40
35 --- 41 ---
36 42
37 # FDDBGallery 43 # FDDBGallery
38 44
39 Implements the FDDB detection format. 45 Implements the FDDB detection format.
  46 +
40 47
41 * **file:** gallery/fddb.cpp 48 * **file:** gallery/fddb.cpp
42 * **inherits:** [Gallery](../cpp_api/gallery/gallery.md) 49 * **inherits:** [Gallery](../cpp_api/gallery/gallery.md)
43 -* **author:** Josh Klontz 50 +* **author(s):** [Josh Klontz][jklontz]
  51 +* **see:** [http://vis-www.cs.umass.edu/fddb/README.txt](http://vis-www.cs.umass.edu/fddb/README.txt)
44 * **properties:** None 52 * **properties:** None
45 53
46 54
@@ -49,10 +57,25 @@ Implements the FDDB detection format. @@ -49,10 +57,25 @@ Implements the FDDB detection format.
49 # arffGallery 57 # arffGallery
50 58
51 Weka ARFF file format. 59 Weka ARFF file format.
  60 +
52 61
53 * **file:** gallery/arff.cpp 62 * **file:** gallery/arff.cpp
54 * **inherits:** [Gallery](../cpp_api/gallery/gallery.md) 63 * **inherits:** [Gallery](../cpp_api/gallery/gallery.md)
55 -* **author:** Josh Klontz 64 +* **author(s):** [Josh Klontz][jklontz]
  65 +* **see:** [http://weka.wikispaces.com/ARFF+%28stable+version%29](http://weka.wikispaces.com/ARFF+%28stable+version%29)
  66 +* **properties:** None
  67 +
  68 +
  69 +---
  70 +
  71 +# aviGallery
  72 +
  73 +Read videos of format .avi
  74 +
  75 +
  76 +* **file:** gallery/video.cpp
  77 +* **inherits:** [videoGallery](#videogallery)
  78 +* **author(s):** [Unknown][unknown]
56 * **properties:** None 79 * **properties:** None
57 80
58 81
@@ -61,10 +84,11 @@ Weka ARFF file format. @@ -61,10 +84,11 @@ Weka ARFF file format.
61 # crawlGallery 84 # crawlGallery
62 85
63 Crawl a root location for image files. 86 Crawl a root location for image files.
  87 +
64 88
65 * **file:** gallery/crawl.cpp 89 * **file:** gallery/crawl.cpp
66 * **inherits:** [Gallery](../cpp_api/gallery/gallery.md) 90 * **inherits:** [Gallery](../cpp_api/gallery/gallery.md)
67 -* **author:** Josh Klontz 91 +* **author(s):** [Josh Klontz][jklontz]
68 * **properties:** None 92 * **properties:** None
69 93
70 94
@@ -73,11 +97,12 @@ Crawl a root location for image files. @@ -73,11 +97,12 @@ Crawl a root location for image files.
73 # csvGallery 97 # csvGallery
74 98
75 Treats each line as a file. 99 Treats each line as a file.
  100 +
76 101
77 * **file:** gallery/csv.cpp 102 * **file:** gallery/csv.cpp
78 * **inherits:** [FileGallery](../cpp_api/filegallery/filegallery.md) 103 * **inherits:** [FileGallery](../cpp_api/filegallery/filegallery.md)
79 -* **see:** [txtGallery](#txtgallery)  
80 -* **author:** Josh Klontz 104 +* **author(s):** [Josh Klontz][jklontz]
  105 +* **format:** Columns should be comma separated with first row containing headers. The first column in the file should be the path to the file to enroll. Other columns will be treated as file metadata.
81 * **properties:** None 106 * **properties:** None
82 107
83 108
@@ -86,10 +111,11 @@ Treats each line as a file. @@ -86,10 +111,11 @@ Treats each line as a file.
86 # dbGallery 111 # dbGallery
87 112
88 Database input. 113 Database input.
  114 +
89 115
90 * **file:** gallery/db.cpp 116 * **file:** gallery/db.cpp
91 * **inherits:** [Gallery](../cpp_api/gallery/gallery.md) 117 * **inherits:** [Gallery](../cpp_api/gallery/gallery.md)
92 -* **author:** Josh Klontz 118 +* **author(s):** [Josh Klontz][jklontz]
93 * **properties:** None 119 * **properties:** None
94 120
95 121
@@ -97,11 +123,12 @@ Database input. @@ -97,11 +123,12 @@ Database input.
97 123
98 # flatGallery 124 # flatGallery
99 125
100 -Treats each line as a call to File::flat() 126 +Treats each line as a call to [File](../cpp_api/file/file.md)::flat()
  127 +
101 128
102 * **file:** gallery/flat.cpp 129 * **file:** gallery/flat.cpp
103 * **inherits:** [FileGallery](../cpp_api/filegallery/filegallery.md) 130 * **inherits:** [FileGallery](../cpp_api/filegallery/filegallery.md)
104 -* **author:** Josh Klontz 131 +* **author(s):** [Josh Klontz][jklontz]
105 * **properties:** None 132 * **properties:** None
106 133
107 134
@@ -111,9 +138,13 @@ Treats each line as a call to File::flat() @@ -111,9 +138,13 @@ Treats each line as a call to File::flat()
111 138
112 A binary gallery. 139 A binary gallery.
113 140
  141 +Designed to be a literal translation of templates to disk.
  142 +Compatible with [TemplateList](../cpp_api/templatelist/templatelist.md)::fromBuffer.
  143 +
  144 +
114 * **file:** gallery/binary.cpp 145 * **file:** gallery/binary.cpp
115 * **inherits:** [BinaryGallery](#binarygallery) 146 * **inherits:** [BinaryGallery](#binarygallery)
116 -* **author:** Josh Klontz 147 +* **author(s):** [Josh Klontz][jklontz]
117 * **properties:** None 148 * **properties:** None
118 149
119 150
@@ -122,10 +153,11 @@ A binary gallery. @@ -122,10 +153,11 @@ A binary gallery.
122 # googleGallery 153 # googleGallery
123 154
124 Input from a google image search. 155 Input from a google image search.
  156 +
125 157
126 * **file:** gallery/google.cpp 158 * **file:** gallery/google.cpp
127 * **inherits:** [Gallery](../cpp_api/gallery/gallery.md) 159 * **inherits:** [Gallery](../cpp_api/gallery/gallery.md)
128 -* **author:** Josh Klontz 160 +* **author(s):** [Josh Klontz][jklontz]
129 * **properties:** None 161 * **properties:** None
130 162
131 163
@@ -134,10 +166,11 @@ Input from a google image search. @@ -134,10 +166,11 @@ Input from a google image search.
134 # jsonGallery 166 # jsonGallery
135 167
136 Newline-separated JSON objects. 168 Newline-separated JSON objects.
  169 +
137 170
138 * **file:** gallery/binary.cpp 171 * **file:** gallery/binary.cpp
139 * **inherits:** [BinaryGallery](#binarygallery) 172 * **inherits:** [BinaryGallery](#binarygallery)
140 -* **author:** Josh Klontz 173 +* **author(s):** [Josh Klontz][jklontz]
141 * **properties:** None 174 * **properties:** None
142 175
143 176
@@ -146,10 +179,11 @@ Newline-separated JSON objects. @@ -146,10 +179,11 @@ Newline-separated JSON objects.
146 # keyframesGallery 179 # keyframesGallery
147 180
148 Read key frames of a video with LibAV 181 Read key frames of a video with LibAV
  182 +
149 183
150 * **file:** gallery/keyframes.cpp 184 * **file:** gallery/keyframes.cpp
151 * **inherits:** [Gallery](../cpp_api/gallery/gallery.md) 185 * **inherits:** [Gallery](../cpp_api/gallery/gallery.md)
152 -* **author:** Ben Klein 186 +* **author(s):** [Ben Klein][bhklein]
153 * **properties:** None 187 * **properties:** None
154 188
155 189
@@ -158,10 +192,16 @@ Read key frames of a video with LibAV @@ -158,10 +192,16 @@ Read key frames of a video with LibAV
158 # landmarksGallery 192 # landmarksGallery
159 193
160 Text format for associating anonymous landmarks with images. 194 Text format for associating anonymous landmarks with images.
  195 +
161 196
162 * **file:** gallery/landmarks.cpp 197 * **file:** gallery/landmarks.cpp
163 * **inherits:** [Gallery](../cpp_api/gallery/gallery.md) 198 * **inherits:** [Gallery](../cpp_api/gallery/gallery.md)
164 -* **author:** Josh Klontz 199 +* **author(s):** [Josh Klontz][jklontz]
  200 +* **format:** The input should be formatted as follows: <pre><code>file_name:x1,y1,x2,y2,...,xn,yn
  201 +file_name:x1,y1,x2,y2,...,xn,yn
  202 +...
  203 +file_name:x1,y1,x2,y2,...,xn,yn
  204 +</code></pre>
165 * **properties:** None 205 * **properties:** None
166 206
167 207
@@ -170,10 +210,12 @@ Text format for associating anonymous landmarks with images. @@ -170,10 +210,12 @@ Text format for associating anonymous landmarks with images.
170 # lmatGallery 210 # lmatGallery
171 211
172 Likely matrix format 212 Likely matrix format
  213 +
173 214
174 * **file:** gallery/lmat.cpp 215 * **file:** gallery/lmat.cpp
175 * **inherits:** [Gallery](../cpp_api/gallery/gallery.md) 216 * **inherits:** [Gallery](../cpp_api/gallery/gallery.md)
176 -* **author:** Josh Klontz 217 +* **author(s):** [Josh Klontz][jklontz]
  218 +* **see:** [www.liblikely.org](www.liblikely.org)
177 * **properties:** None 219 * **properties:** None
178 220
179 221
@@ -181,11 +223,12 @@ Likely matrix format @@ -181,11 +223,12 @@ Likely matrix format
181 223
182 # matrixGallery 224 # matrixGallery
183 225
184 -Combine all templates into one large matrix and process it as a br::Format 226 +Combine all [Template](../cpp_api/template/template.md) into one large matrix and process it as a [Format](../cpp_api/format/format.md)
  227 +
185 228
186 * **file:** gallery/matrix.cpp 229 * **file:** gallery/matrix.cpp
187 * **inherits:** [Gallery](../cpp_api/gallery/gallery.md) 230 * **inherits:** [Gallery](../cpp_api/gallery/gallery.md)
188 -* **author:** Josh Klontz 231 +* **author(s):** [Josh Klontz][jklontz]
189 * **properties:** None 232 * **properties:** None
190 233
191 234
@@ -194,10 +237,11 @@ Combine all templates into one large matrix and process it as a br::Format @@ -194,10 +237,11 @@ Combine all templates into one large matrix and process it as a br::Format
194 # memGallery 237 # memGallery
195 238
196 A gallery held in memory. 239 A gallery held in memory.
  240 +
197 241
198 * **file:** gallery/mem.cpp 242 * **file:** gallery/mem.cpp
199 * **inherits:** [Gallery](../cpp_api/gallery/gallery.md) 243 * **inherits:** [Gallery](../cpp_api/gallery/gallery.md)
200 -* **author:** Josh Klontz 244 +* **author(s):** [Josh Klontz][jklontz]
201 * **properties:** None 245 * **properties:** None
202 246
203 247
@@ -206,10 +250,11 @@ A gallery held in memory. @@ -206,10 +250,11 @@ A gallery held in memory.
206 # mp4Gallery 250 # mp4Gallery
207 251
208 Read key frames of a .mp4 video file with LibAV 252 Read key frames of a .mp4 video file with LibAV
  253 +
209 254
210 * **file:** gallery/keyframes.cpp 255 * **file:** gallery/keyframes.cpp
211 * **inherits:** [keyframesGallery](#keyframesgallery) 256 * **inherits:** [keyframesGallery](#keyframesgallery)
212 -* **author:** Ben Klein 257 +* **author(s):** [Ben Klein][bhklein]
213 * **properties:** None 258 * **properties:** None
214 259
215 260
@@ -218,10 +263,24 @@ Read key frames of a .mp4 video file with LibAV @@ -218,10 +263,24 @@ Read key frames of a .mp4 video file with LibAV
218 # postGallery 263 # postGallery
219 264
220 Handle POST requests 265 Handle POST requests
  266 +
221 267
222 * **file:** gallery/post.cpp 268 * **file:** gallery/post.cpp
223 * **inherits:** [Gallery](../cpp_api/gallery/gallery.md) 269 * **inherits:** [Gallery](../cpp_api/gallery/gallery.md)
224 -* **author:** Josh Klontz 270 +* **author(s):** [Josh Klontz][jklontz]
  271 +* **properties:** None
  272 +
  273 +
  274 +---
  275 +
  276 +# seqGallery
  277 +
  278 +DOCUMENT ME
  279 +
  280 +
  281 +* **file:** gallery/seq.cpp
  282 +* **inherits:** [Gallery](../cpp_api/gallery/gallery.md)
  283 +* **author(s):** [Unknown][unknown]
225 * **properties:** None 284 * **properties:** None
226 285
227 286
@@ -229,11 +288,12 @@ Handle POST requests @@ -229,11 +288,12 @@ Handle POST requests
229 288
230 # statGallery 289 # statGallery
231 290
232 -Print template statistics. 291 +Print [Template](../cpp_api/template/template.md) statistics.
  292 +
233 293
234 * **file:** gallery/stat.cpp 294 * **file:** gallery/stat.cpp
235 * **inherits:** [Gallery](../cpp_api/gallery/gallery.md) 295 * **inherits:** [Gallery](../cpp_api/gallery/gallery.md)
236 -* **author:** Josh Klontz 296 +* **author(s):** [Josh Klontz][jklontz]
237 * **properties:** None 297 * **properties:** None
238 298
239 299
@@ -241,11 +301,12 @@ Print template statistics. @@ -241,11 +301,12 @@ Print template statistics.
241 301
242 # templateGallery 302 # templateGallery
243 303
244 -Treat the file as a single binary template. 304 +Treat the file as a single binary [Template](../cpp_api/template/template.md).
  305 +
245 306
246 * **file:** gallery/template.cpp 307 * **file:** gallery/template.cpp
247 * **inherits:** [Gallery](../cpp_api/gallery/gallery.md) 308 * **inherits:** [Gallery](../cpp_api/gallery/gallery.md)
248 -* **author:** Josh Klontz 309 +* **author(s):** [Josh Klontz][jklontz]
249 * **properties:** None 310 * **properties:** None
250 311
251 312
@@ -254,10 +315,11 @@ Treat the file as a single binary template. @@ -254,10 +315,11 @@ Treat the file as a single binary template.
254 # turkGallery 315 # turkGallery
255 316
256 For Amazon Mechanical Turk datasets 317 For Amazon Mechanical Turk datasets
  318 +
257 319
258 * **file:** gallery/turk.cpp 320 * **file:** gallery/turk.cpp
259 * **inherits:** [Gallery](../cpp_api/gallery/gallery.md) 321 * **inherits:** [Gallery](../cpp_api/gallery/gallery.md)
260 -* **author:** Scott Klum 322 +* **author(s):** [Scott Klum][sklum]
261 * **properties:** None 323 * **properties:** None
262 324
263 325
@@ -266,11 +328,20 @@ For Amazon Mechanical Turk datasets @@ -266,11 +328,20 @@ For Amazon Mechanical Turk datasets
266 # txtGallery 328 # txtGallery
267 329
268 Treats each line as a file. 330 Treats each line as a file.
  331 +
269 332
270 * **file:** gallery/txt.cpp 333 * **file:** gallery/txt.cpp
271 * **inherits:** [FileGallery](../cpp_api/filegallery/filegallery.md) 334 * **inherits:** [FileGallery](../cpp_api/filegallery/filegallery.md)
272 -* **see:** [csvGallery](#csvgallery)  
273 -* **author:** Josh Klontz 335 +* **author(s):** [Josh Klontz][jklontz]
  336 +* **format:** The entire line is treated as the file path. <pre><code>&lt;FILE&gt;
  337 +&lt;FILE&gt;
  338 +...
  339 +&lt;FILE&gt;
  340 +</code></pre>An optional label may be specified using a space ' ' separator: <pre><code>&lt;FILE&gt; &lt;LABEL&gt;
  341 +&lt;FILE&gt; &lt;LABEL&gt;
  342 +...
  343 +&lt;FILE&gt; &lt;LABEL&gt;
  344 +</code></pre>
274 * **properties:** None 345 * **properties:** None
275 346
276 347
@@ -279,10 +350,11 @@ Treats each line as a file. @@ -279,10 +350,11 @@ Treats each line as a file.
279 # urlGallery 350 # urlGallery
280 351
281 Newline-separated URLs. 352 Newline-separated URLs.
  353 +
282 354
283 * **file:** gallery/binary.cpp 355 * **file:** gallery/binary.cpp
284 * **inherits:** [BinaryGallery](#binarygallery) 356 * **inherits:** [BinaryGallery](#binarygallery)
285 -* **author:** Josh Klontz 357 +* **author(s):** [Josh Klontz][jklontz]
286 * **properties:** None 358 * **properties:** None
287 359
288 360
@@ -291,10 +363,63 @@ Newline-separated URLs. @@ -291,10 +363,63 @@ Newline-separated URLs.
291 # utGallery 363 # utGallery
292 364
293 A contiguous array of br_universal_template. 365 A contiguous array of br_universal_template.
  366 +
294 367
295 * **file:** gallery/binary.cpp 368 * **file:** gallery/binary.cpp
296 * **inherits:** [BinaryGallery](#binarygallery) 369 * **inherits:** [BinaryGallery](#binarygallery)
297 -* **author:** Josh Klontz 370 +* **author(s):** [Josh Klontz][jklontz]
  371 +* **properties:** None
  372 +
  373 +
  374 +---
  375 +
  376 +# vbbGallery
  377 +
  378 +DOCUMENT ME
  379 +
  380 +
  381 +* **file:** gallery/vbb.cpp
  382 +* **inherits:** [Gallery](../cpp_api/gallery/gallery.md)
  383 +* **author(s):** [Unknown][unknown]
  384 +* **properties:** None
  385 +
  386 +
  387 +---
  388 +
  389 +# videoGallery
  390 +
  391 +Read a video frame by frame using cv::VideoCapture
  392 +
  393 +
  394 +* **file:** gallery/video.cpp
  395 +* **inherits:** [Gallery](../cpp_api/gallery/gallery.md)
  396 +* **author(s):** [Unknown][unknown]
  397 +* **properties:** None
  398 +
  399 +
  400 +---
  401 +
  402 +# webcamGallery
  403 +
  404 +Read a video from the webcam
  405 +
  406 +
  407 +* **file:** gallery/video.cpp
  408 +* **inherits:** [videoGallery](#videogallery)
  409 +* **author(s):** [Unknown][unknown]
  410 +* **properties:** None
  411 +
  412 +
  413 +---
  414 +
  415 +# wmvGallery
  416 +
  417 +Read videos of format .wmv
  418 +
  419 +
  420 +* **file:** gallery/video.cpp
  421 +* **inherits:** [videoGallery](#videogallery)
  422 +* **author(s):** [Unknown][unknown]
298 * **properties:** None 423 * **properties:** None
299 424
300 425
@@ -302,11 +427,12 @@ A contiguous array of br_universal_template. @@ -302,11 +427,12 @@ A contiguous array of br_universal_template.
302 427
303 # xmlGallery 428 # xmlGallery
304 429
305 -A 430 +A sigset input.
  431 +
306 432
307 * **file:** gallery/xml.cpp 433 * **file:** gallery/xml.cpp
308 * **inherits:** [FileGallery](../cpp_api/filegallery/filegallery.md) 434 * **inherits:** [FileGallery](../cpp_api/filegallery/filegallery.md)
309 -* **author:** Josh Klontz 435 +* **author(s):** [Josh Klontz][jklontz]
310 * **properties:** None 436 * **properties:** None
311 437
312 438
docs/docs/api_docs/plugins/gui.md
1 # AdjacentOverlayTransform 1 # AdjacentOverlayTransform
2 2
3 Load the image named in the specified property, draw it on the current matrix adjacent to the rect specified in the other property. 3 Load the image named in the specified property, draw it on the current matrix adjacent to the rect specified in the other property.
  4 +
4 5
5 * **file:** gui/adjacentoverlay.cpp 6 * **file:** gui/adjacentoverlay.cpp
6 * **inherits:** [Transform](../cpp_api/transform/transform.md) 7 * **inherits:** [Transform](../cpp_api/transform/transform.md)
7 -* **author:** Charles Otto 8 +* **author(s):** [Charles Otto][caotto]
8 * **properties:** None 9 * **properties:** None
9 10
10 11
@@ -13,10 +14,11 @@ Load the image named in the specified property, draw it on the current matrix ad @@ -13,10 +14,11 @@ Load the image named in the specified property, draw it on the current matrix ad
13 # DrawDelaunayTransform 14 # DrawDelaunayTransform
14 15
15 Creates a Delaunay triangulation based on a set of points 16 Creates a Delaunay triangulation based on a set of points
  17 +
16 18
17 * **file:** gui/drawdelaunay.cpp 19 * **file:** gui/drawdelaunay.cpp
18 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md) 20 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md)
19 -* **author:** Scott Klum 21 +* **author(s):** [Scott Klum][sklum]
20 * **properties:** None 22 * **properties:** None
21 23
22 24
@@ -25,10 +27,11 @@ Creates a Delaunay triangulation based on a set of points @@ -25,10 +27,11 @@ Creates a Delaunay triangulation based on a set of points
25 # DrawGridLinesTransform 27 # DrawGridLinesTransform
26 28
27 Draws a grid on the image 29 Draws a grid on the image
  30 +
28 31
29 * **file:** gui/drawgridlines.cpp 32 * **file:** gui/drawgridlines.cpp
30 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md) 33 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md)
31 -* **author:** Josh Klontz 34 +* **author(s):** [Josh Klontz][jklontz]
32 * **properties:** None 35 * **properties:** None
33 36
34 37
@@ -37,10 +40,11 @@ Draws a grid on the image @@ -37,10 +40,11 @@ Draws a grid on the image
37 # DrawOpticalFlow 40 # DrawOpticalFlow
38 41
39 Draw a line representing the direction and magnitude of optical flow at the specified points. 42 Draw a line representing the direction and magnitude of optical flow at the specified points.
  43 +
40 44
41 * **file:** gui/drawopticalflow.cpp 45 * **file:** gui/drawopticalflow.cpp
42 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md) 46 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md)
43 -* **author:** Austin Blanton 47 +* **author(s):** [Austin Blanton][imaus10]
44 * **properties:** None 48 * **properties:** None
45 49
46 50
@@ -50,9 +54,12 @@ Draw a line representing the direction and magnitude of optical flow at the spec @@ -50,9 +54,12 @@ Draw a line representing the direction and magnitude of optical flow at the spec
50 54
51 Draw the values of a list of properties at the specified point on the image 55 Draw the values of a list of properties at the specified point on the image
52 56
  57 +The inPlace argument controls whether or not the image is cloned before it is drawn on.
  58 +
  59 +
53 * **file:** gui/drawpropertiespoint.cpp 60 * **file:** gui/drawpropertiespoint.cpp
54 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md) 61 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md)
55 -* **author:** Charles Otto 62 +* **author(s):** [Charles Otto][caotto]
56 * **properties:** None 63 * **properties:** None
57 64
58 65
@@ -62,9 +69,12 @@ Draw the values of a list of properties at the specified point on the image @@ -62,9 +69,12 @@ Draw the values of a list of properties at the specified point on the image
62 69
63 Draw the value of the specified property at the specified point on the image 70 Draw the value of the specified property at the specified point on the image
64 71
  72 +The inPlace argument controls whether or not the image is cloned before it is drawn on.
  73 +
  74 +
65 * **file:** gui/drawpropertypoint.cpp 75 * **file:** gui/drawpropertypoint.cpp
66 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md) 76 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md)
67 -* **author:** Charles Otto 77 +* **author(s):** [Charles Otto][caotto]
68 * **properties:** None 78 * **properties:** None
69 79
70 80
@@ -73,10 +83,11 @@ Draw the value of the specified property at the specified point on the image @@ -73,10 +83,11 @@ Draw the value of the specified property at the specified point on the image
73 # DrawSegmentation 83 # DrawSegmentation
74 84
75 Fill in the segmentations or draw a line between intersecting segments. 85 Fill in the segmentations or draw a line between intersecting segments.
  86 +
76 87
77 * **file:** gui/drawsegmentation.cpp 88 * **file:** gui/drawsegmentation.cpp
78 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md) 89 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md)
79 -* **author:** Austin Blanton 90 +* **author(s):** [Austin Blanton][imaus10]
80 * **properties:** None 91 * **properties:** None
81 92
82 93
@@ -86,9 +97,12 @@ Fill in the segmentations or draw a line between intersecting segments. @@ -86,9 +97,12 @@ Fill in the segmentations or draw a line between intersecting segments.
86 97
87 Renders metadata onto the image. 98 Renders metadata onto the image.
88 99
  100 +The inPlace argument controls whether or not the image is cloned before the metadata is drawn.
  101 +
  102 +
89 * **file:** gui/draw.cpp 103 * **file:** gui/draw.cpp
90 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md) 104 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md)
91 -* **author:** Josh Klontz 105 +* **author(s):** [Josh Klontz][jklontz]
92 * **properties:** None 106 * **properties:** None
93 107
94 108
@@ -97,10 +111,11 @@ Renders metadata onto the image. @@ -97,10 +111,11 @@ Renders metadata onto the image.
97 # ElicitTransform 111 # ElicitTransform
98 112
99 Elicits metadata for templates in a pretty GUI 113 Elicits metadata for templates in a pretty GUI
  114 +
100 115
101 * **file:** gui/show.cpp 116 * **file:** gui/show.cpp
102 * **inherits:** [ShowTransform](#showtransform) 117 * **inherits:** [ShowTransform](#showtransform)
103 -* **author:** Scott Klum 118 +* **author(s):** [Scott Klum][sklum]
104 * **properties:** None 119 * **properties:** None
105 120
106 121
@@ -109,10 +124,12 @@ Elicits metadata for templates in a pretty GUI @@ -109,10 +124,12 @@ Elicits metadata for templates in a pretty GUI
109 # FPSCalc 124 # FPSCalc
110 125
111 Calculates the average FPS of projects going through this transform, stores the result in AvgFPS 126 Calculates the average FPS of projects going through this transform, stores the result in AvgFPS
  127 +Reports an average FPS from the initialization of this transform onwards.
  128 +
112 129
113 * **file:** gui/show.cpp 130 * **file:** gui/show.cpp
114 * **inherits:** [TimeVaryingTransform](../cpp_api/timevaryingtransform/timevaryingtransform.md) 131 * **inherits:** [TimeVaryingTransform](../cpp_api/timevaryingtransform/timevaryingtransform.md)
115 -* **author:** Charles Otto 132 +* **author(s):** [Charles Otto][caotto]
116 * **properties:** None 133 * **properties:** None
117 134
118 135
@@ -121,10 +138,24 @@ Calculates the average FPS of projects going through this transform, stores the @@ -121,10 +138,24 @@ Calculates the average FPS of projects going through this transform, stores the
121 # FPSLimit 138 # FPSLimit
122 139
123 Limits the frequency of projects going through this transform to the input targetFPS 140 Limits the frequency of projects going through this transform to the input targetFPS
  141 +
124 142
125 * **file:** gui/show.cpp 143 * **file:** gui/show.cpp
126 * **inherits:** [TimeVaryingTransform](../cpp_api/timevaryingtransform/timevaryingtransform.md) 144 * **inherits:** [TimeVaryingTransform](../cpp_api/timevaryingtransform/timevaryingtransform.md)
127 -* **author:** Charles Otto 145 +* **author(s):** [Charles Otto][caotto]
  146 +* **properties:** None
  147 +
  148 +
  149 +---
  150 +
  151 +# FilterTransform
  152 +
  153 +DOCUMENT ME
  154 +
  155 +
  156 +* **file:** gui/show.cpp
  157 +* **inherits:** [ShowTransform](#showtransform)
  158 +* **author(s):** [Unknown][unknown]
128 * **properties:** None 159 * **properties:** None
129 160
130 161
@@ -133,10 +164,13 @@ Limits the frequency of projects going through this transform to the input targe @@ -133,10 +164,13 @@ Limits the frequency of projects going through this transform to the input targe
133 # ManualRectsTransform 164 # ManualRectsTransform
134 165
135 Manual select rectangular regions on an image. 166 Manual select rectangular regions on an image.
  167 +Stores marked rectangles as anonymous rectangles, or if a set of labels is provided, prompt the user
  168 +to select one of those labels after drawing each rectangle.
  169 +
136 170
137 * **file:** gui/show.cpp 171 * **file:** gui/show.cpp
138 * **inherits:** [ShowTransform](#showtransform) 172 * **inherits:** [ShowTransform](#showtransform)
139 -* **author:** Charles Otto 173 +* **author(s):** [Charles Otto][caotto]
140 * **properties:** None 174 * **properties:** None
141 175
142 176
@@ -145,10 +179,11 @@ Manual select rectangular regions on an image. @@ -145,10 +179,11 @@ Manual select rectangular regions on an image.
145 # ManualTransform 179 # ManualTransform
146 180
147 Manual selection of landmark locations 181 Manual selection of landmark locations
  182 +
148 183
149 * **file:** gui/show.cpp 184 * **file:** gui/show.cpp
150 * **inherits:** [ShowTransform](#showtransform) 185 * **inherits:** [ShowTransform](#showtransform)
151 -* **author:** Scott Klum 186 +* **author(s):** [Scott Klum][sklum]
152 * **properties:** None 187 * **properties:** None
153 188
154 189
@@ -157,10 +192,11 @@ Manual selection of landmark locations @@ -157,10 +192,11 @@ Manual selection of landmark locations
157 # ShowTrainingTransform 192 # ShowTrainingTransform
158 193
159 Show the training data 194 Show the training data
  195 +
160 196
161 * **file:** gui/show.cpp 197 * **file:** gui/show.cpp
162 * **inherits:** [Transform](../cpp_api/transform/transform.md) 198 * **inherits:** [Transform](../cpp_api/transform/transform.md)
163 -* **author:** Josh Klontz 199 +* **author(s):** [Josh Klontz][jklontz]
164 * **properties:** None 200 * **properties:** None
165 201
166 202
@@ -170,9 +206,12 @@ Show the training data @@ -170,9 +206,12 @@ Show the training data
170 206
171 Displays templates in a GUI pop-up window using QT. 207 Displays templates in a GUI pop-up window using QT.
172 208
  209 +Can be used with parallelism enabled, although it is considered TimeVarying.
  210 +
  211 +
173 * **file:** gui/show.cpp 212 * **file:** gui/show.cpp
174 * **inherits:** [TimeVaryingTransform](../cpp_api/timevaryingtransform/timevaryingtransform.md) 213 * **inherits:** [TimeVaryingTransform](../cpp_api/timevaryingtransform/timevaryingtransform.md)
175 -* **author:** Charles Otto 214 +* **author(s):** [Charles Otto][caotto]
176 * **properties:** None 215 * **properties:** None
177 216
178 217
@@ -181,10 +220,11 @@ Displays templates in a GUI pop-up window using QT. @@ -181,10 +220,11 @@ Displays templates in a GUI pop-up window using QT.
181 # SurveyTransform 220 # SurveyTransform
182 221
183 Display an image, and asks a yes/no question about it 222 Display an image, and asks a yes/no question about it
  223 +
184 224
185 * **file:** gui/show.cpp 225 * **file:** gui/show.cpp
186 * **inherits:** [ShowTransform](#showtransform) 226 * **inherits:** [ShowTransform](#showtransform)
187 -* **author:** Charles Otto 227 +* **author(s):** [Charles Otto][caotto]
188 * **properties:** None 228 * **properties:** None
189 229
190 230
docs/docs/api_docs/plugins/imgproc.md
1 # AbsDiffTransform 1 # AbsDiffTransform
2 2
3 Take the absolute difference of two matrices. 3 Take the absolute difference of two matrices.
  4 +
4 5
5 * **file:** imgproc/absdiff.cpp 6 * **file:** imgproc/absdiff.cpp
6 * **inherits:** [UntrainableMetaTransform](../cpp_api/untrainablemetatransform/untrainablemetatransform.md) 7 * **inherits:** [UntrainableMetaTransform](../cpp_api/untrainablemetatransform/untrainablemetatransform.md)
7 -* **author:** Josh Klontz 8 +* **author(s):** [Josh Klontz][jklontz]
8 * **properties:** None 9 * **properties:** None
9 10
10 11
@@ -13,10 +14,11 @@ Take the absolute difference of two matrices. @@ -13,10 +14,11 @@ Take the absolute difference of two matrices.
13 # AbsTransform 14 # AbsTransform
14 15
15 Computes the absolute value of each element. 16 Computes the absolute value of each element.
  17 +
16 18
17 * **file:** imgproc/abs.cpp 19 * **file:** imgproc/abs.cpp
18 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md) 20 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md)
19 -* **author:** Josh Klontz 21 +* **author(s):** [Josh Klontz][jklontz]
20 * **properties:** None 22 * **properties:** None
21 23
22 24
@@ -25,10 +27,12 @@ Computes the absolute value of each element. @@ -25,10 +27,12 @@ Computes the absolute value of each element.
25 # AdaptiveThresholdTransform 27 # AdaptiveThresholdTransform
26 28
27 Wraps OpenCV's adaptive thresholding. 29 Wraps OpenCV's adaptive thresholding.
  30 +
28 31
29 * **file:** imgproc/adaptivethreshold.cpp 32 * **file:** imgproc/adaptivethreshold.cpp
30 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md) 33 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md)
31 -* **author:** Scott Klum 34 +* **author(s):** [Scott Klum][sklum]
  35 +* **see:** [http://docs.opencv.org/modules/imgproc/doc/miscellaneous_transformations.html](http://docs.opencv.org/modules/imgproc/doc/miscellaneous_transformations.html)
32 * **properties:** None 36 * **properties:** None
33 37
34 38
@@ -37,10 +41,11 @@ Wraps OpenCV&#39;s adaptive thresholding. @@ -37,10 +41,11 @@ Wraps OpenCV&#39;s adaptive thresholding.
37 # AffineTransform 41 # AffineTransform
38 42
39 Performs a two or three point registration. 43 Performs a two or three point registration.
  44 +
40 45
41 * **file:** imgproc/affine.cpp 46 * **file:** imgproc/affine.cpp
42 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md) 47 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md)
43 -* **author:** Josh Klontz 48 +* **author(s):** [Josh Klontz][jklontz]
44 * **properties:** None 49 * **properties:** None
45 50
46 51
@@ -49,10 +54,11 @@ Performs a two or three point registration. @@ -49,10 +54,11 @@ Performs a two or three point registration.
49 # AndTransform 54 # AndTransform
50 55
51 Logical AND of two matrices. 56 Logical AND of two matrices.
  57 +
52 58
53 * **file:** imgproc/and.cpp 59 * **file:** imgproc/and.cpp
54 * **inherits:** [UntrainableMetaTransform](../cpp_api/untrainablemetatransform/untrainablemetatransform.md) 60 * **inherits:** [UntrainableMetaTransform](../cpp_api/untrainablemetatransform/untrainablemetatransform.md)
55 -* **author:** Josh Klontz 61 +* **author(s):** [Josh Klontz][jklontz]
56 * **properties:** None 62 * **properties:** None
57 63
58 64
@@ -61,10 +67,11 @@ Logical AND of two matrices. @@ -61,10 +67,11 @@ Logical AND of two matrices.
61 # ApplyMaskTransform 67 # ApplyMaskTransform
62 68
63 Applies a mask from the metadata. 69 Applies a mask from the metadata.
  70 +
64 71
65 * **file:** imgproc/applymask.cpp 72 * **file:** imgproc/applymask.cpp
66 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md) 73 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md)
67 -* **author:** Austin Blanton 74 +* **author(s):** [Austin Blanton][imaus10]
68 * **properties:** None 75 * **properties:** None
69 76
70 77
@@ -73,10 +80,11 @@ Applies a mask from the metadata. @@ -73,10 +80,11 @@ Applies a mask from the metadata.
73 # BayesianQuantizationTransform 80 # BayesianQuantizationTransform
74 81
75 Quantize into a space where L1 distance approximates log-likelihood. 82 Quantize into a space where L1 distance approximates log-likelihood.
  83 +
76 84
77 * **file:** imgproc/bayesianquantization.cpp 85 * **file:** imgproc/bayesianquantization.cpp
78 * **inherits:** [Transform](../cpp_api/transform/transform.md) 86 * **inherits:** [Transform](../cpp_api/transform/transform.md)
79 -* **author:** Josh Klontz 87 +* **author(s):** [Josh Klontz][jklontz]
80 * **properties:** None 88 * **properties:** None
81 89
82 90
@@ -85,10 +93,11 @@ Quantize into a space where L1 distance approximates log-likelihood. @@ -85,10 +93,11 @@ Quantize into a space where L1 distance approximates log-likelihood.
85 # BinarizeTransform 93 # BinarizeTransform
86 94
87 Approximate floats as signed bit. 95 Approximate floats as signed bit.
  96 +
88 97
89 * **file:** imgproc/binarize.cpp 98 * **file:** imgproc/binarize.cpp
90 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md) 99 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md)
91 -* **author:** Josh Klontz 100 +* **author(s):** [Josh Klontz][jklontz]
92 * **properties:** None 101 * **properties:** None
93 102
94 103
@@ -97,10 +106,11 @@ Approximate floats as signed bit. @@ -97,10 +106,11 @@ Approximate floats as signed bit.
97 # BlendTransform 106 # BlendTransform
98 107
99 Alpha-blend two matrices 108 Alpha-blend two matrices
  109 +
100 110
101 * **file:** imgproc/blend.cpp 111 * **file:** imgproc/blend.cpp
102 * **inherits:** [UntrainableMetaTransform](../cpp_api/untrainablemetatransform/untrainablemetatransform.md) 112 * **inherits:** [UntrainableMetaTransform](../cpp_api/untrainablemetatransform/untrainablemetatransform.md)
103 -* **author:** Josh Klontz 113 +* **author(s):** [Josh Klontz][jklontz]
104 * **properties:** None 114 * **properties:** None
105 115
106 116
@@ -109,10 +119,11 @@ Alpha-blend two matrices @@ -109,10 +119,11 @@ Alpha-blend two matrices
109 # BlurTransform 119 # BlurTransform
110 120
111 Gaussian blur 121 Gaussian blur
  122 +
112 123
113 * **file:** imgproc/blur.cpp 124 * **file:** imgproc/blur.cpp
114 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md) 125 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md)
115 -* **author:** Josh Klontz 126 +* **author(s):** [Josh Klontz][jklontz]
116 * **properties:** None 127 * **properties:** None
117 128
118 129
@@ -120,11 +131,12 @@ Gaussian blur @@ -120,11 +131,12 @@ Gaussian blur
120 131
121 # BuildScalesTransform 132 # BuildScalesTransform
122 133
123 -Document me 134 +DOCUMENT ME
  135 +
124 136
125 * **file:** imgproc/multiscale.cpp 137 * **file:** imgproc/multiscale.cpp
126 * **inherits:** [Transform](../cpp_api/transform/transform.md) 138 * **inherits:** [Transform](../cpp_api/transform/transform.md)
127 -* **author:** Austin Blanton 139 +* **author(s):** [Austin Blanton][imaus10]
128 * **properties:** None 140 * **properties:** None
129 141
130 142
@@ -133,10 +145,11 @@ Document me @@ -133,10 +145,11 @@ Document me
133 # ByRowTransform 145 # ByRowTransform
134 146
135 Turns each row into its own matrix. 147 Turns each row into its own matrix.
  148 +
136 149
137 * **file:** imgproc/byrow.cpp 150 * **file:** imgproc/byrow.cpp
138 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md) 151 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md)
139 -* **author:** Josh Klontz 152 +* **author(s):** [Josh Klontz][jklontz]
140 * **properties:** None 153 * **properties:** None
141 154
142 155
@@ -144,11 +157,13 @@ Turns each row into its own matrix. @@ -144,11 +157,13 @@ Turns each row into its own matrix.
144 157
145 # CannyTransform 158 # CannyTransform
146 159
147 -Warpper to OpenCV Canny edge detector 160 +Wrapper to OpenCV Canny edge detector
  161 +
148 162
149 * **file:** imgproc/canny.cpp 163 * **file:** imgproc/canny.cpp
150 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md) 164 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md)
151 -* **author:** Scott Klum 165 +* **author(s):** [Scott Klum][sklum]
  166 +* **see:** [http://docs.opencv.org/doc/tutorials/imgproc/imgtrans/canny_detector/canny_detector.html](http://docs.opencv.org/doc/tutorials/imgproc/imgtrans/canny_detector/canny_detector.html)
152 * **properties:** None 167 * **properties:** None
153 168
154 169
@@ -157,10 +172,12 @@ Warpper to OpenCV Canny edge detector @@ -157,10 +172,12 @@ Warpper to OpenCV Canny edge detector
157 # CatColsTransform 172 # CatColsTransform
158 173
159 Concatenates all input matrices by column into a single matrix. 174 Concatenates all input matrices by column into a single matrix.
  175 +Use after a fork to concatenate two feature matrices by column.
  176 +
160 177
161 * **file:** imgproc/catcols.cpp 178 * **file:** imgproc/catcols.cpp
162 * **inherits:** [UntrainableMetaTransform](../cpp_api/untrainablemetatransform/untrainablemetatransform.md) 179 * **inherits:** [UntrainableMetaTransform](../cpp_api/untrainablemetatransform/untrainablemetatransform.md)
163 -* **author:** Austin Blanton 180 +* **author(s):** [Austin Blanton][imaus10]
164 * **properties:** None 181 * **properties:** None
165 182
166 183
@@ -169,10 +186,12 @@ Concatenates all input matrices by column into a single matrix. @@ -169,10 +186,12 @@ Concatenates all input matrices by column into a single matrix.
169 # CatRowsTransform 186 # CatRowsTransform
170 187
171 Concatenates all input matrices by row into a single matrix. 188 Concatenates all input matrices by row into a single matrix.
  189 +All matricies must have the same column counts.
  190 +
172 191
173 * **file:** imgproc/catrows.cpp 192 * **file:** imgproc/catrows.cpp
174 * **inherits:** [UntrainableMetaTransform](../cpp_api/untrainablemetatransform/untrainablemetatransform.md) 193 * **inherits:** [UntrainableMetaTransform](../cpp_api/untrainablemetatransform/untrainablemetatransform.md)
175 -* **author:** Josh Klontz 194 +* **author(s):** [Josh Klontz][jklontz]
176 * **properties:** None 195 * **properties:** None
177 196
178 197
@@ -181,10 +200,11 @@ Concatenates all input matrices by row into a single matrix. @@ -181,10 +200,11 @@ Concatenates all input matrices by row into a single matrix.
181 # CatTransform 200 # CatTransform
182 201
183 Concatenates all input matrices into a single matrix. 202 Concatenates all input matrices into a single matrix.
  203 +
184 204
185 * **file:** imgproc/cat.cpp 205 * **file:** imgproc/cat.cpp
186 * **inherits:** [UntrainableMetaTransform](../cpp_api/untrainablemetatransform/untrainablemetatransform.md) 206 * **inherits:** [UntrainableMetaTransform](../cpp_api/untrainablemetatransform/untrainablemetatransform.md)
187 -* **author:** Josh Klontz 207 +* **author(s):** [Josh Klontz][jklontz]
188 * **properties:** None 208 * **properties:** None
189 209
190 210
@@ -193,10 +213,11 @@ Concatenates all input matrices into a single matrix. @@ -193,10 +213,11 @@ Concatenates all input matrices into a single matrix.
193 # CenterTransform 213 # CenterTransform
194 214
195 Normalize each dimension based on training data. 215 Normalize each dimension based on training data.
  216 +
196 217
197 * **file:** imgproc/center.cpp 218 * **file:** imgproc/center.cpp
198 * **inherits:** [Transform](../cpp_api/transform/transform.md) 219 * **inherits:** [Transform](../cpp_api/transform/transform.md)
199 -* **author:** Josh Klontz 220 +* **author(s):** [Josh Klontz][jklontz]
200 * **properties:** None 221 * **properties:** None
201 222
202 223
@@ -204,11 +225,18 @@ Normalize each dimension based on training data. @@ -204,11 +225,18 @@ Normalize each dimension based on training data.
204 225
205 # ContrastEqTransform 226 # ContrastEqTransform
206 227
207 -Xiaoyang Tan; Triggs, B.; 228 +Perform contrast equalization
  229 +
208 230
209 * **file:** imgproc/contrasteq.cpp 231 * **file:** imgproc/contrasteq.cpp
210 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md) 232 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md)
211 -* **author:** Josh Klontz 233 +* **author(s):** [Josh Klontz][jklontz]
  234 +* **read:**
  235 +
  236 + 1. *Xiaoyang Tan; Triggs, B.;*
  237 + **"Enhanced Local Texture Feature Sets for Face Recognition Under Difficult Lighting Conditions,"**
  238 + Image Processing, IEEE Transactions on , vol.19, no.6, pp.1635-1650, June 2010
  239 +
212 * **properties:** None 240 * **properties:** None
213 241
214 242
@@ -217,10 +245,11 @@ Xiaoyang Tan; Triggs, B.; @@ -217,10 +245,11 @@ Xiaoyang Tan; Triggs, B.;
217 # CropBlackTransform 245 # CropBlackTransform
218 246
219 Crop out black borders 247 Crop out black borders
  248 +
220 249
221 * **file:** imgproc/cropblack.cpp 250 * **file:** imgproc/cropblack.cpp
222 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md) 251 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md)
223 -* **author:** Josh Klontz 252 +* **author(s):** [Josh Klontz][jklontz]
224 * **properties:** None 253 * **properties:** None
225 254
226 255
@@ -229,10 +258,11 @@ Crop out black borders @@ -229,10 +258,11 @@ Crop out black borders
229 # CropFromMaskTransform 258 # CropFromMaskTransform
230 259
231 Crops image based on mask metadata 260 Crops image based on mask metadata
  261 +
232 262
233 * **file:** imgproc/cropfrommask.cpp 263 * **file:** imgproc/cropfrommask.cpp
234 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md) 264 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md)
235 -* **author:** Brendan Klare 265 +* **author(s):** [Brendan Klare][bklare]
236 * **properties:** None 266 * **properties:** None
237 267
238 268
@@ -241,10 +271,11 @@ Crops image based on mask metadata @@ -241,10 +271,11 @@ Crops image based on mask metadata
241 # CropSquareTransform 271 # CropSquareTransform
242 272
243 Trim the image so the width and the height are the same size. 273 Trim the image so the width and the height are the same size.
  274 +
244 275
245 * **file:** imgproc/cropsquare.cpp 276 * **file:** imgproc/cropsquare.cpp
246 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md) 277 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md)
247 -* **author:** Josh Klontz 278 +* **author(s):** [Josh Klontz][jklontz]
248 * **properties:** None 279 * **properties:** None
249 280
250 281
@@ -253,10 +284,11 @@ Trim the image so the width and the height are the same size. @@ -253,10 +284,11 @@ Trim the image so the width and the height are the same size.
253 # CropTransform 284 # CropTransform
254 285
255 Crops about the specified region of interest. 286 Crops about the specified region of interest.
  287 +
256 288
257 * **file:** imgproc/crop.cpp 289 * **file:** imgproc/crop.cpp
258 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md) 290 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md)
259 -* **author:** Josh Klontz 291 +* **author(s):** [Josh Klontz][jklontz]
260 * **properties:** None 292 * **properties:** None
261 293
262 294
@@ -265,10 +297,12 @@ Crops about the specified region of interest. @@ -265,10 +297,12 @@ Crops about the specified region of interest.
265 # CryptographicHashTransform 297 # CryptographicHashTransform
266 298
267 Wraps QCryptographicHash 299 Wraps QCryptographicHash
  300 +
268 301
269 * **file:** imgproc/cryptographichash.cpp 302 * **file:** imgproc/cryptographichash.cpp
270 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md) 303 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md)
271 -* **author:** Josh Klontz 304 +* **author(s):** [Josh Klontz][jklontz]
  305 +* **see:** [http://doc.qt.io/qt-5/qcryptographichash.html](http://doc.qt.io/qt-5/qcryptographichash.html)
272 * **properties:** None 306 * **properties:** None
273 307
274 308
@@ -277,10 +311,11 @@ Wraps QCryptographicHash @@ -277,10 +311,11 @@ Wraps QCryptographicHash
277 # CvtFloatTransform 311 # CvtFloatTransform
278 312
279 Convert to floating point format. 313 Convert to floating point format.
  314 +
280 315
281 * **file:** imgproc/cvtfloat.cpp 316 * **file:** imgproc/cvtfloat.cpp
282 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md) 317 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md)
283 -* **author:** Josh Klontz 318 +* **author(s):** [Josh Klontz][jklontz]
284 * **properties:** None 319 * **properties:** None
285 320
286 321
@@ -289,10 +324,11 @@ Convert to floating point format. @@ -289,10 +324,11 @@ Convert to floating point format.
289 # CvtTransform 324 # CvtTransform
290 325
291 Colorspace conversion. 326 Colorspace conversion.
  327 +
292 328
293 * **file:** imgproc/cvt.cpp 329 * **file:** imgproc/cvt.cpp
294 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md) 330 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md)
295 -* **author:** Josh Klontz 331 +* **author(s):** [Josh Klontz][jklontz]
296 * **properties:** None 332 * **properties:** None
297 333
298 334
@@ -301,10 +337,11 @@ Colorspace conversion. @@ -301,10 +337,11 @@ Colorspace conversion.
301 # CvtUCharTransform 337 # CvtUCharTransform
302 338
303 Convert to uchar format 339 Convert to uchar format
  340 +
304 341
305 * **file:** imgproc/cvtuchar.cpp 342 * **file:** imgproc/cvtuchar.cpp
306 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md) 343 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md)
307 -* **author:** Josh Klontz 344 +* **author(s):** [Josh Klontz][jklontz]
308 * **properties:** None 345 * **properties:** None
309 346
310 347
@@ -313,10 +350,11 @@ Convert to uchar format @@ -313,10 +350,11 @@ Convert to uchar format
313 # DiscardAlphaTransform 350 # DiscardAlphaTransform
314 351
315 Drop the alpha channel (if exists). 352 Drop the alpha channel (if exists).
  353 +
316 354
317 * **file:** imgproc/discardalpha.cpp 355 * **file:** imgproc/discardalpha.cpp
318 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md) 356 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md)
319 -* **author:** Austin Blanton 357 +* **author(s):** [Austin Blanton][imaus10]
320 * **properties:** None 358 * **properties:** None
321 359
322 360
@@ -324,11 +362,12 @@ Drop the alpha channel (if exists). @@ -324,11 +362,12 @@ Drop the alpha channel (if exists).
324 362
325 # DivTransform 363 # DivTransform
326 364
327 -Enforce a multiple of 365 +Enforce a multiple of n columns.
  366 +
328 367
329 * **file:** imgproc/div.cpp 368 * **file:** imgproc/div.cpp
330 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md) 369 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md)
331 -* **author:** Josh Klontz 370 +* **author(s):** [Josh Klontz][jklontz]
332 * **properties:** None 371 * **properties:** None
333 372
334 373
@@ -337,10 +376,11 @@ Enforce a multiple of @@ -337,10 +376,11 @@ Enforce a multiple of
337 # DoGTransform 376 # DoGTransform
338 377
339 Difference of gaussians 378 Difference of gaussians
  379 +
340 380
341 * **file:** imgproc/dog.cpp 381 * **file:** imgproc/dog.cpp
342 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md) 382 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md)
343 -* **author:** Josh Klontz 383 +* **author(s):** [Josh Klontz][jklontz]
344 * **properties:** None 384 * **properties:** None
345 385
346 386
@@ -349,10 +389,11 @@ Difference of gaussians @@ -349,10 +389,11 @@ Difference of gaussians
349 # DownsampleTransform 389 # DownsampleTransform
350 390
351 Downsample the rows and columns of a matrix. 391 Downsample the rows and columns of a matrix.
  392 +
352 393
353 * **file:** imgproc/downsample.cpp 394 * **file:** imgproc/downsample.cpp
354 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md) 395 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md)
355 -* **author:** Lacey Best-Rowden 396 +* **author(s):** [Lacey Best-Rowden][lbestrowden]
356 * **properties:** None 397 * **properties:** None
357 398
358 399
@@ -360,11 +401,12 @@ Downsample the rows and columns of a matrix. @@ -360,11 +401,12 @@ Downsample the rows and columns of a matrix.
360 401
361 # DupTransform 402 # DupTransform
362 403
363 -Duplicates the template data. 404 +Duplicates the [Template](../cpp_api/template/template.md) data.
  405 +
364 406
365 * **file:** imgproc/dup.cpp 407 * **file:** imgproc/dup.cpp
366 * **inherits:** [UntrainableMetaTransform](../cpp_api/untrainablemetatransform/untrainablemetatransform.md) 408 * **inherits:** [UntrainableMetaTransform](../cpp_api/untrainablemetatransform/untrainablemetatransform.md)
367 -* **author:** Josh Klontz 409 +* **author(s):** [Josh Klontz][jklontz]
368 * **properties:** None 410 * **properties:** None
369 411
370 412
@@ -373,10 +415,11 @@ Duplicates the template data. @@ -373,10 +415,11 @@ Duplicates the template data.
373 # EnsureChannelsTransform 415 # EnsureChannelsTransform
374 416
375 Enforce the matrix has a certain number of channels by adding or removing channels. 417 Enforce the matrix has a certain number of channels by adding or removing channels.
  418 +
376 419
377 * **file:** imgproc/ensurechannels.cpp 420 * **file:** imgproc/ensurechannels.cpp
378 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md) 421 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md)
379 -* **author:** Josh Klontz 422 +* **author(s):** [Josh Klontz][jklontz]
380 * **properties:** None 423 * **properties:** None
381 424
382 425
@@ -385,10 +428,11 @@ Enforce the matrix has a certain number of channels by adding or removing channe @@ -385,10 +428,11 @@ Enforce the matrix has a certain number of channels by adding or removing channe
385 # EqualizeHistTransform 428 # EqualizeHistTransform
386 429
387 Histogram equalization 430 Histogram equalization
  431 +
388 432
389 * **file:** imgproc/equalizehist.cpp 433 * **file:** imgproc/equalizehist.cpp
390 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md) 434 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md)
391 -* **author:** Josh Klontz 435 +* **author(s):** [Josh Klontz][jklontz]
392 * **properties:** None 436 * **properties:** None
393 437
394 438
@@ -397,10 +441,11 @@ Histogram equalization @@ -397,10 +441,11 @@ Histogram equalization
397 # FlipTransform 441 # FlipTransform
398 442
399 Flips the image about an axis. 443 Flips the image about an axis.
  444 +
400 445
401 * **file:** imgproc/flip.cpp 446 * **file:** imgproc/flip.cpp
402 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md) 447 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md)
403 -* **author:** Josh Klontz 448 +* **author(s):** [Josh Klontz][jklontz]
404 * **properties:** None 449 * **properties:** None
405 450
406 451
@@ -409,10 +454,11 @@ Flips the image about an axis. @@ -409,10 +454,11 @@ Flips the image about an axis.
409 # FloodTransform 454 # FloodTransform
410 455
411 Fill black pixels with the specified color. 456 Fill black pixels with the specified color.
  457 +
412 458
413 * **file:** imgproc/flood.cpp 459 * **file:** imgproc/flood.cpp
414 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md) 460 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md)
415 -* **author:** Josh Klontz 461 +* **author(s):** [Josh Klontz][jklontz]
416 * **properties:** None 462 * **properties:** None
417 463
418 464
@@ -421,10 +467,11 @@ Fill black pixels with the specified color. @@ -421,10 +467,11 @@ Fill black pixels with the specified color.
421 # GaborJetTransform 467 # GaborJetTransform
422 468
423 A vector of gabor wavelets applied at a point. 469 A vector of gabor wavelets applied at a point.
  470 +
424 471
425 * **file:** imgproc/gabor.cpp 472 * **file:** imgproc/gabor.cpp
426 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md) 473 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md)
427 -* **author:** Josh Klontz 474 +* **author(s):** [Josh Klontz][jklontz]
428 * **properties:** None 475 * **properties:** None
429 476
430 477
@@ -432,11 +479,13 @@ A vector of gabor wavelets applied at a point. @@ -432,11 +479,13 @@ A vector of gabor wavelets applied at a point.
432 479
433 # GaborTransform 480 # GaborTransform
434 481
435 -http://en.wikipedia.org/wiki/Gabor_filter 482 +Implements a Gabor Filter
  483 +
436 484
437 * **file:** imgproc/gabor.cpp 485 * **file:** imgproc/gabor.cpp
438 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md) 486 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md)
439 -* **author:** Josh Klontz 487 +* **author(s):** [Josh Klontz][jklontz]
  488 +* **see:** [http://en.wikipedia.org/wiki/Gabor_filter](http://en.wikipedia.org/wiki/Gabor_filter)
440 * **properties:** None 489 * **properties:** None
441 490
442 491
@@ -445,10 +494,11 @@ http://en.wikipedia.org/wiki/Gabor_filter @@ -445,10 +494,11 @@ http://en.wikipedia.org/wiki/Gabor_filter
445 # GammaTransform 494 # GammaTransform
446 495
447 Gamma correction 496 Gamma correction
  497 +
448 498
449 * **file:** imgproc/gamma.cpp 499 * **file:** imgproc/gamma.cpp
450 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md) 500 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md)
451 -* **author:** Josh Klontz 501 +* **author(s):** [Josh Klontz][jklontz]
452 * **properties:** None 502 * **properties:** None
453 503
454 504
@@ -457,10 +507,11 @@ Gamma correction @@ -457,10 +507,11 @@ Gamma correction
457 # GradientMaskTransform 507 # GradientMaskTransform
458 508
459 Masks image according to pixel change. 509 Masks image according to pixel change.
  510 +
460 511
461 * **file:** imgproc/gradientmask.cpp 512 * **file:** imgproc/gradientmask.cpp
462 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md) 513 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md)
463 -* **author:** Josh Klontz 514 +* **author(s):** [Josh Klontz][jklontz]
464 * **properties:** None 515 * **properties:** None
465 516
466 517
@@ -469,10 +520,11 @@ Masks image according to pixel change. @@ -469,10 +520,11 @@ Masks image according to pixel change.
469 # GradientTransform 520 # GradientTransform
470 521
471 Computes magnitude and/or angle of image. 522 Computes magnitude and/or angle of image.
  523 +
472 524
473 * **file:** imgproc/gradient.cpp 525 * **file:** imgproc/gradient.cpp
474 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md) 526 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md)
475 -* **author:** Josh Klontz 527 +* **author(s):** [Josh Klontz][jklontz]
476 * **properties:** None 528 * **properties:** None
477 529
478 530
@@ -482,9 +534,25 @@ Computes magnitude and/or angle of image. @@ -482,9 +534,25 @@ Computes magnitude and/or angle of image.
482 534
483 Group all input matrices into a single matrix. 535 Group all input matrices into a single matrix.
484 536
  537 +Similar to CatTransfrom but groups every _size_ adjacent matricies.
  538 +
  539 +
485 * **file:** imgproc/group.cpp 540 * **file:** imgproc/group.cpp
486 * **inherits:** [UntrainableMetaTransform](../cpp_api/untrainablemetatransform/untrainablemetatransform.md) 541 * **inherits:** [UntrainableMetaTransform](../cpp_api/untrainablemetatransform/untrainablemetatransform.md)
487 -* **author:** Josh Klontz 542 +* **author(s):** [Josh Klontz][jklontz]
  543 +* **properties:** None
  544 +
  545 +
  546 +---
  547 +
  548 +# HeatmapTransform
  549 +
  550 +DOCUMENT ME
  551 +
  552 +
  553 +* **file:** imgproc/heatmap.cpp
  554 +* **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md)
  555 +* **author(s):** [Unknown][unknown]
488 * **properties:** None 556 * **properties:** None
489 557
490 558
@@ -493,10 +561,11 @@ Group all input matrices into a single matrix. @@ -493,10 +561,11 @@ Group all input matrices into a single matrix.
493 # HistBinTransform 561 # HistBinTransform
494 562
495 Quantizes the values into bins. 563 Quantizes the values into bins.
  564 +
496 565
497 * **file:** imgproc/histbin.cpp 566 * **file:** imgproc/histbin.cpp
498 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md) 567 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md)
499 -* **author:** Josh Klontz 568 +* **author(s):** [Josh Klontz][jklontz]
500 * **properties:** None 569 * **properties:** None
501 570
502 571
@@ -505,10 +574,11 @@ Quantizes the values into bins. @@ -505,10 +574,11 @@ Quantizes the values into bins.
505 # HistEqQuantizationTransform 574 # HistEqQuantizationTransform
506 575
507 Approximate floats as uchar with different scalings for each dimension. 576 Approximate floats as uchar with different scalings for each dimension.
  577 +
508 578
509 * **file:** imgproc/histeqquantization.cpp 579 * **file:** imgproc/histeqquantization.cpp
510 * **inherits:** [Transform](../cpp_api/transform/transform.md) 580 * **inherits:** [Transform](../cpp_api/transform/transform.md)
511 -* **author:** Josh Klontz 581 +* **author(s):** [Josh Klontz][jklontz]
512 * **properties:** None 582 * **properties:** None
513 583
514 584
@@ -517,10 +587,11 @@ Approximate floats as uchar with different scalings for each dimension. @@ -517,10 +587,11 @@ Approximate floats as uchar with different scalings for each dimension.
517 # HistTransform 587 # HistTransform
518 588
519 Histograms the matrix 589 Histograms the matrix
  590 +
520 591
521 * **file:** imgproc/hist.cpp 592 * **file:** imgproc/hist.cpp
522 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md) 593 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md)
523 -* **author:** Josh Klontz 594 +* **author(s):** [Josh Klontz][jklontz]
524 * **properties:** None 595 * **properties:** None
525 596
526 597
@@ -529,10 +600,12 @@ Histograms the matrix @@ -529,10 +600,12 @@ Histograms the matrix
529 # HoGDescriptorTransform 600 # HoGDescriptorTransform
530 601
531 OpenCV HOGDescriptor wrapper 602 OpenCV HOGDescriptor wrapper
  603 +
532 604
533 * **file:** imgproc/hog.cpp 605 * **file:** imgproc/hog.cpp
534 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md) 606 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md)
535 -* **author:** Austin Blanton 607 +* **author(s):** [Austin Blanton][imaus10]
  608 +* **see:** [http://docs.opencv.org/modules/gpu/doc/object_detection.html](http://docs.opencv.org/modules/gpu/doc/object_detection.html)
536 * **properties:** None 609 * **properties:** None
537 610
538 611
@@ -541,10 +614,12 @@ OpenCV HOGDescriptor wrapper @@ -541,10 +614,12 @@ OpenCV HOGDescriptor wrapper
541 # InpaintTransform 614 # InpaintTransform
542 615
543 Wraps OpenCV inpainting 616 Wraps OpenCV inpainting
  617 +
544 618
545 * **file:** imgproc/inpaint.cpp 619 * **file:** imgproc/inpaint.cpp
546 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md) 620 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md)
547 -* **author:** Josh Klontz 621 +* **author(s):** [Josh Klontz][jklontz]
  622 +* **see:** [http://docs.opencv.org/modules/photo/doc/inpainting.html](http://docs.opencv.org/modules/photo/doc/inpainting.html)
548 * **properties:** None 623 * **properties:** None
549 624
550 625
@@ -553,10 +628,11 @@ Wraps OpenCV inpainting @@ -553,10 +628,11 @@ Wraps OpenCV inpainting
553 # IntegralHistTransform 628 # IntegralHistTransform
554 629
555 An integral histogram 630 An integral histogram
  631 +
556 632
557 * **file:** imgproc/integralhist.cpp 633 * **file:** imgproc/integralhist.cpp
558 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md) 634 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md)
559 -* **author:** Josh Klontz 635 +* **author(s):** [Josh Klontz][jklontz]
560 * **properties:** None 636 * **properties:** None
561 637
562 638
@@ -565,10 +641,11 @@ An integral histogram @@ -565,10 +641,11 @@ An integral histogram
565 # IntegralSamplerTransform 641 # IntegralSamplerTransform
566 642
567 Sliding window feature extraction from a multi-channel integral image. 643 Sliding window feature extraction from a multi-channel integral image.
  644 +
568 645
569 * **file:** imgproc/integralsampler.cpp 646 * **file:** imgproc/integralsampler.cpp
570 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md) 647 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md)
571 -* **author:** Josh Klontz 648 +* **author(s):** [Josh Klontz][jklontz]
572 * **properties:** None 649 * **properties:** None
573 650
574 651
@@ -577,10 +654,12 @@ Sliding window feature extraction from a multi-channel integral image. @@ -577,10 +654,12 @@ Sliding window feature extraction from a multi-channel integral image.
577 # IntegralSlidingWindowTransform 654 # IntegralSlidingWindowTransform
578 655
579 Overloads SlidingWindowTransform for integral images that should be 656 Overloads SlidingWindowTransform for integral images that should be
  657 +sampled at multiple scales.
  658 +
580 659
581 * **file:** imgproc/slidingwindow.cpp 660 * **file:** imgproc/slidingwindow.cpp
582 * **inherits:** [SlidingWindowTransform](#slidingwindowtransform) 661 * **inherits:** [SlidingWindowTransform](#slidingwindowtransform)
583 -* **author:** Josh Klontz 662 +* **author(s):** [Josh Klontz][jklontz]
584 * **properties:** None 663 * **properties:** None
585 664
586 665
@@ -589,10 +668,11 @@ Overloads SlidingWindowTransform for integral images that should be @@ -589,10 +668,11 @@ Overloads SlidingWindowTransform for integral images that should be
589 # IntegralTransform 668 # IntegralTransform
590 669
591 Computes integral image. 670 Computes integral image.
  671 +
592 672
593 * **file:** imgproc/integral.cpp 673 * **file:** imgproc/integral.cpp
594 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md) 674 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md)
595 -* **author:** Josh Klontz 675 +* **author(s):** [Josh Klontz][jklontz]
596 * **properties:** None 676 * **properties:** None
597 677
598 678
@@ -601,10 +681,11 @@ Computes integral image. @@ -601,10 +681,11 @@ Computes integral image.
601 # KernelHashTransform 681 # KernelHashTransform
602 682
603 Kernel hash 683 Kernel hash
  684 +
604 685
605 * **file:** imgproc/kernelhash.cpp 686 * **file:** imgproc/kernelhash.cpp
606 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md) 687 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md)
607 -* **author:** Josh Klontz 688 +* **author(s):** [Josh Klontz][jklontz]
608 * **properties:** None 689 * **properties:** None
609 690
610 691
@@ -613,10 +694,12 @@ Kernel hash @@ -613,10 +694,12 @@ Kernel hash
613 # KeyPointDescriptorTransform 694 # KeyPointDescriptorTransform
614 695
615 Wraps OpenCV Key Point Descriptor 696 Wraps OpenCV Key Point Descriptor
  697 +
616 698
617 * **file:** imgproc/keypointdescriptor.cpp 699 * **file:** imgproc/keypointdescriptor.cpp
618 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md) 700 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md)
619 -* **author:** Josh Klontz 701 +* **author(s):** [Josh Klontz][jklontz]
  702 +* **see:** [http://docs.opencv.org/modules/features2d/doc/common_interfaces_of_feature_detectors.html](http://docs.opencv.org/modules/features2d/doc/common_interfaces_of_feature_detectors.html)
620 * **properties:** None 703 * **properties:** None
621 704
622 705
@@ -624,11 +707,18 @@ Wraps OpenCV Key Point Descriptor @@ -624,11 +707,18 @@ Wraps OpenCV Key Point Descriptor
624 707
625 # LBPTransform 708 # LBPTransform
626 709
627 -Ahonen, T.; Hadid, A.; Pietikainen, M.; 710 +Convert the image into a feature vector using Local Binary Patterns
  711 +
628 712
629 * **file:** imgproc/lbp.cpp 713 * **file:** imgproc/lbp.cpp
630 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md) 714 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md)
631 -* **author:** Josh Klontz 715 +* **author(s):** [Josh Klontz][jklontz]
  716 +* **read:**
  717 +
  718 + 1. *Ahonen, T.; Hadid, A.; Pietikainen, M.;*
  719 + **"Face Description with Local Binary Patterns: Application to Face Recognition"**
  720 + Pattern Analysis and Machine Intelligence, IEEE Transactions, vol.28, no.12, pp.2037-2041, Dec. 2006
  721 +
632 * **properties:** None 722 * **properties:** None
633 723
634 724
@@ -636,11 +726,18 @@ Ahonen, T.; Hadid, A.; Pietikainen, M.; @@ -636,11 +726,18 @@ Ahonen, T.; Hadid, A.; Pietikainen, M.;
636 726
637 # LTPTransform 727 # LTPTransform
638 728
639 -Tan, Xiaoyang, and Bill Triggs. "Enhanced local texture feature sets for face recognition under difficult lighting conditions." Analysis and Modeling of Faces and Gestures. Springer Berlin Heidelberg, 2007. 168-182. 729 +DOCUMENT ME
  730 +
640 731
641 * **file:** imgproc/ltp.cpp 732 * **file:** imgproc/ltp.cpp
642 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md) 733 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md)
643 -* **authors:** Brendan Klare, Josh Klontz 734 +* **author(s):** [Brendan Klare][bklare], [Josh Klontz][jklontz]
  735 +* **read:**
  736 +
  737 + 1. *Tan, Xiaoyang, and Bill Triggs.*
  738 + **"Enhanced local texture feature sets for face recognition under difficult lighting conditions."**
  739 + Analysis and Modeling of Faces and Gestures. Springer Berlin Heidelberg, 2007. 168-182.
  740 +
644 * **properties:** None 741 * **properties:** None
645 742
646 743
@@ -649,10 +746,11 @@ Tan, Xiaoyang, and Bill Triggs. &quot;Enhanced local texture feature sets for face re @@ -649,10 +746,11 @@ Tan, Xiaoyang, and Bill Triggs. &quot;Enhanced local texture feature sets for face re
649 # LargestConvexAreaTransform 746 # LargestConvexAreaTransform
650 747
651 Set the template's label to the area of the largest convex hull. 748 Set the template's label to the area of the largest convex hull.
  749 +
652 750
653 * **file:** imgproc/largestconvexarea.cpp 751 * **file:** imgproc/largestconvexarea.cpp
654 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md) 752 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md)
655 -* **author:** Josh Klontz 753 +* **author(s):** [Josh Klontz][jklontz]
656 * **properties:** None 754 * **properties:** None
657 755
658 756
@@ -661,10 +759,11 @@ Set the template&#39;s label to the area of the largest convex hull. @@ -661,10 +759,11 @@ Set the template&#39;s label to the area of the largest convex hull.
661 # LimitSizeTransform 759 # LimitSizeTransform
662 760
663 Limit the size of the template 761 Limit the size of the template
  762 +
664 763
665 * **file:** imgproc/limitsize.cpp 764 * **file:** imgproc/limitsize.cpp
666 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md) 765 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md)
667 -* **author:** Josh Klontz 766 +* **author(s):** [Josh Klontz][jklontz]
668 * **properties:** None 767 * **properties:** None
669 768
670 769
@@ -672,11 +771,12 @@ Limit the size of the template @@ -672,11 +771,12 @@ Limit the size of the template
672 771
673 # MAddTransform 772 # MAddTransform
674 773
675 -dst = a*src+b 774 +dst = a src+b
  775 +
676 776
677 * **file:** imgproc/madd.cpp 777 * **file:** imgproc/madd.cpp
678 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md) 778 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md)
679 -* **author:** Josh Klontz 779 +* **author(s):** [Josh Klontz][jklontz]
680 * **properties:** None 780 * **properties:** None
681 781
682 782
@@ -685,10 +785,11 @@ dst = a*src+b @@ -685,10 +785,11 @@ dst = a*src+b
685 # MaskTransform 785 # MaskTransform
686 786
687 Applies an eliptical mask 787 Applies an eliptical mask
  788 +
688 789
689 * **file:** imgproc/mask.cpp 790 * **file:** imgproc/mask.cpp
690 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md) 791 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md)
691 -* **author:** Josh Klontz 792 +* **author(s):** [Josh Klontz][jklontz]
692 * **properties:** None 793 * **properties:** None
693 794
694 795
@@ -697,10 +798,11 @@ Applies an eliptical mask @@ -697,10 +798,11 @@ Applies an eliptical mask
697 # MatStatsTransform 798 # MatStatsTransform
698 799
699 Statistics 800 Statistics
  801 +
700 802
701 * **file:** imgproc/matstats.cpp 803 * **file:** imgproc/matstats.cpp
702 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md) 804 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md)
703 -* **author:** Josh Klontz 805 +* **author(s):** [Josh Klontz][jklontz]
704 * **properties:** None 806 * **properties:** None
705 807
706 808
@@ -709,10 +811,11 @@ Statistics @@ -709,10 +811,11 @@ Statistics
709 # MeanFillTransform 811 # MeanFillTransform
710 812
711 Fill 0 pixels with the mean of non-0 pixels. 813 Fill 0 pixels with the mean of non-0 pixels.
  814 +
712 815
713 * **file:** imgproc/meanfill.cpp 816 * **file:** imgproc/meanfill.cpp
714 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md) 817 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md)
715 -* **author:** Josh Klontz 818 +* **author(s):** [Josh Klontz][jklontz]
716 * **properties:** None 819 * **properties:** None
717 820
718 821
@@ -722,9 +825,12 @@ Fill 0 pixels with the mean of non-0 pixels. @@ -722,9 +825,12 @@ Fill 0 pixels with the mean of non-0 pixels.
722 825
723 Computes the mean of a set of templates. 826 Computes the mean of a set of templates.
724 827
  828 +Suitable for visualization only as it sets every projected template to the mean template.
  829 +
  830 +
725 * **file:** imgproc/mean.cpp 831 * **file:** imgproc/mean.cpp
726 * **inherits:** [Transform](../cpp_api/transform/transform.md) 832 * **inherits:** [Transform](../cpp_api/transform/transform.md)
727 -* **author:** Scott Klum 833 +* **author(s):** [Scott Klum][sklum]
728 * **properties:** None 834 * **properties:** None
729 835
730 836
@@ -733,10 +839,12 @@ Computes the mean of a set of templates. @@ -733,10 +839,12 @@ Computes the mean of a set of templates.
733 # MergeTransform 839 # MergeTransform
734 840
735 Wraps OpenCV merge 841 Wraps OpenCV merge
  842 +
736 843
737 * **file:** imgproc/merge.cpp 844 * **file:** imgproc/merge.cpp
738 * **inherits:** [UntrainableMetaTransform](../cpp_api/untrainablemetatransform/untrainablemetatransform.md) 845 * **inherits:** [UntrainableMetaTransform](../cpp_api/untrainablemetatransform/untrainablemetatransform.md)
739 -* **author:** Josh Klontz 846 +* **author(s):** [Josh Klontz][jklontz]
  847 +* **see:** [http://docs.opencv.org/modules/core/doc/operations_on_arrays.html#merge](http://docs.opencv.org/modules/core/doc/operations_on_arrays.html#merge)
740 * **properties:** None 848 * **properties:** None
741 849
742 850
@@ -745,10 +853,11 @@ Wraps OpenCV merge @@ -745,10 +853,11 @@ Wraps OpenCV merge
745 # MorphTransform 853 # MorphTransform
746 854
747 Morphological operator 855 Morphological operator
  856 +
748 857
749 * **file:** imgproc/morph.cpp 858 * **file:** imgproc/morph.cpp
750 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md) 859 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md)
751 -* **author:** Josh Klontz 860 +* **author(s):** [Josh Klontz][jklontz]
752 * **properties:** None 861 * **properties:** None
753 862
754 863
@@ -757,10 +866,12 @@ Morphological operator @@ -757,10 +866,12 @@ Morphological operator
757 # NLMeansDenoisingTransform 866 # NLMeansDenoisingTransform
758 867
759 Wraps OpenCV Non-Local Means Denoising 868 Wraps OpenCV Non-Local Means Denoising
  869 +
760 870
761 * **file:** imgproc/denoising.cpp 871 * **file:** imgproc/denoising.cpp
762 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md) 872 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md)
763 -* **author:** Josh Klontz 873 +* **author(s):** [Josh Klontz][jklontz]
  874 +* **see:** [http://docs.opencv.org/modules/photo/doc/denoising.html](http://docs.opencv.org/modules/photo/doc/denoising.html)
764 * **properties:** None 875 * **properties:** None
765 876
766 877
@@ -769,29 +880,31 @@ Wraps OpenCV Non-Local Means Denoising @@ -769,29 +880,31 @@ Wraps OpenCV Non-Local Means Denoising
769 # NormalizeTransform 880 # NormalizeTransform
770 881
771 Normalize matrix to unit length 882 Normalize matrix to unit length
  883 +
772 884
773 * **file:** imgproc/normalize.cpp 885 * **file:** imgproc/normalize.cpp
774 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md) 886 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md)
775 -* **author:** Josh Klontz 887 +* **author(s):** [Josh Klontz][jklontz]
776 * **properties:** 888 * **properties:**
777 889
778 -Property | Type | Description  
779 ---- | --- | ---  
780 -NormType | enum | Values are NORM_INF, NORM_L1, NORM_L2, NORM_MINMAX  
781 -ByRow | bool | If true normalize each row independently otherwise normalize the entire matrix.  
782 -alpha | int | Lower bound if using NORM_MINMAX. Value to normalize to otherwise.  
783 -beta | int | Upper bound if using NORM_MINMAX. Not used otherwise.  
784 -squareRoot | bool | If true compute the signed square root of the output after normalization. 890 + Property | Type | Description
  891 + --- | --- | ---
  892 + NormType | enum | Values are:<ul><li>NORM_INF</li><li>NORM_L1</li><li>NORM_L2</li><li>NORM_MINMAX</li></ul>
  893 + ByRow | bool | If true normalize each row independently otherwise normalize the entire matrix.
  894 + alpha | int | Lower bound if using NORM_MINMAX. Value to normalize to otherwise.
  895 + beta | int | Upper bound if using NORM_MINMAX. Not used otherwise.
  896 + squareRoot | bool | If true compute the signed square root of the output after normalization.
785 897
786 --- 898 ---
787 899
788 # OrigLinearRegressionTransform 900 # OrigLinearRegressionTransform
789 901
790 Prediction with magic numbers from jmp; must get input as blue;green;red 902 Prediction with magic numbers from jmp; must get input as blue;green;red
  903 +
791 904
792 * **file:** imgproc/origlinearregression.cpp 905 * **file:** imgproc/origlinearregression.cpp
793 * **inherits:** [UntrainableMetaTransform](../cpp_api/untrainablemetatransform/untrainablemetatransform.md) 906 * **inherits:** [UntrainableMetaTransform](../cpp_api/untrainablemetatransform/untrainablemetatransform.md)
794 -* **author:** E. Taborsky 907 +* **author(s):** [E. Taborsky][mmtaborsky]
795 * **properties:** None 908 * **properties:** None
796 909
797 910
@@ -800,10 +913,11 @@ Prediction with magic numbers from jmp; must get input as blue;green;red @@ -800,10 +913,11 @@ Prediction with magic numbers from jmp; must get input as blue;green;red
800 # PackTransform 913 # PackTransform
801 914
802 Compress two uchar into one uchar. 915 Compress two uchar into one uchar.
  916 +
803 917
804 * **file:** imgproc/pack.cpp 918 * **file:** imgproc/pack.cpp
805 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md) 919 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md)
806 -* **author:** Josh Klontz 920 +* **author(s):** [Josh Klontz][jklontz]
807 * **properties:** None 921 * **properties:** None
808 922
809 923
@@ -812,10 +926,11 @@ Compress two uchar into one uchar. @@ -812,10 +926,11 @@ Compress two uchar into one uchar.
812 # PowTransform 926 # PowTransform
813 927
814 Raise each element to the specified power. 928 Raise each element to the specified power.
  929 +
815 930
816 * **file:** imgproc/pow.cpp 931 * **file:** imgproc/pow.cpp
817 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md) 932 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md)
818 -* **author:** Josh Klontz 933 +* **author(s):** [Josh Klontz][jklontz]
819 * **properties:** None 934 * **properties:** None
820 935
821 936
@@ -824,10 +939,17 @@ Raise each element to the specified power. @@ -824,10 +939,17 @@ Raise each element to the specified power.
824 # ProductQuantizationDistance 939 # ProductQuantizationDistance
825 940
826 Distance in a product quantized space 941 Distance in a product quantized space
  942 +
827 943
828 * **file:** imgproc/productquantization.cpp 944 * **file:** imgproc/productquantization.cpp
829 * **inherits:** [UntrainableDistance](../cpp_api/untrainabledistance/untrainabledistance.md) 945 * **inherits:** [UntrainableDistance](../cpp_api/untrainabledistance/untrainabledistance.md)
830 -* **author:** Josh Klontz 946 +* **author(s):** [Josh Klontz][jklontz]
  947 +* **read:**
  948 +
  949 + 1. *Jegou, Herve, Matthijs Douze, and Cordelia Schmid.*
  950 + **"Product quantization for nearest neighbor search."**
  951 + Pattern Analysis and Machine Intelligence, IEEE Transactions on 33.1 (2011): 117-128
  952 +
831 * **properties:** None 953 * **properties:** None
832 954
833 955
@@ -836,10 +958,17 @@ Distance in a product quantized space @@ -836,10 +958,17 @@ Distance in a product quantized space
836 # ProductQuantizationTransform 958 # ProductQuantizationTransform
837 959
838 Product quantization 960 Product quantization
  961 +
839 962
840 * **file:** imgproc/productquantization.cpp 963 * **file:** imgproc/productquantization.cpp
841 * **inherits:** [Transform](../cpp_api/transform/transform.md) 964 * **inherits:** [Transform](../cpp_api/transform/transform.md)
842 -* **author:** Josh Klontz 965 +* **author(s):** [Josh Klontz][jklontz]
  966 +* **read:**
  967 +
  968 + 1. *Jegou, Herve, Matthijs Douze, and Cordelia Schmid.*
  969 + **"Product quantization for nearest neighbor search."**
  970 + Pattern Analysis and Machine Intelligence, IEEE Transactions on 33.1 (2011): 117-128
  971 +
843 * **properties:** None 972 * **properties:** None
844 973
845 974
@@ -848,10 +977,11 @@ Product quantization @@ -848,10 +977,11 @@ Product quantization
848 # QuantizeTransform 977 # QuantizeTransform
849 978
850 Approximate floats as uchar. 979 Approximate floats as uchar.
  980 +
851 981
852 * **file:** imgproc/quantize.cpp 982 * **file:** imgproc/quantize.cpp
853 * **inherits:** [Transform](../cpp_api/transform/transform.md) 983 * **inherits:** [Transform](../cpp_api/transform/transform.md)
854 -* **author:** Josh Klontz 984 +* **author(s):** [Josh Klontz][jklontz]
855 * **properties:** None 985 * **properties:** None
856 986
857 987
@@ -860,10 +990,11 @@ Approximate floats as uchar. @@ -860,10 +990,11 @@ Approximate floats as uchar.
860 # RGTransform 990 # RGTransform
861 991
862 Normalized RG color space. 992 Normalized RG color space.
  993 +
863 994
864 * **file:** imgproc/rg.cpp 995 * **file:** imgproc/rg.cpp
865 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md) 996 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md)
866 -* **author:** Josh Klontz 997 +* **author(s):** [Josh Klontz][jklontz]
867 * **properties:** None 998 * **properties:** None
868 999
869 1000
@@ -872,10 +1003,11 @@ Normalized RG color space. @@ -872,10 +1003,11 @@ Normalized RG color space.
872 # ROIFromPtsTransform 1003 # ROIFromPtsTransform
873 1004
874 Crops the rectangular regions of interest from given points and sizes. 1005 Crops the rectangular regions of interest from given points and sizes.
  1006 +
875 1007
876 * **file:** imgproc/roifrompoints.cpp 1008 * **file:** imgproc/roifrompoints.cpp
877 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md) 1009 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md)
878 -* **author:** Austin Blanton 1010 +* **author(s):** [Austin Blanton][imaus10]
879 * **properties:** None 1011 * **properties:** None
880 1012
881 1013
@@ -884,10 +1016,11 @@ Crops the rectangular regions of interest from given points and sizes. @@ -884,10 +1016,11 @@ Crops the rectangular regions of interest from given points and sizes.
884 # ROITransform 1016 # ROITransform
885 1017
886 Crops the rectangular regions of interest. 1018 Crops the rectangular regions of interest.
  1019 +
887 1020
888 * **file:** imgproc/roi.cpp 1021 * **file:** imgproc/roi.cpp
889 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md) 1022 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md)
890 -* **author:** Josh Klontz 1023 +* **author(s):** [Josh Klontz][jklontz]
891 * **properties:** None 1024 * **properties:** None
892 1025
893 1026
@@ -896,10 +1029,11 @@ Crops the rectangular regions of interest. @@ -896,10 +1029,11 @@ Crops the rectangular regions of interest.
896 # RankTransform 1029 # RankTransform
897 1030
898 Converts each element to its rank-ordered value. 1031 Converts each element to its rank-ordered value.
  1032 +
899 1033
900 * **file:** imgproc/rank.cpp 1034 * **file:** imgproc/rank.cpp
901 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md) 1035 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md)
902 -* **author:** Josh Klontz 1036 +* **author(s):** [Josh Klontz][jklontz]
903 * **properties:** None 1037 * **properties:** None
904 1038
905 1039
@@ -908,10 +1042,11 @@ Converts each element to its rank-ordered value. @@ -908,10 +1042,11 @@ Converts each element to its rank-ordered value.
908 # RectRegionsTransform 1042 # RectRegionsTransform
909 1043
910 Subdivide matrix into rectangular subregions. 1044 Subdivide matrix into rectangular subregions.
  1045 +
911 1046
912 * **file:** imgproc/rectregions.cpp 1047 * **file:** imgproc/rectregions.cpp
913 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md) 1048 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md)
914 -* **author:** Josh Klontz 1049 +* **author(s):** [Josh Klontz][jklontz]
915 * **properties:** None 1050 * **properties:** None
916 1051
917 1052
@@ -919,11 +1054,12 @@ Subdivide matrix into rectangular subregions. @@ -919,11 +1054,12 @@ Subdivide matrix into rectangular subregions.
919 1054
920 # RecursiveIntegralSamplerTransform 1055 # RecursiveIntegralSamplerTransform
921 1056
922 -Construct template in a recursive decent manner. 1057 +Construct [Template](../cpp_api/template/template.md) in a recursive decent manner.
  1058 +
923 1059
924 * **file:** imgproc/recursiveintegralsampler.cpp 1060 * **file:** imgproc/recursiveintegralsampler.cpp
925 * **inherits:** [Transform](../cpp_api/transform/transform.md) 1061 * **inherits:** [Transform](../cpp_api/transform/transform.md)
926 -* **author:** Josh Klontz 1062 +* **author(s):** [Josh Klontz][jklontz]
927 * **properties:** None 1063 * **properties:** None
928 1064
929 1065
@@ -932,10 +1068,11 @@ Construct template in a recursive decent manner. @@ -932,10 +1068,11 @@ Construct template in a recursive decent manner.
932 # RedLinearRegressionTransform 1068 # RedLinearRegressionTransform
933 1069
934 Prediction using only the red wavelength; magic numbers from jmp 1070 Prediction using only the red wavelength; magic numbers from jmp
  1071 +
935 1072
936 * **file:** imgproc/redlinearregression.cpp 1073 * **file:** imgproc/redlinearregression.cpp
937 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md) 1074 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md)
938 -* **author:** E. Taborsky 1075 +* **author(s):** [E. Taborsky][mmtaborsky]
939 * **properties:** None 1076 * **properties:** None
940 1077
941 1078
@@ -943,11 +1080,12 @@ Prediction using only the red wavelength; magic numbers from jmp @@ -943,11 +1080,12 @@ Prediction using only the red wavelength; magic numbers from jmp
943 1080
944 # ReshapeTransform 1081 # ReshapeTransform
945 1082
946 -Reshape the each matrix to the specified number of rows. 1083 +Reshape each matrix to the specified number of rows.
  1084 +
947 1085
948 * **file:** imgproc/reshape.cpp 1086 * **file:** imgproc/reshape.cpp
949 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md) 1087 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md)
950 -* **author:** Josh Klontz 1088 +* **author(s):** [Josh Klontz][jklontz]
951 * **properties:** None 1089 * **properties:** None
952 1090
953 1091
@@ -956,22 +1094,31 @@ Reshape the each matrix to the specified number of rows. @@ -956,22 +1094,31 @@ Reshape the each matrix to the specified number of rows.
956 # ResizeTransform 1094 # ResizeTransform
957 1095
958 Resize the template 1096 Resize the template
  1097 +
959 1098
960 * **file:** imgproc/resize.cpp 1099 * **file:** imgproc/resize.cpp
961 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md) 1100 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md)
962 -* **author:** Josh Klontz  
963 -* **properties:** None 1101 +* **author(s):** [Josh Klontz][jklontz]
  1102 +* **properties:**
964 1103
  1104 + Property | Type | Description
  1105 + --- | --- | ---
  1106 + method | enum | Resize method. Good options are:<ul><li>Area should be used for shrinking an image</li><li>Cubic for slow but accurate enlargment</li><li>Bilin for fast enlargement</li></ul>
  1107 + preserveAspect | bool | If true, the image will be sized per specification, but a border will be applied to preserve aspect ratio.
965 1108
966 --- 1109 ---
967 1110
968 # RevertAffineTransform 1111 # RevertAffineTransform
969 1112
970 Designed for use after eye detection + Stasm, this will 1113 Designed for use after eye detection + Stasm, this will
  1114 +revert the detected landmarks to the original coordinate space
  1115 +before affine alignment to the stasm mean shape. The storeAffine
  1116 +parameter must be set to true when calling AffineTransform before this.
  1117 +
971 1118
972 * **file:** imgproc/revertaffine.cpp 1119 * **file:** imgproc/revertaffine.cpp
973 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md) 1120 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md)
974 -* **author:** Brendan Klare 1121 +* **author(s):** [Brendan Klare][bklare]
975 * **properties:** None 1122 * **properties:** None
976 1123
977 1124
@@ -980,10 +1127,11 @@ Designed for use after eye detection + Stasm, this will @@ -980,10 +1127,11 @@ Designed for use after eye detection + Stasm, this will
980 # RndPointTransform 1127 # RndPointTransform
981 1128
982 Generates a random landmark. 1129 Generates a random landmark.
  1130 +
983 1131
984 * **file:** imgproc/rndpoint.cpp 1132 * **file:** imgproc/rndpoint.cpp
985 * **inherits:** [Transform](../cpp_api/transform/transform.md) 1133 * **inherits:** [Transform](../cpp_api/transform/transform.md)
986 -* **author:** Josh Klontz 1134 +* **author(s):** [Josh Klontz][jklontz]
987 * **properties:** None 1135 * **properties:** None
988 1136
989 1137
@@ -992,10 +1140,11 @@ Generates a random landmark. @@ -992,10 +1140,11 @@ Generates a random landmark.
992 # RndRegionTransform 1140 # RndRegionTransform
993 1141
994 Selects a random region. 1142 Selects a random region.
  1143 +
995 1144
996 * **file:** imgproc/rndregion.cpp 1145 * **file:** imgproc/rndregion.cpp
997 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md) 1146 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md)
998 -* **author:** Josh Klontz 1147 +* **author(s):** [Josh Klontz][jklontz]
999 * **properties:** None 1148 * **properties:** None
1000 1149
1001 1150
@@ -1004,10 +1153,11 @@ Selects a random region. @@ -1004,10 +1153,11 @@ Selects a random region.
1004 # RndRotateTransform 1153 # RndRotateTransform
1005 1154
1006 Randomly rotates an image in a specified range. 1155 Randomly rotates an image in a specified range.
  1156 +
1007 1157
1008 * **file:** imgproc/rndrotate.cpp 1158 * **file:** imgproc/rndrotate.cpp
1009 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md) 1159 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md)
1010 -* **author:** Scott Klum 1160 +* **author(s):** [Scott Klum][sklum]
1011 * **properties:** None 1161 * **properties:** None
1012 1162
1013 1163
@@ -1016,10 +1166,11 @@ Randomly rotates an image in a specified range. @@ -1016,10 +1166,11 @@ Randomly rotates an image in a specified range.
1016 # RndSubspaceTransform 1166 # RndSubspaceTransform
1017 1167
1018 Generates a random subspace. 1168 Generates a random subspace.
  1169 +
1019 1170
1020 * **file:** imgproc/rndsubspace.cpp 1171 * **file:** imgproc/rndsubspace.cpp
1021 * **inherits:** [Transform](../cpp_api/transform/transform.md) 1172 * **inherits:** [Transform](../cpp_api/transform/transform.md)
1022 -* **author:** Josh Klontz 1173 +* **author(s):** [Josh Klontz][jklontz]
1023 * **properties:** None 1174 * **properties:** None
1024 1175
1025 1176
@@ -1027,11 +1178,18 @@ Generates a random subspace. @@ -1027,11 +1178,18 @@ Generates a random subspace.
1027 1178
1028 # RootNormTransform 1179 # RootNormTransform
1029 1180
1030 -dst=sqrt(norm_L1(src)) proposed as RootSIFT in 1181 +dst=sqrt(norm_L1(src)) proposed as RootSIFT (see paper)
  1182 +
1031 1183
1032 * **file:** imgproc/rootnorm.cpp 1184 * **file:** imgproc/rootnorm.cpp
1033 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md) 1185 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md)
1034 -* **author:** Josh Klontz 1186 +* **author(s):** [Josh Klontz][jklontz]
  1187 +* **read:**
  1188 +
  1189 + 1. *Arandjelovic, Relja, and Andrew Zisserman.*
  1190 + **"Three things everyone should know to improve object retrieval."**
  1191 + Computer Vision and Pattern Recognition (CVPR), 2012 IEEE Conference on. IEEE, 2012.
  1192 +
1035 * **properties:** None 1193 * **properties:** None
1036 1194
1037 1195
@@ -1040,10 +1198,11 @@ dst=sqrt(norm_L1(src)) proposed as RootSIFT in @@ -1040,10 +1198,11 @@ dst=sqrt(norm_L1(src)) proposed as RootSIFT in
1040 # RowWiseMeanCenterTransform 1198 # RowWiseMeanCenterTransform
1041 1199
1042 Remove the row-wise training set average. 1200 Remove the row-wise training set average.
  1201 +
1043 1202
1044 * **file:** imgproc/rowwisemeancenter.cpp 1203 * **file:** imgproc/rowwisemeancenter.cpp
1045 * **inherits:** [Transform](../cpp_api/transform/transform.md) 1204 * **inherits:** [Transform](../cpp_api/transform/transform.md)
1046 -* **author:** Josh Klontz 1205 +* **author(s):** [Josh Klontz][jklontz]
1047 * **properties:** None 1206 * **properties:** None
1048 1207
1049 1208
@@ -1052,10 +1211,12 @@ Remove the row-wise training set average. @@ -1052,10 +1211,12 @@ Remove the row-wise training set average.
1052 # SIFTDescriptorTransform 1211 # SIFTDescriptorTransform
1053 1212
1054 Specialize wrapper OpenCV SIFT wrapper 1213 Specialize wrapper OpenCV SIFT wrapper
  1214 +
1055 1215
1056 * **file:** imgproc/sift.cpp 1216 * **file:** imgproc/sift.cpp
1057 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md) 1217 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md)
1058 -* **author:** Josh Klontz 1218 +* **author(s):** [Josh Klontz][jklontz]
  1219 +* **see:** [http://docs.opencv.org/modules/nonfree/doc/feature_detection.html](http://docs.opencv.org/modules/nonfree/doc/feature_detection.html)
1059 * **properties:** None 1220 * **properties:** None
1060 1221
1061 1222
@@ -1064,10 +1225,11 @@ Specialize wrapper OpenCV SIFT wrapper @@ -1064,10 +1225,11 @@ Specialize wrapper OpenCV SIFT wrapper
1064 # SampleFromMaskTransform 1225 # SampleFromMaskTransform
1065 1226
1066 Samples pixels from a mask. 1227 Samples pixels from a mask.
  1228 +
1067 1229
1068 * **file:** imgproc/samplefrommask.cpp 1230 * **file:** imgproc/samplefrommask.cpp
1069 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md) 1231 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md)
1070 -* **author:** Scott Klum 1232 +* **author(s):** [Scott Klum][sklum]
1071 * **properties:** None 1233 * **properties:** None
1072 1234
1073 1235
@@ -1076,10 +1238,11 @@ Samples pixels from a mask. @@ -1076,10 +1238,11 @@ Samples pixels from a mask.
1076 # ScaleTransform 1238 # ScaleTransform
1077 1239
1078 Scales using the given factor 1240 Scales using the given factor
  1241 +
1079 1242
1080 * **file:** imgproc/scale.cpp 1243 * **file:** imgproc/scale.cpp
1081 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md) 1244 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md)
1082 -* **author:** Scott Klum 1245 +* **author(s):** [Scott Klum][sklum]
1083 * **properties:** None 1246 * **properties:** None
1084 1247
1085 1248
@@ -1087,11 +1250,13 @@ Scales using the given factor @@ -1087,11 +1250,13 @@ Scales using the given factor
1087 1250
1088 # SkinMaskTransform 1251 # SkinMaskTransform
1089 1252
1090 -http://worldofcameras.wordpress.com/tag/skin-detection-opencv/ 1253 +Make a mask over skin in an image
  1254 +
1091 1255
1092 * **file:** imgproc/skinmask.cpp 1256 * **file:** imgproc/skinmask.cpp
1093 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md) 1257 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md)
1094 -* **author:** Josh Klontz 1258 +* **author(s):** [Josh Klontz][jklontz]
  1259 +* **see:** [http://worldofcameras.wordpress.com/tag/skin-detection-opencv/](http://worldofcameras.wordpress.com/tag/skin-detection-opencv/)
1095 * **properties:** None 1260 * **properties:** None
1096 1261
1097 1262
@@ -1100,10 +1265,12 @@ http://worldofcameras.wordpress.com/tag/skin-detection-opencv/ @@ -1100,10 +1265,12 @@ http://worldofcameras.wordpress.com/tag/skin-detection-opencv/
1100 # SlidingWindowTransform 1265 # SlidingWindowTransform
1101 1266
1102 Applies a transform to a sliding window. 1267 Applies a transform to a sliding window.
  1268 +Discards negative detections.
  1269 +
1103 1270
1104 * **file:** imgproc/slidingwindow.cpp 1271 * **file:** imgproc/slidingwindow.cpp
1105 * **inherits:** [Transform](../cpp_api/transform/transform.md) 1272 * **inherits:** [Transform](../cpp_api/transform/transform.md)
1106 -* **author:** Austin Blanton 1273 +* **author(s):** [Austin Blanton][imaus10]
1107 * **properties:** None 1274 * **properties:** None
1108 1275
1109 1276
@@ -1112,10 +1279,11 @@ Applies a transform to a sliding window. @@ -1112,10 +1279,11 @@ Applies a transform to a sliding window.
1112 # SplitChannelsTransform 1279 # SplitChannelsTransform
1113 1280
1114 Split a multi-channel matrix into several single-channel matrices. 1281 Split a multi-channel matrix into several single-channel matrices.
  1282 +
1115 1283
1116 * **file:** imgproc/splitchannels.cpp 1284 * **file:** imgproc/splitchannels.cpp
1117 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md) 1285 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md)
1118 -* **author:** Josh Klontz 1286 +* **author(s):** [Josh Klontz][jklontz]
1119 * **properties:** None 1287 * **properties:** None
1120 1288
1121 1289
@@ -1124,10 +1292,11 @@ Split a multi-channel matrix into several single-channel matrices. @@ -1124,10 +1292,11 @@ Split a multi-channel matrix into several single-channel matrices.
1124 # SubdivideTransform 1292 # SubdivideTransform
1125 1293
1126 Divide the matrix into 4 smaller matricies of equal size. 1294 Divide the matrix into 4 smaller matricies of equal size.
  1295 +
1127 1296
1128 * **file:** imgproc/subdivide.cpp 1297 * **file:** imgproc/subdivide.cpp
1129 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md) 1298 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md)
1130 -* **author:** Josh Klontz 1299 +* **author(s):** [Josh Klontz][jklontz]
1131 * **properties:** None 1300 * **properties:** None
1132 1301
1133 1302
@@ -1136,10 +1305,11 @@ Divide the matrix into 4 smaller matricies of equal size. @@ -1136,10 +1305,11 @@ Divide the matrix into 4 smaller matricies of equal size.
1136 # SubtractTransform 1305 # SubtractTransform
1137 1306
1138 Subtract two matrices. 1307 Subtract two matrices.
  1308 +
1139 1309
1140 * **file:** imgproc/subtract.cpp 1310 * **file:** imgproc/subtract.cpp
1141 * **inherits:** [UntrainableMetaTransform](../cpp_api/untrainablemetatransform/untrainablemetatransform.md) 1311 * **inherits:** [UntrainableMetaTransform](../cpp_api/untrainablemetatransform/untrainablemetatransform.md)
1142 -* **author:** Josh Klontz 1312 +* **author(s):** [Josh Klontz][jklontz]
1143 * **properties:** None 1313 * **properties:** None
1144 1314
1145 1315
@@ -1148,10 +1318,25 @@ Subtract two matrices. @@ -1148,10 +1318,25 @@ Subtract two matrices.
1148 # ThresholdTransform 1318 # ThresholdTransform
1149 1319
1150 Wraps OpenCV's adaptive thresholding. 1320 Wraps OpenCV's adaptive thresholding.
  1321 +
1151 1322
1152 * **file:** imgproc/threshold.cpp 1323 * **file:** imgproc/threshold.cpp
1153 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md) 1324 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md)
1154 -* **author:** Scott Klum 1325 +* **author(s):** [Scott Klum][sklum]
  1326 +* **see:** [http://docs.opencv.org/modules/imgproc/doc/miscellaneous_transformations.html](http://docs.opencv.org/modules/imgproc/doc/miscellaneous_transformations.html)
  1327 +* **properties:** None
  1328 +
  1329 +
  1330 +---
  1331 +
  1332 +# TransposeTransform
  1333 +
  1334 +Get the transpose of the [Template](../cpp_api/template/template.md) matrix
  1335 +
  1336 +
  1337 +* **file:** imgproc/transpose.cpp
  1338 +* **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md)
  1339 +* **author(s):** [Unknown][unknown]
1155 * **properties:** None 1340 * **properties:** None
1156 1341
1157 1342
@@ -1160,10 +1345,11 @@ Wraps OpenCV&#39;s adaptive thresholding. @@ -1160,10 +1345,11 @@ Wraps OpenCV&#39;s adaptive thresholding.
1160 # WatershedSegmentationTransform 1345 # WatershedSegmentationTransform
1161 1346
1162 Applies watershed segmentation. 1347 Applies watershed segmentation.
  1348 +
1163 1349
1164 * **file:** imgproc/watershedsegmentation.cpp 1350 * **file:** imgproc/watershedsegmentation.cpp
1165 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md) 1351 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md)
1166 -* **author:** Austin Blanton 1352 +* **author(s):** [Austin Blanton][imaus10]
1167 * **properties:** None 1353 * **properties:** None
1168 1354
1169 1355
docs/docs/api_docs/plugins/io.md
1 # DecodeTransform 1 # DecodeTransform
2 2
3 Decodes images 3 Decodes images
  4 +
4 5
5 * **file:** io/decode.cpp 6 * **file:** io/decode.cpp
6 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md) 7 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md)
7 -* **author:** Josh Klontz 8 +* **author(s):** [Josh Klontz][jklontz]
8 * **properties:** None 9 * **properties:** None
9 10
10 11
@@ -13,10 +14,24 @@ Decodes images @@ -13,10 +14,24 @@ Decodes images
13 # DownloadTransform 14 # DownloadTransform
14 15
15 Downloads an image from a URL 16 Downloads an image from a URL
  17 +
16 18
17 * **file:** io/download.cpp 19 * **file:** io/download.cpp
18 * **inherits:** [UntrainableMetaTransform](../cpp_api/untrainablemetatransform/untrainablemetatransform.md) 20 * **inherits:** [UntrainableMetaTransform](../cpp_api/untrainablemetatransform/untrainablemetatransform.md)
19 -* **author:** Josh Klontz 21 +* **author(s):** [Josh Klontz][jklontz]
  22 +* **properties:** None
  23 +
  24 +
  25 +---
  26 +
  27 +# GalleryOutputTransform
  28 +
  29 +DOCUMENT ME
  30 +
  31 +
  32 +* **file:** io/galleryoutput.cpp
  33 +* **inherits:** [TimeVaryingTransform](../cpp_api/timevaryingtransform/timevaryingtransform.md)
  34 +* **author(s):** [Unknown][unknown]
20 * **properties:** None 35 * **properties:** None
21 36
22 37
@@ -26,9 +41,16 @@ Downloads an image from a URL @@ -26,9 +41,16 @@ Downloads an image from a URL
26 41
27 Incrementally output templates received to a gallery, based on the current filename 42 Incrementally output templates received to a gallery, based on the current filename
28 43
  44 +When a template is received in projectUpdate for the first time since a finalize, open a new gallery based on the
  45 +template's filename, and the galleryFormat property.
  46 +
  47 +[Template](../cpp_api/template/template.md) received in projectUpdate will be output to the gallery with a filename combining their original filename and
  48 +their FrameNumber property, with the file extension specified by the fileFormat property.
  49 +
  50 +
29 * **file:** io/incrementaloutput.cpp 51 * **file:** io/incrementaloutput.cpp
30 * **inherits:** [TimeVaryingTransform](../cpp_api/timevaryingtransform/timevaryingtransform.md) 52 * **inherits:** [TimeVaryingTransform](../cpp_api/timevaryingtransform/timevaryingtransform.md)
31 -* **author:** Charles Otto 53 +* **author(s):** [Charles Otto][caotto]
32 * **properties:** None 54 * **properties:** None
33 55
34 56
@@ -36,11 +58,25 @@ Incrementally output templates received to a gallery, based on the current filen @@ -36,11 +58,25 @@ Incrementally output templates received to a gallery, based on the current filen
36 58
37 # OpenTransform 59 # OpenTransform
38 60
39 -Applies br::Format to br::Template::file::name and appends results. 61 +Applies [Format](../cpp_api/format/format.md) to [Template](../cpp_api/template/template.md) filename and appends results.
  62 +
40 63
41 * **file:** io/open.cpp 64 * **file:** io/open.cpp
42 * **inherits:** [UntrainableMetaTransform](../cpp_api/untrainablemetatransform/untrainablemetatransform.md) 65 * **inherits:** [UntrainableMetaTransform](../cpp_api/untrainablemetatransform/untrainablemetatransform.md)
43 -* **author:** Josh Klontz 66 +* **author(s):** [Josh Klontz][jklontz]
  67 +* **properties:** None
  68 +
  69 +
  70 +---
  71 +
  72 +# OutputTransform
  73 +
  74 +DOCUMENT ME
  75 +
  76 +
  77 +* **file:** io/out.cpp
  78 +* **inherits:** [TimeVaryingTransform](../cpp_api/timevaryingtransform/timevaryingtransform.md)
  79 +* **author(s):** [Unknown][Unknown]
44 * **properties:** None 80 * **properties:** None
45 81
46 82
@@ -48,11 +84,12 @@ Applies br::Format to br::Template::file::name and appends results. @@ -48,11 +84,12 @@ Applies br::Format to br::Template::file::name and appends results.
48 84
49 # PrintTransform 85 # PrintTransform
50 86
51 -Prints the template's file to stdout or stderr. 87 +Prints the file of the input [Template](../cpp_api/template/template.md) to stdout or stderr.
  88 +
52 89
53 * **file:** io/print.cpp 90 * **file:** io/print.cpp
54 * **inherits:** [UntrainableMetaTransform](../cpp_api/untrainablemetatransform/untrainablemetatransform.md) 91 * **inherits:** [UntrainableMetaTransform](../cpp_api/untrainablemetatransform/untrainablemetatransform.md)
55 -* **author:** Josh Klontz 92 +* **author(s):** [Josh Klontz][jklontz]
56 * **properties:** None 93 * **properties:** None
57 94
58 95
@@ -60,11 +97,16 @@ Prints the template&#39;s file to stdout or stderr. @@ -60,11 +97,16 @@ Prints the template&#39;s file to stdout or stderr.
60 97
61 # ReadLandmarksTransform 98 # ReadLandmarksTransform
62 99
63 -Read landmarks from a file and associate them with the correct templates. 100 +Read landmarks from a file and associate them with the correct [Template](../cpp_api/template/template.md).
  101 +
64 102
65 * **file:** io/readlandmarks.cpp 103 * **file:** io/readlandmarks.cpp
66 * **inherits:** [UntrainableMetadataTransform](../cpp_api/untrainablemetadatatransform/untrainablemetadatatransform.md) 104 * **inherits:** [UntrainableMetadataTransform](../cpp_api/untrainablemetadatatransform/untrainablemetadatatransform.md)
67 -* **author:** Scott Klum 105 +* **author(s):** [Scott Klum][sklum]
  106 +* **format:** Example of the format: <pre><code>image_001.jpg:146.000000,190.000000,227.000000,186.000000,202.000000,256.000000
  107 +image_002.jpg:75.000000,235.000000,140.000000,225.000000,91.000000,300.000000
  108 +image_003.jpg:158.000000,186.000000,246.000000,188.000000,208.000000,233.000000
  109 +</code></pre>
68 * **properties:** None 110 * **properties:** None
69 111
70 112
@@ -73,10 +115,11 @@ Read landmarks from a file and associate them with the correct templates. @@ -73,10 +115,11 @@ Read landmarks from a file and associate them with the correct templates.
73 # ReadTransform 115 # ReadTransform
74 116
75 Read images 117 Read images
  118 +
76 119
77 * **file:** io/read.cpp 120 * **file:** io/read.cpp
78 * **inherits:** [UntrainableMetaTransform](../cpp_api/untrainablemetatransform/untrainablemetatransform.md) 121 * **inherits:** [UntrainableMetaTransform](../cpp_api/untrainablemetatransform/untrainablemetatransform.md)
79 -* **author:** Josh Klontz 122 +* **author(s):** [Josh Klontz][jklontz]
80 * **properties:** None 123 * **properties:** None
81 124
82 125
@@ -85,10 +128,11 @@ Read images @@ -85,10 +128,11 @@ Read images
85 # WriteTransform 128 # WriteTransform
86 129
87 Write all mats to disk as images. 130 Write all mats to disk as images.
  131 +
88 132
89 * **file:** io/write.cpp 133 * **file:** io/write.cpp
90 * **inherits:** [TimeVaryingTransform](../cpp_api/timevaryingtransform/timevaryingtransform.md) 134 * **inherits:** [TimeVaryingTransform](../cpp_api/timevaryingtransform/timevaryingtransform.md)
91 -* **author:** Brendan Klare 135 +* **author(s):** [Brendan Klare][bklare]
92 * **properties:** None 136 * **properties:** None
93 137
94 138
@@ -97,10 +141,17 @@ Write all mats to disk as images. @@ -97,10 +141,17 @@ Write all mats to disk as images.
97 # YouTubeFacesDBTransform 141 # YouTubeFacesDBTransform
98 142
99 Implements the YouTubesFaceDB 143 Implements the YouTubesFaceDB
  144 +
100 145
101 * **file:** io/youtubefacesdb.cpp 146 * **file:** io/youtubefacesdb.cpp
102 * **inherits:** [UntrainableMetaTransform](../cpp_api/untrainablemetatransform/untrainablemetatransform.md) 147 * **inherits:** [UntrainableMetaTransform](../cpp_api/untrainablemetatransform/untrainablemetatransform.md)
103 -* **author:** Josh Klontz 148 +* **author(s):** [Josh Klontz][jklontz]
  149 +* **read:**
  150 +
  151 + 1. *Wolf, Lior, Tal Hassner, and Itay Maoz.*
  152 + **"Face recognition in unconstrained videos with matched background similarity."**
  153 + Computer Vision and Pattern Recognition (CVPR), 2011 IEEE Conference on. IEEE, 2011.
  154 +
104 * **properties:** None 155 * **properties:** None
105 156
106 157
docs/docs/api_docs/plugins/metadata.md
1 # ASEFEyesTransform 1 # ASEFEyesTransform
2 2
3 -Bolme, D.S.; Draper, B.A.; Beveridge, J.R.; 3 +Find eye locations using an ASEF filter
  4 +
4 5
5 * **file:** metadata/eyes.cpp 6 * **file:** metadata/eyes.cpp
6 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md) 7 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md)
7 -* **authors:** David Bolme, Josh Klontz 8 +* **author(s):** [Josh Klontz][jklontz]
  9 +* **read:**
  10 +
  11 + 1. *Bolme, D.S.; Draper, B.A.; Beveridge, J.R.;*
  12 + **"Average of Synthetic Exact Filters,"**
  13 + Computer Vision and Pattern Recognition, 2009. CVPR 2009. IEEE Conference on , vol., no., pp.2105-2112, 20-25 June 2009
  14 +
8 * **properties:** None 15 * **properties:** None
9 16
10 17
@@ -13,10 +20,11 @@ Bolme, D.S.; Draper, B.A.; Beveridge, J.R.; @@ -13,10 +20,11 @@ Bolme, D.S.; Draper, B.A.; Beveridge, J.R.;
13 # AnonymizeLandmarksTransform 20 # AnonymizeLandmarksTransform
14 21
15 Remove a name from a point/rect 22 Remove a name from a point/rect
  23 +
16 24
17 * **file:** metadata/anonymizelandmarks.cpp 25 * **file:** metadata/anonymizelandmarks.cpp
18 * **inherits:** [UntrainableMetadataTransform](../cpp_api/untrainablemetadatatransform/untrainablemetadatatransform.md) 26 * **inherits:** [UntrainableMetadataTransform](../cpp_api/untrainablemetadatatransform/untrainablemetadatatransform.md)
19 -* **author:** Scott Klum 27 +* **author(s):** [Scott Klum][sklum]
20 * **properties:** None 28 * **properties:** None
21 29
22 30
@@ -24,11 +32,12 @@ Remove a name from a point/rect @@ -24,11 +32,12 @@ Remove a name from a point/rect
24 32
25 # AsTransform 33 # AsTransform
26 34
27 -Change the br::Template::file extension 35 +Change the [Template](../cpp_api/template/template.md) file extension
  36 +
28 37
29 * **file:** metadata/as.cpp 38 * **file:** metadata/as.cpp
30 * **inherits:** [UntrainableMetadataTransform](../cpp_api/untrainablemetadatatransform/untrainablemetadatatransform.md) 39 * **inherits:** [UntrainableMetadataTransform](../cpp_api/untrainablemetadatatransform/untrainablemetadatatransform.md)
31 -* **author:** Josh Klontz 40 +* **author(s):** [Josh Klontz][jklontz]
32 * **properties:** None 41 * **properties:** None
33 42
34 43
@@ -37,10 +46,11 @@ Change the br::Template::file extension @@ -37,10 +46,11 @@ Change the br::Template::file extension
37 # AveragePointsTransform 46 # AveragePointsTransform
38 47
39 Averages a set of landmarks into a new landmark 48 Averages a set of landmarks into a new landmark
  49 +
40 50
41 * **file:** metadata/averagepoints.cpp 51 * **file:** metadata/averagepoints.cpp
42 * **inherits:** [UntrainableMetadataTransform](../cpp_api/untrainablemetadatatransform/untrainablemetadatatransform.md) 52 * **inherits:** [UntrainableMetadataTransform](../cpp_api/untrainablemetadatatransform/untrainablemetadatatransform.md)
43 -* **author:** Brendan Klare 53 +* **author(s):** [Brendan Klare][bklare]
44 * **properties:** None 54 * **properties:** None
45 55
46 56
@@ -49,10 +59,12 @@ Averages a set of landmarks into a new landmark @@ -49,10 +59,12 @@ Averages a set of landmarks into a new landmark
49 # CascadeTransform 59 # CascadeTransform
50 60
51 Wraps OpenCV cascade classifier 61 Wraps OpenCV cascade classifier
  62 +
52 63
53 * **file:** metadata/cascade.cpp 64 * **file:** metadata/cascade.cpp
54 * **inherits:** [MetaTransform](../cpp_api/metatransform/metatransform.md) 65 * **inherits:** [MetaTransform](../cpp_api/metatransform/metatransform.md)
55 -* **authors:** Josh Klontz, David Crouse 66 +* **author(s):** [Josh Klontz][jklontz], [David Crouse][dgcrouse]
  67 +* **see:** [http://docs.opencv.org/modules/objdetect/doc/cascade_classification.html](http://docs.opencv.org/modules/objdetect/doc/cascade_classification.html)
56 * **properties:** None 68 * **properties:** None
57 69
58 70
@@ -60,11 +72,12 @@ Wraps OpenCV cascade classifier @@ -60,11 +72,12 @@ Wraps OpenCV cascade classifier
60 72
61 # CheckTransform 73 # CheckTransform
62 74
63 -Checks the template for NaN values. 75 +Checks the [Template](../cpp_api/template/template.md) for NaN values.
  76 +
64 77
65 * **file:** metadata/check.cpp 78 * **file:** metadata/check.cpp
66 * **inherits:** [UntrainableMetaTransform](../cpp_api/untrainablemetatransform/untrainablemetatransform.md) 79 * **inherits:** [UntrainableMetaTransform](../cpp_api/untrainablemetatransform/untrainablemetatransform.md)
67 -* **author:** Josh Klontz 80 +* **author(s):** [Josh Klontz][jklontz]
68 * **properties:** None 81 * **properties:** None
69 82
70 83
@@ -72,11 +85,12 @@ Checks the template for NaN values. @@ -72,11 +85,12 @@ Checks the template for NaN values.
72 85
73 # ClearPointsTransform 86 # ClearPointsTransform
74 87
75 -Clears the points from a template 88 +Clears the points from a [Template](../cpp_api/template/template.md)
  89 +
76 90
77 * **file:** metadata/clearpoints.cpp 91 * **file:** metadata/clearpoints.cpp
78 * **inherits:** [UntrainableMetadataTransform](../cpp_api/untrainablemetadatatransform/untrainablemetadatatransform.md) 92 * **inherits:** [UntrainableMetadataTransform](../cpp_api/untrainablemetadatatransform/untrainablemetadatatransform.md)
79 -* **author:** Brendan Klare 93 +* **author(s):** [Brendan Klare][bklare]
80 * **properties:** None 94 * **properties:** None
81 95
82 96
@@ -85,10 +99,11 @@ Clears the points from a template @@ -85,10 +99,11 @@ Clears the points from a template
85 # ConsolidateDetectionsTransform 99 # ConsolidateDetectionsTransform
86 100
87 Consolidate redundant/overlapping detections. 101 Consolidate redundant/overlapping detections.
  102 +
88 103
89 * **file:** metadata/consolidatedetections.cpp 104 * **file:** metadata/consolidatedetections.cpp
90 * **inherits:** [UntrainableMetadataTransform](../cpp_api/untrainablemetadatatransform/untrainablemetadatatransform.md) 105 * **inherits:** [UntrainableMetadataTransform](../cpp_api/untrainablemetadatatransform/untrainablemetadatatransform.md)
91 -* **author:** Brendan Klare 106 +* **author(s):** [Brendan Klare][bklare]
92 * **properties:** None 107 * **properties:** None
93 108
94 109
@@ -96,11 +111,12 @@ Consolidate redundant/overlapping detections. @@ -96,11 +111,12 @@ Consolidate redundant/overlapping detections.
96 111
97 # CropRectTransform 112 # CropRectTransform
98 113
99 -Crops the width and height of a template's rects by input width and height factors. 114 +Crops the width and height of a [Template](../cpp_api/template/template.md) rects by input width and height factors.
  115 +
100 116
101 * **file:** metadata/croprect.cpp 117 * **file:** metadata/croprect.cpp
102 * **inherits:** [UntrainableMetadataTransform](../cpp_api/untrainablemetadatatransform/untrainablemetadatatransform.md) 118 * **inherits:** [UntrainableMetadataTransform](../cpp_api/untrainablemetadatatransform/untrainablemetadatatransform.md)
103 -* **author:** Scott Klum 119 +* **author(s):** [Scott Klum][sklum]
104 * **properties:** None 120 * **properties:** None
105 121
106 122
@@ -109,10 +125,11 @@ Crops the width and height of a template&#39;s rects by input width and height facto @@ -109,10 +125,11 @@ Crops the width and height of a template&#39;s rects by input width and height facto
109 # DelaunayTransform 125 # DelaunayTransform
110 126
111 Creates a Delaunay triangulation based on a set of points 127 Creates a Delaunay triangulation based on a set of points
  128 +
112 129
113 * **file:** metadata/delaunay.cpp 130 * **file:** metadata/delaunay.cpp
114 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md) 131 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md)
115 -* **author:** Scott Klum 132 +* **author(s):** [Scott Klum][sklum]
116 * **properties:** None 133 * **properties:** None
117 134
118 135
@@ -120,11 +137,12 @@ Creates a Delaunay triangulation based on a set of points @@ -120,11 +137,12 @@ Creates a Delaunay triangulation based on a set of points
120 137
121 # ExpandRectTransform 138 # ExpandRectTransform
122 139
123 -Expand the width and height of a template's rects by input width and height factors. 140 +Expand the width and height of a [Template](../cpp_api/template/template.md) rects by input width and height factors.
  141 +
124 142
125 * **file:** metadata/expandrect.cpp 143 * **file:** metadata/expandrect.cpp
126 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md) 144 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md)
127 -* **author:** Charles Otto 145 +* **author(s):** [Charles Otto][caotto]
128 * **properties:** None 146 * **properties:** None
129 147
130 148
@@ -133,10 +151,41 @@ Expand the width and height of a template&#39;s rects by input width and height fact @@ -133,10 +151,41 @@ Expand the width and height of a template&#39;s rects by input width and height fact
133 # ExtractMetadataTransform 151 # ExtractMetadataTransform
134 152
135 Create matrix from metadata values. 153 Create matrix from metadata values.
  154 +
136 155
137 * **file:** metadata/extractmetadata.cpp 156 * **file:** metadata/extractmetadata.cpp
138 * **inherits:** [UntrainableMetaTransform](../cpp_api/untrainablemetatransform/untrainablemetatransform.md) 157 * **inherits:** [UntrainableMetaTransform](../cpp_api/untrainablemetatransform/untrainablemetatransform.md)
139 -* **author:** Josh Klontz 158 +* **author(s):** [Josh Klontz][jklontz]
  159 +* **properties:** None
  160 +
  161 +
  162 +---
  163 +
  164 +# FaceFromEyesTransform
  165 +
  166 +Create face bounding box from two eye locations.
  167 +
  168 +
  169 +* **file:** metadata/facefromeyes.cpp
  170 +* **inherits:** [UntrainableMetadataTransform](../cpp_api/untrainablemetadatatransform/untrainablemetadatatransform.md)
  171 +* **author(s):** [Brendan Klare][bklare]
  172 +* **properties:**
  173 +
  174 + Property | Type | Description
  175 + --- | --- | ---
  176 + widthPadding | double | Specifies what percentage of the interpupliary distance (ipd) will be padded in both horizontal directions.
  177 + verticalLocation | double | specifies where vertically the eyes are within the bounding box (0.5 would be the center).
  178 +
  179 +---
  180 +
  181 +# FileExclusionTransform
  182 +
  183 +DOCUMENT ME
  184 +
  185 +
  186 +* **file:** metadata/fileexclusion.cpp
  187 +* **inherits:** [UntrainableMetaTransform](../cpp_api/untrainablemetatransform/untrainablemetatransform.md)
  188 +* **author(s):** [Unknown][Unknown]
140 * **properties:** None 189 * **properties:** None
141 190
142 191
@@ -144,11 +193,12 @@ Create matrix from metadata values. @@ -144,11 +193,12 @@ Create matrix from metadata values.
144 193
145 # FilterDupeMetadataTransform 194 # FilterDupeMetadataTransform
146 195
147 -Removes duplicate templates based on a unique metadata key 196 +Removes duplicate [Template](../cpp_api/template/template.md) based on a unique metadata key
  197 +
148 198
149 * **file:** metadata/filterdupemetadata.cpp 199 * **file:** metadata/filterdupemetadata.cpp
150 * **inherits:** [TimeVaryingTransform](../cpp_api/timevaryingtransform/timevaryingtransform.md) 200 * **inherits:** [TimeVaryingTransform](../cpp_api/timevaryingtransform/timevaryingtransform.md)
151 -* **author:** Austin Blanton 201 +* **author(s):** [Austin Blanton][imaus10]
152 * **properties:** None 202 * **properties:** None
153 203
154 204
@@ -156,11 +206,12 @@ Removes duplicate templates based on a unique metadata key @@ -156,11 +206,12 @@ Removes duplicate templates based on a unique metadata key
156 206
157 # GridTransform 207 # GridTransform
158 208
159 -Add landmarks to the template in a grid layout 209 +Add landmarks to the [Template](../cpp_api/template/template.md) in a grid layout
  210 +
160 211
161 * **file:** metadata/grid.cpp 212 * **file:** metadata/grid.cpp
162 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md) 213 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md)
163 -* **author:** Josh Klontz 214 +* **author(s):** [Josh Klontz][jklontz]
164 * **properties:** None 215 * **properties:** None
165 216
166 217
@@ -168,11 +219,12 @@ Add landmarks to the template in a grid layout @@ -168,11 +219,12 @@ Add landmarks to the template in a grid layout
168 219
169 # GroundTruthTransform 220 # GroundTruthTransform
170 221
171 -Add any ground truth to the template using the file's base name. 222 +Add any ground truth to the [Template](../cpp_api/template/template.md) using the file's base name.
  223 +
172 224
173 * **file:** metadata/groundtruth.cpp 225 * **file:** metadata/groundtruth.cpp
174 * **inherits:** [UntrainableMetadataTransform](../cpp_api/untrainablemetadatatransform/untrainablemetadatatransform.md) 226 * **inherits:** [UntrainableMetadataTransform](../cpp_api/untrainablemetadatatransform/untrainablemetadatatransform.md)
175 -* **author:** Josh Klontz 227 +* **author(s):** [Josh Klontz][jklontz]
176 * **properties:** None 228 * **properties:** None
177 229
178 230
@@ -181,10 +233,12 @@ Add any ground truth to the template using the file&#39;s base name. @@ -181,10 +233,12 @@ Add any ground truth to the template using the file&#39;s base name.
181 # HOGPersonDetectorTransform 233 # HOGPersonDetectorTransform
182 234
183 Detects objects with OpenCV's built-in HOG detection. 235 Detects objects with OpenCV's built-in HOG detection.
  236 +
184 237
185 * **file:** metadata/hogpersondetector.cpp 238 * **file:** metadata/hogpersondetector.cpp
186 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md) 239 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md)
187 -* **author:** Austin Blanton 240 +* **author(s):** [Austin Blanton][imaus10]
  241 +* **see:** [http://docs.opencv.org/modules/gpu/doc/object_detection.html](http://docs.opencv.org/modules/gpu/doc/object_detection.html)
188 * **properties:** None 242 * **properties:** None
189 243
190 244
@@ -192,11 +246,12 @@ Detects objects with OpenCV&#39;s built-in HOG detection. @@ -192,11 +246,12 @@ Detects objects with OpenCV&#39;s built-in HOG detection.
192 246
193 # IfMetadataTransform 247 # IfMetadataTransform
194 248
195 -Clear templates without the required metadata. 249 +Clear [Template](../cpp_api/template/template.md) without the required metadata.
  250 +
196 251
197 * **file:** metadata/ifmetadata.cpp 252 * **file:** metadata/ifmetadata.cpp
198 * **inherits:** [UntrainableMetadataTransform](../cpp_api/untrainablemetadatatransform/untrainablemetadatatransform.md) 253 * **inherits:** [UntrainableMetadataTransform](../cpp_api/untrainablemetadatatransform/untrainablemetadatatransform.md)
199 -* **author:** Josh Klontz 254 +* **author(s):** [Josh Klontz][jklontz]
200 * **properties:** None 255 * **properties:** None
201 256
202 257
@@ -205,10 +260,11 @@ Clear templates without the required metadata. @@ -205,10 +260,11 @@ Clear templates without the required metadata.
205 # ImpostorUniquenessMeasureTransform 260 # ImpostorUniquenessMeasureTransform
206 261
207 Impostor Uniqueness Measure 262 Impostor Uniqueness Measure
  263 +
208 264
209 * **file:** metadata/imposteruniquenessmeasure.cpp 265 * **file:** metadata/imposteruniquenessmeasure.cpp
210 * **inherits:** [Transform](../cpp_api/transform/transform.md) 266 * **inherits:** [Transform](../cpp_api/transform/transform.md)
211 -* **author:** Josh Klontz 267 +* **author(s):** [Josh Klontz][jklontz]
212 * **properties:** None 268 * **properties:** None
213 269
214 270
@@ -217,10 +273,11 @@ Impostor Uniqueness Measure @@ -217,10 +273,11 @@ Impostor Uniqueness Measure
217 # JSONTransform 273 # JSONTransform
218 274
219 Represent the metadata as JSON template data. 275 Represent the metadata as JSON template data.
  276 +
220 277
221 * **file:** metadata/json.cpp 278 * **file:** metadata/json.cpp
222 * **inherits:** [UntrainableMetaTransform](../cpp_api/untrainablemetatransform/untrainablemetatransform.md) 279 * **inherits:** [UntrainableMetaTransform](../cpp_api/untrainablemetatransform/untrainablemetatransform.md)
223 -* **author:** Josh Klontz 280 +* **author(s):** [Josh Klontz][jklontz]
224 * **properties:** None 281 * **properties:** None
225 282
226 283
@@ -229,10 +286,11 @@ Represent the metadata as JSON template data. @@ -229,10 +286,11 @@ Represent the metadata as JSON template data.
229 # KeepMetadataTransform 286 # KeepMetadataTransform
230 287
231 Retains only the values for the keys listed, to reduce template size 288 Retains only the values for the keys listed, to reduce template size
  289 +
232 290
233 * **file:** metadata/keepmetadata.cpp 291 * **file:** metadata/keepmetadata.cpp
234 * **inherits:** [UntrainableMetadataTransform](../cpp_api/untrainablemetadatatransform/untrainablemetadatatransform.md) 292 * **inherits:** [UntrainableMetadataTransform](../cpp_api/untrainablemetadatatransform/untrainablemetadatatransform.md)
235 -* **author:** Scott Klum 293 +* **author(s):** [Scott Klum][sklum]
236 * **properties:** None 294 * **properties:** None
237 295
238 296
@@ -241,10 +299,12 @@ Retains only the values for the keys listed, to reduce template size @@ -241,10 +299,12 @@ Retains only the values for the keys listed, to reduce template size
241 # KeyPointDetectorTransform 299 # KeyPointDetectorTransform
242 300
243 Wraps OpenCV Key Point Detector 301 Wraps OpenCV Key Point Detector
  302 +
244 303
245 * **file:** metadata/keypointdetector.cpp 304 * **file:** metadata/keypointdetector.cpp
246 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md) 305 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md)
247 -* **author:** Josh Klontz 306 +* **author(s):** [Josh Klontz][jklontz]
  307 +* **see:** [http://docs.opencv.org/modules/features2d/doc/common_interfaces_of_feature_detectors.html](http://docs.opencv.org/modules/features2d/doc/common_interfaces_of_feature_detectors.html)
248 * **properties:** None 308 * **properties:** None
249 309
250 310
@@ -253,10 +313,11 @@ Wraps OpenCV Key Point Detector @@ -253,10 +313,11 @@ Wraps OpenCV Key Point Detector
253 # KeyToRectTransform 313 # KeyToRectTransform
254 314
255 Convert values of key_X, key_Y, key_Width, key_Height to a rect. 315 Convert values of key_X, key_Y, key_Width, key_Height to a rect.
  316 +
256 317
257 * **file:** metadata/keytorect.cpp 318 * **file:** metadata/keytorect.cpp
258 * **inherits:** [UntrainableMetadataTransform](../cpp_api/untrainablemetadatatransform/untrainablemetadatatransform.md) 319 * **inherits:** [UntrainableMetadataTransform](../cpp_api/untrainablemetadatatransform/untrainablemetadatatransform.md)
259 -* **author:** Jordan Cheney 320 +* **author(s):** [Jordan Cheney][JordanCheney]
260 * **properties:** None 321 * **properties:** None
261 322
262 323
@@ -265,10 +326,11 @@ Convert values of key_X, key_Y, key_Width, key_Height to a rect. @@ -265,10 +326,11 @@ Convert values of key_X, key_Y, key_Width, key_Height to a rect.
265 # NameLandmarksTransform 326 # NameLandmarksTransform
266 327
267 Name a point/rect 328 Name a point/rect
  329 +
268 330
269 * **file:** metadata/namelandmarks.cpp 331 * **file:** metadata/namelandmarks.cpp
270 * **inherits:** [UntrainableMetadataTransform](../cpp_api/untrainablemetadatatransform/untrainablemetadatatransform.md) 332 * **inherits:** [UntrainableMetadataTransform](../cpp_api/untrainablemetadatatransform/untrainablemetadatatransform.md)
271 -* **author:** Scott Klum 333 +* **author(s):** [Scott Klum][sklum]
272 * **properties:** None 334 * **properties:** None
273 335
274 336
@@ -276,11 +338,12 @@ Name a point/rect @@ -276,11 +338,12 @@ Name a point/rect
276 338
277 # NameTransform 339 # NameTransform
278 340
279 -Sets the template's matrix data to the br::File::name. 341 +Sets the [Template](../cpp_api/template/template.md) matrix data to the br::File::name.
  342 +
280 343
281 * **file:** metadata/name.cpp 344 * **file:** metadata/name.cpp
282 * **inherits:** [UntrainableMetaTransform](../cpp_api/untrainablemetatransform/untrainablemetatransform.md) 345 * **inherits:** [UntrainableMetaTransform](../cpp_api/untrainablemetatransform/untrainablemetatransform.md)
283 -* **author:** Josh Klontz 346 +* **author(s):** [Josh Klontz][jklontz]
284 * **properties:** None 347 * **properties:** None
285 348
286 349
@@ -289,10 +352,11 @@ Sets the template&#39;s matrix data to the br::File::name. @@ -289,10 +352,11 @@ Sets the template&#39;s matrix data to the br::File::name.
289 # NormalizePointsTransform 352 # NormalizePointsTransform
290 353
291 Normalize points to be relative to a single point 354 Normalize points to be relative to a single point
  355 +
292 356
293 * **file:** metadata/normalizepoints.cpp 357 * **file:** metadata/normalizepoints.cpp
294 * **inherits:** [UntrainableMetadataTransform](../cpp_api/untrainablemetadatatransform/untrainablemetadatatransform.md) 358 * **inherits:** [UntrainableMetadataTransform](../cpp_api/untrainablemetadatatransform/untrainablemetadatatransform.md)
295 -* **author:** Scott Klum 359 +* **author(s):** [Scott Klum][sklum]
296 * **properties:** None 360 * **properties:** None
297 361
298 362
@@ -301,10 +365,11 @@ Normalize points to be relative to a single point @@ -301,10 +365,11 @@ Normalize points to be relative to a single point
301 # PointDisplacementTransform 365 # PointDisplacementTransform
302 366
303 Normalize points to be relative to a single point 367 Normalize points to be relative to a single point
  368 +
304 369
305 * **file:** metadata/pointdisplacement.cpp 370 * **file:** metadata/pointdisplacement.cpp
306 * **inherits:** [UntrainableMetadataTransform](../cpp_api/untrainablemetadatatransform/untrainablemetadatatransform.md) 371 * **inherits:** [UntrainableMetadataTransform](../cpp_api/untrainablemetadatatransform/untrainablemetadatatransform.md)
307 -* **author:** Scott Klum 372 +* **author(s):** [Scott Klum][sklum]
308 * **properties:** None 373 * **properties:** None
309 374
310 375
@@ -313,10 +378,11 @@ Normalize points to be relative to a single point @@ -313,10 +378,11 @@ Normalize points to be relative to a single point
313 # PointsToMatrixTransform 378 # PointsToMatrixTransform
314 379
315 Converts either the file::points() list or a QList<QPointF> metadata item to be the template's matrix 380 Converts either the file::points() list or a QList<QPointF> metadata item to be the template's matrix
  381 +
316 382
317 * **file:** metadata/pointstomatrix.cpp 383 * **file:** metadata/pointstomatrix.cpp
318 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md) 384 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md)
319 -* **author:** Scott Klum 385 +* **author(s):** [Scott Klum][sklum]
320 * **properties:** None 386 * **properties:** None
321 387
322 388
@@ -325,10 +391,11 @@ Converts either the file::points() list or a QList&lt;QPointF&gt; metadata item to be @@ -325,10 +391,11 @@ Converts either the file::points() list or a QList&lt;QPointF&gt; metadata item to be
325 # ProcrustesTransform 391 # ProcrustesTransform
326 392
327 Procrustes alignment of points 393 Procrustes alignment of points
  394 +
328 395
329 * **file:** metadata/procrustes.cpp 396 * **file:** metadata/procrustes.cpp
330 * **inherits:** [MetadataTransform](../cpp_api/metadatatransform/metadatatransform.md) 397 * **inherits:** [MetadataTransform](../cpp_api/metadatatransform/metadatatransform.md)
331 -* **author:** Scott Klum 398 +* **author(s):** [Scott Klum][sklum]
332 * **properties:** None 399 * **properties:** None
333 400
334 401
@@ -336,11 +403,12 @@ Procrustes alignment of points @@ -336,11 +403,12 @@ Procrustes alignment of points
336 403
337 # RectsToTemplatesTransform 404 # RectsToTemplatesTransform
338 405
339 -For each rectangle bounding box in src, a new 406 +For each rectangle bounding box in src, a new [Template](../cpp_api/template/template.md) is created.
  407 +
340 408
341 * **file:** metadata/rectstotemplates.cpp 409 * **file:** metadata/rectstotemplates.cpp
342 * **inherits:** [UntrainableMetaTransform](../cpp_api/untrainablemetatransform/untrainablemetatransform.md) 410 * **inherits:** [UntrainableMetaTransform](../cpp_api/untrainablemetatransform/untrainablemetatransform.md)
343 -* **author:** Brendan Klare 411 +* **author(s):** [Brendan Klare][bklare]
344 * **properties:** None 412 * **properties:** None
345 413
346 414
@@ -349,10 +417,11 @@ For each rectangle bounding box in src, a new @@ -349,10 +417,11 @@ For each rectangle bounding box in src, a new
349 # RegexPropertyTransform 417 # RegexPropertyTransform
350 418
351 Apply the input regular expression to the value of inputProperty, store the matched portion in outputProperty. 419 Apply the input regular expression to the value of inputProperty, store the matched portion in outputProperty.
  420 +
352 421
353 * **file:** metadata/regexproperty.cpp 422 * **file:** metadata/regexproperty.cpp
354 * **inherits:** [UntrainableMetadataTransform](../cpp_api/untrainablemetadatatransform/untrainablemetadatatransform.md) 423 * **inherits:** [UntrainableMetadataTransform](../cpp_api/untrainablemetadatatransform/untrainablemetadatatransform.md)
355 -* **author:** Charles Otto 424 +* **author(s):** [Charles Otto][caotto]
356 * **properties:** None 425 * **properties:** None
357 426
358 427
@@ -360,11 +429,12 @@ Apply the input regular expression to the value of inputProperty, store the matc @@ -360,11 +429,12 @@ Apply the input regular expression to the value of inputProperty, store the matc
360 429
361 # RemoveMetadataTransform 430 # RemoveMetadataTransform
362 431
363 -Removes a metadata field from all templates 432 +Removes a metadata field from all [Template](../cpp_api/template/template.md)
  433 +
364 434
365 * **file:** metadata/removemetadata.cpp 435 * **file:** metadata/removemetadata.cpp
366 * **inherits:** [UntrainableMetadataTransform](../cpp_api/untrainablemetadatatransform/untrainablemetadatatransform.md) 436 * **inherits:** [UntrainableMetadataTransform](../cpp_api/untrainablemetadatatransform/untrainablemetadatatransform.md)
367 -* **author:** Brendan Klare 437 +* **author(s):** [Brendan Klare][bklare]
368 * **properties:** None 438 * **properties:** None
369 439
370 440
@@ -372,11 +442,12 @@ Removes a metadata field from all templates @@ -372,11 +442,12 @@ Removes a metadata field from all templates
372 442
373 # RemoveTemplatesTransform 443 # RemoveTemplatesTransform
374 444
375 -Remove templates with the specified file extension or metadata value. 445 +Remove [Template](../cpp_api/template/template.md) with the specified file extension or metadata value.
  446 +
376 447
377 * **file:** metadata/removetemplates.cpp 448 * **file:** metadata/removetemplates.cpp
378 * **inherits:** [UntrainableMetaTransform](../cpp_api/untrainablemetatransform/untrainablemetatransform.md) 449 * **inherits:** [UntrainableMetaTransform](../cpp_api/untrainablemetatransform/untrainablemetatransform.md)
379 -* **author:** Josh Klontz 450 +* **author(s):** [Josh Klontz][jklontz]
380 * **properties:** None 451 * **properties:** None
381 452
382 453
@@ -385,10 +456,11 @@ Remove templates with the specified file extension or metadata value. @@ -385,10 +456,11 @@ Remove templates with the specified file extension or metadata value.
385 # RenameFirstTransform 456 # RenameFirstTransform
386 457
387 Rename first found metadata key 458 Rename first found metadata key
  459 +
388 460
389 * **file:** metadata/renamefirst.cpp 461 * **file:** metadata/renamefirst.cpp
390 * **inherits:** [UntrainableMetadataTransform](../cpp_api/untrainablemetadatatransform/untrainablemetadatatransform.md) 462 * **inherits:** [UntrainableMetadataTransform](../cpp_api/untrainablemetadatatransform/untrainablemetadatatransform.md)
391 -* **author:** Josh Klontz 463 +* **author(s):** [Josh Klontz][jklontz]
392 * **properties:** None 464 * **properties:** None
393 465
394 466
@@ -397,10 +469,11 @@ Rename first found metadata key @@ -397,10 +469,11 @@ Rename first found metadata key
397 # RenameTransform 469 # RenameTransform
398 470
399 Rename metadata key 471 Rename metadata key
  472 +
400 473
401 * **file:** metadata/rename.cpp 474 * **file:** metadata/rename.cpp
402 * **inherits:** [UntrainableMetadataTransform](../cpp_api/untrainablemetadatatransform/untrainablemetadatatransform.md) 475 * **inherits:** [UntrainableMetadataTransform](../cpp_api/untrainablemetadatatransform/untrainablemetadatatransform.md)
403 -* **author:** Josh Klontz 476 +* **author(s):** [Josh Klontz][jklontz]
404 * **properties:** None 477 * **properties:** None
405 478
406 479
@@ -409,10 +482,12 @@ Rename metadata key @@ -409,10 +482,12 @@ Rename metadata key
409 # ReorderPointsTransform 482 # ReorderPointsTransform
410 483
411 Reorder the points such that points[from[i]] becomes points[to[i]] and 484 Reorder the points such that points[from[i]] becomes points[to[i]] and
  485 +vice versa
  486 +
412 487
413 * **file:** metadata/reorderpoints.cpp 488 * **file:** metadata/reorderpoints.cpp
414 * **inherits:** [UntrainableMetadataTransform](../cpp_api/untrainablemetadatatransform/untrainablemetadatatransform.md) 489 * **inherits:** [UntrainableMetadataTransform](../cpp_api/untrainablemetadatatransform/untrainablemetadatatransform.md)
415 -* **author:** Scott Klum 490 +* **author(s):** [Scott Klum][sklum]
416 * **properties:** None 491 * **properties:** None
417 492
418 493
@@ -420,11 +495,14 @@ Reorder the points such that points[from[i]] becomes points[to[i]] and @@ -420,11 +495,14 @@ Reorder the points such that points[from[i]] becomes points[to[i]] and
420 495
421 # RestoreMatTransform 496 # RestoreMatTransform
422 497
423 -Set the last matrix of the input template to a matrix stored as metadata with input propName. 498 +Set the last matrix of the input [Template](../cpp_api/template/template.md) to a matrix stored as metadata with input propName.
  499 +
  500 +Also removes the property from the [Template](../cpp_api/template/template.md)s metadata after restoring it.
  501 +
424 502
425 * **file:** metadata/restoremat.cpp 503 * **file:** metadata/restoremat.cpp
426 * **inherits:** [UntrainableMetaTransform](../cpp_api/untrainablemetatransform/untrainablemetatransform.md) 504 * **inherits:** [UntrainableMetaTransform](../cpp_api/untrainablemetatransform/untrainablemetatransform.md)
427 -* **author:** Charles Otto 505 +* **author(s):** [Charles Otto][caotto]
428 * **properties:** None 506 * **properties:** None
429 507
430 508
@@ -432,11 +510,12 @@ Set the last matrix of the input template to a matrix stored as metadata with in @@ -432,11 +510,12 @@ Set the last matrix of the input template to a matrix stored as metadata with in
432 510
433 # SaveMatTransform 511 # SaveMatTransform
434 512
435 -Store the last matrix of the input template as a metadata key with input property name. 513 +Store the last matrix of the input [Template](../cpp_api/template/template.md) as a metadata key with input property name.
  514 +
436 515
437 * **file:** metadata/savemat.cpp 516 * **file:** metadata/savemat.cpp
438 * **inherits:** [UntrainableMetaTransform](../cpp_api/untrainablemetatransform/untrainablemetatransform.md) 517 * **inherits:** [UntrainableMetaTransform](../cpp_api/untrainablemetatransform/untrainablemetatransform.md)
439 -* **author:** Charles Otto 518 +* **author(s):** [Charles Otto][caotto]
440 * **properties:** None 519 * **properties:** None
441 520
442 521
@@ -445,10 +524,11 @@ Store the last matrix of the input template as a metadata key with input propert @@ -445,10 +524,11 @@ Store the last matrix of the input template as a metadata key with input propert
445 # SelectPointsTransform 524 # SelectPointsTransform
446 525
447 Retains only landmarks/points at the provided indices 526 Retains only landmarks/points at the provided indices
  527 +
448 528
449 * **file:** metadata/selectpoints.cpp 529 * **file:** metadata/selectpoints.cpp
450 * **inherits:** [UntrainableMetadataTransform](../cpp_api/untrainablemetadatatransform/untrainablemetadatatransform.md) 530 * **inherits:** [UntrainableMetadataTransform](../cpp_api/untrainablemetadatatransform/untrainablemetadatatransform.md)
451 -* **author:** Brendan Klare 531 +* **author(s):** [Brendan Klare][bklare]
452 * **properties:** None 532 * **properties:** None
453 533
454 534
@@ -457,10 +537,11 @@ Retains only landmarks/points at the provided indices @@ -457,10 +537,11 @@ Retains only landmarks/points at the provided indices
457 # SetMetadataTransform 537 # SetMetadataTransform
458 538
459 Sets the metadata key/value pair. 539 Sets the metadata key/value pair.
  540 +
460 541
461 * **file:** metadata/setmetadata.cpp 542 * **file:** metadata/setmetadata.cpp
462 * **inherits:** [UntrainableMetadataTransform](../cpp_api/untrainablemetadatatransform/untrainablemetadatatransform.md) 543 * **inherits:** [UntrainableMetadataTransform](../cpp_api/untrainablemetadatatransform/untrainablemetadatatransform.md)
463 -* **author:** Josh Klontz 544 +* **author(s):** [Josh Klontz][jklontz]
464 * **properties:** None 545 * **properties:** None
465 546
466 547
@@ -469,10 +550,11 @@ Sets the metadata key/value pair. @@ -469,10 +550,11 @@ Sets the metadata key/value pair.
469 # SetPointsInRectTransform 550 # SetPointsInRectTransform
470 551
471 Set points relative to a rect 552 Set points relative to a rect
  553 +
472 554
473 * **file:** metadata/setpointsinrect.cpp 555 * **file:** metadata/setpointsinrect.cpp
474 * **inherits:** [UntrainableMetadataTransform](../cpp_api/untrainablemetadatatransform/untrainablemetadatatransform.md) 556 * **inherits:** [UntrainableMetadataTransform](../cpp_api/untrainablemetadatatransform/untrainablemetadatatransform.md)
475 -* **author:** Jordan Cheney 557 +* **author(s):** [Jordan Cheney][JordanCheney]
476 * **properties:** None 558 * **properties:** None
477 559
478 560
@@ -481,10 +563,11 @@ Set points relative to a rect @@ -481,10 +563,11 @@ Set points relative to a rect
481 # StasmTransform 563 # StasmTransform
482 564
483 Wraps STASM key point detector 565 Wraps STASM key point detector
  566 +
484 567
485 * **file:** metadata/stasm4.cpp 568 * **file:** metadata/stasm4.cpp
486 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md) 569 * **inherits:** [UntrainableTransform](../cpp_api/untrainabletransform/untrainabletransform.md)
487 -* **author:** Scott Klum 570 +* **author(s):** [Scott Klum][sklum]
488 * **properties:** None 571 * **properties:** None
489 572
490 573
@@ -492,11 +575,12 @@ Wraps STASM key point detector @@ -492,11 +575,12 @@ Wraps STASM key point detector
492 575
493 # StopWatchTransform 576 # StopWatchTransform
494 577
495 -Gives time elapsed over a specified transform as a function of both images (or frames) and pixels. 578 +Gives time elapsed over a specified [Transform](../cpp_api/transform/transform.md) as a function of both images (or frames) and pixels.
  579 +
496 580
497 * **file:** metadata/stopwatch.cpp 581 * **file:** metadata/stopwatch.cpp
498 * **inherits:** [MetaTransform](../cpp_api/metatransform/metatransform.md) 582 * **inherits:** [MetaTransform](../cpp_api/metatransform/metatransform.md)
499 -* **authors:** Jordan Cheney, Josh Klontz 583 +* **author(s):** [Jordan Cheney][JordanCheney], [Josh Klontz][jklontz]
500 * **properties:** None 584 * **properties:** None
501 585
502 586
docs/docs/api_docs/plugins/output.md
1 # DefaultOutput 1 # DefaultOutput
2 2
3 -Adaptor class -- write a matrix output using Format classes. 3 +Adaptor class -- write a matrix output using [Format](../cpp_api/format/format.md) classes.
  4 +
4 5
5 * **file:** output/default.cpp 6 * **file:** output/default.cpp
6 * **inherits:** [MatrixOutput](../cpp_api/matrixoutput/matrixoutput.md) 7 * **inherits:** [MatrixOutput](../cpp_api/matrixoutput/matrixoutput.md)
7 -* **author:** Charles Otto 8 +* **author(s):** [Charles Otto][caotto]
8 * **properties:** None 9 * **properties:** None
9 10
10 11
@@ -13,10 +14,11 @@ Adaptor class -- write a matrix output using Format classes. @@ -13,10 +14,11 @@ Adaptor class -- write a matrix output using Format classes.
13 # EmptyOutput 14 # EmptyOutput
14 15
15 Output to the terminal. 16 Output to the terminal.
  17 +
16 18
17 * **file:** output/empty.cpp 19 * **file:** output/empty.cpp
18 * **inherits:** [MatrixOutput](../cpp_api/matrixoutput/matrixoutput.md) 20 * **inherits:** [MatrixOutput](../cpp_api/matrixoutput/matrixoutput.md)
19 -* **author:** Josh Klontz 21 +* **author(s):** [Josh Klontz][jklontz]
20 * **properties:** None 22 * **properties:** None
21 23
22 24
@@ -25,10 +27,11 @@ Output to the terminal. @@ -25,10 +27,11 @@ Output to the terminal.
25 # bestOutput 27 # bestOutput
26 28
27 The highest scoring matches. 29 The highest scoring matches.
  30 +
28 31
29 * **file:** output/best.cpp 32 * **file:** output/best.cpp
30 * **inherits:** [Output](../cpp_api/output/output.md) 33 * **inherits:** [Output](../cpp_api/output/output.md)
31 -* **author:** Josh Klontz 34 +* **author(s):** [Josh Klontz][jklontz]
32 * **properties:** None 35 * **properties:** None
33 36
34 37
@@ -37,10 +40,11 @@ The highest scoring matches. @@ -37,10 +40,11 @@ The highest scoring matches.
37 # csvOutput 40 # csvOutput
38 41
39 Comma separated values output. 42 Comma separated values output.
  43 +
40 44
41 * **file:** output/csv.cpp 45 * **file:** output/csv.cpp
42 * **inherits:** [MatrixOutput](../cpp_api/matrixoutput/matrixoutput.md) 46 * **inherits:** [MatrixOutput](../cpp_api/matrixoutput/matrixoutput.md)
43 -* **author:** Josh Klontz 47 +* **author(s):** [Josh Klontz][jklontz]
44 * **properties:** None 48 * **properties:** None
45 49
46 50
@@ -49,10 +53,11 @@ Comma separated values output. @@ -49,10 +53,11 @@ Comma separated values output.
49 # evalOutput 53 # evalOutput
50 54
51 Evaluate the output matrix. 55 Evaluate the output matrix.
  56 +
52 57
53 * **file:** output/eval.cpp 58 * **file:** output/eval.cpp
54 * **inherits:** [MatrixOutput](../cpp_api/matrixoutput/matrixoutput.md) 59 * **inherits:** [MatrixOutput](../cpp_api/matrixoutput/matrixoutput.md)
55 -* **author:** Josh Klontz 60 +* **author(s):** [Josh Klontz][jklontz]
56 * **properties:** None 61 * **properties:** None
57 62
58 63
@@ -61,10 +66,11 @@ Evaluate the output matrix. @@ -61,10 +66,11 @@ Evaluate the output matrix.
61 # heatOutput 66 # heatOutput
62 67
63 Matrix-like output for heat maps. 68 Matrix-like output for heat maps.
  69 +
64 70
65 * **file:** output/heat.cpp 71 * **file:** output/heat.cpp
66 * **inherits:** [MatrixOutput](../cpp_api/matrixoutput/matrixoutput.md) 72 * **inherits:** [MatrixOutput](../cpp_api/matrixoutput/matrixoutput.md)
67 -* **author:** Scott Klum 73 +* **author(s):** [Scott Klum][sklum]
68 * **properties:** None 74 * **properties:** None
69 75
70 76
@@ -73,10 +79,11 @@ Matrix-like output for heat maps. @@ -73,10 +79,11 @@ Matrix-like output for heat maps.
73 # histOutput 79 # histOutput
74 80
75 Score histogram. 81 Score histogram.
  82 +
76 83
77 * **file:** output/hist.cpp 84 * **file:** output/hist.cpp
78 * **inherits:** [Output](../cpp_api/output/output.md) 85 * **inherits:** [Output](../cpp_api/output/output.md)
79 -* **author:** Josh Klontz 86 +* **author(s):** [Josh Klontz][jklontz]
80 * **properties:** None 87 * **properties:** None
81 88
82 89
@@ -85,10 +92,11 @@ Score histogram. @@ -85,10 +92,11 @@ Score histogram.
85 # meltOutput 92 # meltOutput
86 93
87 One score per row. 94 One score per row.
  95 +
88 96
89 * **file:** output/melt.cpp 97 * **file:** output/melt.cpp
90 * **inherits:** [MatrixOutput](../cpp_api/matrixoutput/matrixoutput.md) 98 * **inherits:** [MatrixOutput](../cpp_api/matrixoutput/matrixoutput.md)
91 -* **author:** Josh Klontz 99 +* **author(s):** [Josh Klontz][jklontz]
92 * **properties:** None 100 * **properties:** None
93 101
94 102
@@ -96,11 +104,12 @@ One score per row. @@ -96,11 +104,12 @@ One score per row.
96 104
97 # mtxOutput 105 # mtxOutput
98 106
99 - 107 +simmat output.
  108 +
100 109
101 * **file:** output/mtx.cpp 110 * **file:** output/mtx.cpp
102 * **inherits:** [Output](../cpp_api/output/output.md) 111 * **inherits:** [Output](../cpp_api/output/output.md)
103 -* **author:** Josh Klontz 112 +* **author(s):** [Josh Klontz][jklontz]
104 * **properties:** None 113 * **properties:** None
105 114
106 115
@@ -109,10 +118,11 @@ One score per row. @@ -109,10 +118,11 @@ One score per row.
109 # nullOutput 118 # nullOutput
110 119
111 Discards the scores. 120 Discards the scores.
  121 +
112 122
113 * **file:** output/null.cpp 123 * **file:** output/null.cpp
114 * **inherits:** [Output](../cpp_api/output/output.md) 124 * **inherits:** [Output](../cpp_api/output/output.md)
115 -* **author:** Josh Klontz 125 +* **author(s):** [Josh Klontz][jklontz]
116 * **properties:** None 126 * **properties:** None
117 127
118 128
@@ -121,10 +131,11 @@ Discards the scores. @@ -121,10 +131,11 @@ Discards the scores.
121 # rankOutput 131 # rankOutput
122 132
123 Outputs highest ranked matches with scores. 133 Outputs highest ranked matches with scores.
  134 +
124 135
125 * **file:** output/rank.cpp 136 * **file:** output/rank.cpp
126 * **inherits:** [MatrixOutput](../cpp_api/matrixoutput/matrixoutput.md) 137 * **inherits:** [MatrixOutput](../cpp_api/matrixoutput/matrixoutput.md)
127 -* **author:** Scott Klum 138 +* **author(s):** [Scott Klum][sklum]
128 * **properties:** None 139 * **properties:** None
129 140
130 141
@@ -133,10 +144,11 @@ Outputs highest ranked matches with scores. @@ -133,10 +144,11 @@ Outputs highest ranked matches with scores.
133 # rrOutput 144 # rrOutput
134 145
135 Rank retrieval output. 146 Rank retrieval output.
  147 +
136 148
137 * **file:** output/rr.cpp 149 * **file:** output/rr.cpp
138 * **inherits:** [MatrixOutput](../cpp_api/matrixoutput/matrixoutput.md) 150 * **inherits:** [MatrixOutput](../cpp_api/matrixoutput/matrixoutput.md)
139 -* **authors:** Josh Klontz, Scott Klum 151 +* **author(s):** [Josh Klontz][jklontz], [Scott Klum][sklum]
140 * **properties:** None 152 * **properties:** None
141 153
142 154
@@ -145,10 +157,11 @@ Rank retrieval output. @@ -145,10 +157,11 @@ Rank retrieval output.
145 # tailOutput 157 # tailOutput
146 158
147 The highest scoring matches. 159 The highest scoring matches.
  160 +
148 161
149 * **file:** output/tail.cpp 162 * **file:** output/tail.cpp
150 * **inherits:** [Output](../cpp_api/output/output.md) 163 * **inherits:** [Output](../cpp_api/output/output.md)
151 -* **author:** Josh Klontz 164 +* **author(s):** [Josh Klontz][jklontz]
152 * **properties:** None 165 * **properties:** None
153 166
154 167
@@ -157,10 +170,11 @@ The highest scoring matches. @@ -157,10 +170,11 @@ The highest scoring matches.
157 # txtOutput 170 # txtOutput
158 171
159 Text file output. 172 Text file output.
  173 +
160 174
161 * **file:** output/txt.cpp 175 * **file:** output/txt.cpp
162 * **inherits:** [MatrixOutput](../cpp_api/matrixoutput/matrixoutput.md) 176 * **inherits:** [MatrixOutput](../cpp_api/matrixoutput/matrixoutput.md)
163 -* **author:** Josh Klontz 177 +* **author(s):** [Josh Klontz][jklontz]
164 * **properties:** None 178 * **properties:** None
165 179
166 180
docs/docs/api_docs/plugins/video.md
1 # AggregateFrames 1 # AggregateFrames
2 2
3 -Passes along n sequential frames to the next transform. 3 +Passes along n sequential frames to the next [Transform](../cpp_api/transform/transform.md).
  4 +
  5 +For a video with m frames, AggregateFrames would create a total of m-n+1 sequences ([0,n] ... [m-n+1, m])
  6 +
4 7
5 * **file:** video/aggregate.cpp 8 * **file:** video/aggregate.cpp
6 * **inherits:** [TimeVaryingTransform](../cpp_api/timevaryingtransform/timevaryingtransform.md) 9 * **inherits:** [TimeVaryingTransform](../cpp_api/timevaryingtransform/timevaryingtransform.md)
7 -* **author:** Josh Klontz 10 +* **author(s):** [Josh Klontz][jklontz]
8 * **properties:** None 11 * **properties:** None
9 12
10 13
@@ -13,10 +16,13 @@ Passes along n sequential frames to the next transform. @@ -13,10 +16,13 @@ Passes along n sequential frames to the next transform.
13 # DropFrames 16 # DropFrames
14 17
15 Only use one frame every n frames. 18 Only use one frame every n frames.
  19 +
16 20
17 * **file:** video/drop.cpp 21 * **file:** video/drop.cpp
18 * **inherits:** [UntrainableMetaTransform](../cpp_api/untrainablemetatransform/untrainablemetatransform.md) 22 * **inherits:** [UntrainableMetaTransform](../cpp_api/untrainablemetatransform/untrainablemetatransform.md)
19 -* **author:** Austin Blanton 23 +* **author(s):** [Austin Blanton][imaus10
  24 +
  25 + For a video with m frames, DropFrames will pass on m/n frames.]
20 * **properties:** None 26 * **properties:** None
21 27
22 28
@@ -25,10 +31,11 @@ Only use one frame every n frames. @@ -25,10 +31,11 @@ Only use one frame every n frames.
25 # OpticalFlowTransform 31 # OpticalFlowTransform
26 32
27 Gets a one-channel dense optical flow from two images 33 Gets a one-channel dense optical flow from two images
  34 +
28 35
29 * **file:** video/opticalflow.cpp 36 * **file:** video/opticalflow.cpp
30 * **inherits:** [UntrainableMetaTransform](../cpp_api/untrainablemetatransform/untrainablemetatransform.md) 37 * **inherits:** [UntrainableMetaTransform](../cpp_api/untrainablemetatransform/untrainablemetatransform.md)
31 -* **author:** Austin Blanton 38 +* **author(s):** [Austin Blanton][imaus10]
32 * **properties:** None 39 * **properties:** None
33 40
34 41
docs/docs/contribute.md
  1 +So you want to contribute to OpenBR? That's awesome! These are some guidelines to follow so that your contribution fits nicely into our framework.
  2 +
  3 +## Contributing a Plugin
  4 +
  5 +You should consider contributing a plugin (or plugins!) if you have an algorithm you are interested in moving to OpenBR or you have an extension to an existing algorithm. Below are the steps for creating and contributing a plugin-
  6 +
  7 +1. Check out the [C++ Plugin API](api_docs/cpp_api.md) and decide which abstraction best suits the needs of your contribution
  8 +2. Select a module in the <tt>openbr/plugins/</tt> directory that describes your plugin, then create a new file in that module. Your file should have the same name as your plugin.
  9 +3. Implement your plugin! Make sure to have a look at the [Style Guide](#style-guide) so your code matches what's already there. This increases overall readability and makes it easier for newcomers to learn!
  10 +
  11 +### Common Mistakes
  12 +
  13 +Some common mistakes that will stop your plugin from working!
  14 +
  15 +* The entire plugin should be inside ```namespace br```
  16 +* Make sure your plugin declares ```Q_OBJECT``` right after it's definition
  17 +* Remember to call [BR_REGISTER](api_docs/cpp_api/factory/macros.md#br_register) at the end of your plugin!
  18 +* Remeber to add ```#include "module/filename.moc"``` at the very bottom of your file
  19 +
  20 +[MAddTransform](api_docs/plugins/imgproc.md#maddtransform) is a simple and clear example of how a [Transform](api_docs/cpp_api/transform/transform.md) should look.
  21 +
  22 +### Documenting
  23 +
  24 +Documenting your plugin is very important. OpenBR supports custom, doxygen-style, in-code comments to make documentation simple, clear, and easy. Comments should appear like
  25 +
  26 + /*!
  27 + * ...
  28 + */
  29 +
  30 +Comments are organized using tags, which are of the form <tt>\tag</tt>. There are a few **required** tags that all OpenBR transforms must have.
  31 +
  32 +Tag | Description
  33 +--- | ---
  34 +\ingroup | The abstraction that your plugin belongs to
  35 +\brief | A description of your plugin
  36 +\author | Your name
  37 +\cite | The citation link for the author. There must be citation tag for every author who appears. If you haven't already please add your information to <tt>openbr/docs/docs/contributors.md</tt>
  38 +\br_property | Describes a <tt>BR_PROPERTY</tt> of your plugin. This should take the format ```\br_property type name description```. In certain cases, for enumerations for example, it is beneficial to add a bulleted list to the description. This is done using a comma seperated **[]** list. ```[item1,item2,item3]``` will appear like <ul><li>item1</li><li>item2</li><li>item3</li></ul> Each property of the plugin must have a corresponding \br_property tag.
  39 +
  40 +The mimimum comment would look like this
  41 +
  42 + /*!
  43 + * \ingroup abstraction group
  44 + * \brief A description of the plugin
  45 + * \author Your Name \cite Your Citation
  46 + * \br_property percentage float The percentage of something
  47 + * \br_property enum choice A choice with possible values: [choice1, choice2, choice3]
  48 + */
  49 +
  50 +There are also a few **optional** tags to provide more information.
  51 +
  52 +Tag | Description
  53 +--- | ---
  54 +\br_link | A link to a webpage
  55 +\br_paper | An academic paper your plugin needs to cite. This is a multi-line tag- The first line should contain the paper authors, the second line should contain the paper title, and the third should contain other information about the paper (for example conference and year). See below for an example.
  56 +\br_related_plugin | Link to a related plugin within OpenBR. The full name of the plugin should be provided. Multiple plugins can be given and they should be seperated by a space.
  57 +\br_format | TODO define
  58 +
  59 +Optional tags could look like this
  60 +
  61 + /*!
  62 + * \br_link http://openbiometrics.org
  63 + * \br_paper Author1, Author2, Author3
  64 + * Paper Title
  65 + * Conference. Year
  66 + * \br_related_plugin ExampleTransform ExampleDistance ExampleGallery
  67 + */
  68 +
  69 +Finally, OpenBR supports automatic linking for abstractions found in comments. For example, Transform will automatically become [Transform](api_docs/cpp_api/transform/transform.md). Plural words like Transforms will also be linked but possesives like Tranform's will not.
  70 +
  71 +---
  72 +
  73 +## Contributing to the API
  74 +
  75 +You should contribute to the API if you want to add a new abstraction or extend an existing abstraction with new functionality. Please note, this occurs *very* *very* rarely. Our goal is to leave the core API as stable and consistent as possible and change only the surrounding plugins. If you believe your idea offers exciting new functionality or greatly increases efficiency please [open an issue](https://github.com/biometrics/openbr/issues) so that it can be discussed as a community.
0 \ No newline at end of file 76 \ No newline at end of file
docs/docs/contributors.md 0 โ†’ 100644
  1 +<!-- Contributors -->
  2 +
  3 +[jklontz]: https://github.com/jklontz "Joshua C. Klontz, jklontz@ieee.org"
  4 +[mburge]: https://github.com/mburge "Dr. Mark J. Burge mburge@gmail.com"
  5 +[bklare]: https://github.com/bklare "Dr. Brendan F. Klare brendan.klare@ieee.org"
  6 +[mmtaborsky]: https://github.com/mmtaborsky "M. M. Taborsky mmtaborsky@gmail.com"
  7 +[sklum]: https://github.com/sklum "Scott J. Klum scott.klum@gmail.com"
  8 +[caotto]: https://github.com/caotto "Charles A. Otto ottochar@gmail.com"
  9 +[lbestrowden]: https://github.com/lbestrowden "Lacey S. Best-Rowden bestrow1@msu.edu"
  10 +[imaus10]: https://github.com/imaus10 "Austin Van Blanton imaus10@gmail.com"
  11 +[dgcrouse]: https://github.com/dgcrouse "David G. Crouse dgcrouse@gmail.com"
  12 +[baba1472]: https://github.com/baba1472 "Babatunde Ogunfemi ogunfemi.b@gmail.com"
  13 +[jcheney]: https://github.com/JordanCheney "Jordan Cheney jordan.cheney@gmail.com"
docs/docs/docs/cpp_api/file/file.md deleted
1 -# File  
2 -  
3 -A file path with associated metadata.  
4 -  
5 -See:  
6 -  
7 -* [Members](members.md)  
8 -* [Constructors](constructors.md)  
9 -* [Static Functions](statics.md)  
10 -* [Functions](functions.md)  
11 -  
12 -The File is one of two important data structures in OpenBR (the [Template](../template/template.md) is the other).  
13 -It is typically used to store the path to a file on disk with associated metadata.  
14 -The ability to associate a key/value metadata table with the file helps keep the API simple while providing customizable behavior.  
15 -  
16 -When querying the value of a metadata key, the value will first try to be resolved against the file's private metadata table.  
17 -If the key does not exist in its local table then it will be resolved against the properties in the global Context.  
18 -By design file metadata may be set globally using Context::setProperty to operate on all files.  
19 -  
20 -Files have a simple grammar that allow them to be converted to and from strings.  
21 -If a string ends with a **]** or **)** then the text within the final **[]** or **()** are parsed as comma separated metadata fields.  
22 -By convention, fields within **[]** are expected to have the format <tt>[key1=value1, key2=value2, ..., keyN=valueN]</tt> where order is irrelevant.  
23 -Fields within **()** are expected to have the format <tt>(value1, value2, ..., valueN)</tt> where order matters and the key context dependent.  
24 -The left hand side of the string not parsed in a manner described above is assigned to [name](members.md#name).  
25 -  
26 -Values are not necessarily stored as strings in the metadata table.  
27 -The system will attempt to infer and convert them to their "native" type.  
28 -The conversion logic is as follows:  
29 -  
30 -1. If the value starts with **[** and ends with **]** then it is treated as a comma separated list and represented with [QVariantList][QVariantList]. Each value in the list is parsed recursively.  
31 -2. If the value starts with **(** and ends with **)** and contains four comma separated elements, each convertable to a floating point number, then it is represented with [QRectF][QRectF].  
32 -3. If the value starts with **(** and ends with **)** and contains two comma separated elements, each convertable to a floating point number, then it is represented with [QPointF][QPointF].  
33 -4. If the value is convertable to a floating point number then it is represented with <tt>float</tt>.  
34 -5. Otherwise, it is represented with [QString][QString].  
35 -  
36 -Metadata keys fall into one of two categories:  
37 -* camelCaseKeys are inputs that specify how to process the file.  
38 -* Capitalized_Underscored_Keys are outputs computed from processing the file.  
39 -  
40 -Below are some of the most commonly occurring standardized keys:  
41 -  
42 -Key | Value | Description  
43 ---- | ---- | -----------  
44 -name | QString | Contents of [name](members.md#name)  
45 -separator | QString | Separate [name](members.md#name) into multiple files  
46 -Index | int | Index of a template in a template list  
47 -Confidence | float | Classification/Regression quality  
48 -FTE | bool | Failure to enroll  
49 -FTO | bool | Failure to open  
50 -\*_X | float | Position  
51 -\*_Y | float | Position  
52 -\*_Width | float | Size  
53 -\*_Height | float | Size  
54 -\*_Radius | float | Size  
55 -Label | QString | Class label  
56 -Theta | float | Pose  
57 -Roll | float | Pose  
58 -Pitch | float | Pose  
59 -Yaw | float | Pose  
60 -Points | QList&lt;QPointF&gt; | List of unnamed points  
61 -Rects | QList&lt;Rect&gt; | List of unnamed rects  
62 -Age | float | Age used for demographic filtering  
63 -Gender | QString | Subject gender  
64 -Train | bool | The data is for training, as opposed to enrollment  
65 -_\* | \* | Reserved for internal use  
docs/docs/docs/cpp_api/transform/statics.md deleted
1 -## [Transform](transform.md) \*make([QString][QString] str, [QObject][QObject] \*parent) {: #make }  
2 -  
3 -Make a transform from a string. This function converts the abbreviation characters **+**, **/**, **{}**, **<\>**, and **()** into their full-length alternatives.  
4 -  
5 -Abbreviation | Translation  
6 ---- | ---  
7 -\+ | [PipeTransform](../../plugins/core.md#pipetransform). Each [Transform](transform.md) linked by a **+** is turned into a child of a single [PipeTransform](../../plugins/core.md#pipetransform). "Example1+Example2" becomes "Pipe([Example1,Example2])". [Templates](../template/template.md) are projected through the children of a pipe in series, the output of one become the input of the next.  
8 -/ | [ForkTransform](../../plugins/core.md#forktransform). Each [Transform](transform.md) linked by a **/** is turned into a child of a single [ForkTransform](../../plugins/core.md#forktransform). "Example1/Example2" becomes "Fork([Example1,Example2])". [Templates](../template/template.md) are projected the children of a fork in parallel, each receives the same input and the outputs are merged together.  
9 -\{\} | [CacheTransform](../../plugins/core.md#cachetransform). Can only surround a single [Transform](transform.md). "{Example}" becomes "Cache(Example)". The results of a cached [Transform](transform.md) are stored in a global cache using the [file](../object/members.md#file) name as a key.  
10 -<> | [LoadStoreTransform](../../plugins/core.md#loadstoretransform). Can only surround a single [Transform](transform.md). "<Example>" becomes "LoadStore(Example)". Serialize and store a [Transform](transform.md) after training or deserialize and load a [Transform](transform.md) before projecting.  
11 -() | Order of operations. Change the order of operations using parantheses.  
12 -  
13 -The parsed string is then passed to [Factory](../factory/factory.md)::[make](../factory/statics.md#make) to be turned into a transform.  
14 -  
15 -* **function definition:**  
16 -  
17 - static Transform *make(QString str, QObject *parent)  
18 -  
19 -* **parameters:**  
20 -  
21 - Parameter | Type | Description  
22 - --- | --- | ---  
23 - str | [QString][QString] | String describing the transform  
24 - parent | [QObject][QObject] \* | Parent of the object to be created  
25 -  
26 -* **output:** ([Transform](transform.md) \*) Returns a pointer to the [Transform](transform.md) described by the string  
27 -* **see:** [Factory::make](../factory/statics.md#make)  
28 -* **example:**  
29 -  
30 - Transform::make("Example1+Example2+<ModelFile>")->description(); // returns "Pipe(transforms=[Example1,Example2,LoadStore(ModelFile)])".  
31 -  
32 -  
33 -## [QSharedPointer][QSharedPointer]&lt;[Transform](transform.md)&gt; fromAlgorithm(const [QString][QString] &algorithm, bool preprocess=false) {: #fromalgorithm }  
34 -  
35 -Create a [Transform](transform.md) from an OpenBR algorithm string. The [Transform](transform.md) is created using everything to the left of a **:** or a **!** in the string.  
36 -  
37 -* **function definition:**  
38 -  
39 - static QSharedPointer<Transform> fromAlgorithm(const QString &algorithm, bool preprocess=false)  
40 -  
41 -* **parameters:**  
42 -  
43 - Parameter | Type | Description  
44 - --- | --- | ---  
45 - algorithm | const [QString][QString] & | Algorithm string to construct the [Transform](transform.md) from  
46 - preprocess | bool | (Optional) If true add a [StreamTransform](../../plugins/core.md#streamtransform) as the parent of the constructed [Transform](transform.md). Default is false.  
47 -  
48 -* **output:** ([QSharedPointer][QSharedPointer]&lt;[Transform](transform.md)&gt;) Returns a pointer to the [Transform](transform.md) described by the algorithm.  
49 -* **example:**  
50 -  
51 - Transform::fromAlgorithm("EnrollmentTransform:Distance")->decription(); // returns "EnrollmentTransform"  
52 - Transform::fromAlgorithm("EnrollmentTransform!DistanceTransform")->decription(); // returns "EnrollmentTransform"  
53 - Transform::fromAlgorithm("EnrollmentTransform")->decription(); // returns "EnrollmentTransform"  
54 -  
55 -## [QSharedPointer][QSharedPointer]<[Transform](transform.md)> fromComparison(const [QString][QString] &algorithm) {: #fromcomparison }  
56 -  
57 -Create a[Transform](transform.md) from an OpenBR algorithm string. The [Transform](transform.md) is created using everything to the right of a **:** or a **!** in the string. If the separating symbol is a **:** the string to the right describes a distance. It is converted to a [GalleryCompareTransform](../../plugins/core.md#gallerycomparetransform) with the distance stored as a property. If the separating symbol is a **!** the string already describes a transform and is unchanged.  
58 -  
59 -* **function definition:**  
60 -  
61 - static QSharedPointer<Transform> fromComparison(const QString &algorithm)  
62 -  
63 -* **parameters:**  
64 -  
65 - Parameter | Type | Description  
66 - --- | --- | ---  
67 - algorithm | const [QString][QString] & | Algorithm string to construct the [Transform](transform.md) from  
68 -  
69 -* **output:** ([QSharedPointer][QSharedPointer]&lt;[Transform](transform.md)&gt;) Returns a pointer to the [Transform](transform.md) described by the algorithm.  
70 -* **example:**  
71 -  
72 - Transform::fromAlgorithm("EnrollmentTransform:Distance")->description(); // returns "GalleryCompare(distance=Distance)""  
73 - Transform::fromAlgorithm("EnrollmentTransform!DistanceTransform"); // returns "DistanceTransform"  
74 -  
75 -  
76 -## [Transform](transform.md) \*deserialize([QDataStream][QDataStream] &stream) {: #deserialize }  
77 -  
78 -Deserialize a [Transform](transform.md) from a stream.  
79 -  
80 -* **function definition:**  
81 -  
82 - static Transform *deserialize(QDataStream &stream)  
83 -  
84 -* **parameters:**  
85 -  
86 - Parameter | Type | Description  
87 - --- | --- | ---  
88 - stream | [QDataStream][QDataStream] & | Stream containing the serialized transform  
89 -  
90 -* **output:** ([Transform](transform.md) \*) Returns the deserialized transform  
91 -  
92 -  
93 -## [Template](../template/template.md) &operator&gt;&gt;([Template](../template/template.md) &srcdst, const [Transform](transform.md) &f) {: #template-operater-gtgt-1 }  
94 -  
95 -Convenience function for [project](functions.md#project-1)  
96 -  
97 -* **function definition:**  
98 -  
99 - inline Template &operator>>(Template &srcdst, const Transform &f)  
100 -  
101 -* **parameters:**  
102 -  
103 - Parameter | Type | Description  
104 - --- | --- | ---  
105 - srcdst | [Template](../template/template.md) & | Input template. Will be overwritten with the output following call to [project](functions.md#project-1)  
106 - f | const [Transform](transform.md) & | [Transform](transform.md) to project through.  
107 -  
108 -* **output:** ([Template](../template/template.md) &) Returns the output of f::[project](functions.md#project-1)  
109 -* **example:**  
110 -  
111 - Template t("picture1.jpg");  
112 - Transform *transform = Transform::make("Example", NULL);  
113 -  
114 - t >> *transform; // projects t through Example. t is overwritten with the output of the project call  
115 -  
116 -<!--no italics* -->  
117 -  
118 -## [TemplateList](../templatelist/templatelist.md) &operator&gt;&gt;([TemplateList](../templatelist/templatelist.md) &srcdst, const [Transform](transform.md) &f) {: #template-operater-gtgt-2 }  
119 -  
120 -Convenience function for [project](functions.md#project-2)  
121 -  
122 -* **function definition:**  
123 -  
124 - inline TemplateList &operator>>(TemplateList &srcdst, const Transform &f)  
125 -  
126 -* **parameters:**  
127 -  
128 - Parameter | Type | Description  
129 - --- | --- | ---  
130 - srcdst | [TemplateList](../templatelist/templatelist.md) & | Input templates. Will be overwritten with the output following call to [project](functions.md#project-2)  
131 - f | const [Transform](transform.md) & | [Transform](transform.md) to project through.  
132 -  
133 -* **output:** ([TemplateList](../templatelist/templatelist.md) &) Returns the output of f::[project](functions.md#project-2)  
134 -* **example:**  
135 -  
136 - TemplateList tList(QList<Template>() << Template("picture1.jpg"));  
137 - Transform *transform = Transform::make("Example", NULL);  
138 -  
139 - tList >> *transform; // projects tList through Example. tList is overwritten with the output of the project call  
140 -  
141 -<!--no italics* -->  
142 -  
143 -## [QDataStream][QDataStream] &operator&lt;&lt;([QDataStream][QDataStream] &stream, const [Transform](transform.md) &f) {: #stream-operator-ltlt}  
144 -  
145 -Convenience function for [store](../object/functions.md#store)  
146 -  
147 -* **function definition:**  
148 -  
149 - inline QDataStream &operator<<(QDataStream &stream, const Transform &f)  
150 -  
151 -* **parameters:**  
152 -  
153 - Parameter | Type | Description  
154 - --- | --- | ---  
155 - stream | [QDataStream][QDataStream] & | Stream to store the transform in  
156 - f | const [Transform](transform.md) & | Transform to be stored  
157 -  
158 -* **output:** ([QDataStream][QDataStream] &) Returns the stream with the transform stored in it  
159 -* **example:**  
160 -  
161 - Transform *transform = Transform::make("Example(property1=value1,property2=value2)");  
162 -  
163 - QDataStream stream;  
164 - stream << *transform; // stores "Example(property1=value1,property2=value2)" in the stream  
165 -  
166 -<!--no italics* -->  
167 -  
168 -## [QDataStream][QDataStream] &operator&gt;&gt;([QDataStream][QDataStream] &stream, const [Transform](transform.md) &f) {: #stream-operator-gtgt}  
169 -  
170 -Convenience function for [load](../object/functions.md#load)  
171 -  
172 -* **function definition:**  
173 -  
174 - inline QDataStream &operator>>(QDataStream &stream, const Transform &f)  
175 -  
176 -* **parameters:**  
177 -  
178 - Parameter | Type | Description  
179 - --- | --- | ---  
180 - stream | [QDataStream][QDataStream] & | Stream to load the transform from  
181 - f | const [Transform](transform.md) & | Transform to store loaded information  
182 -  
183 -* **output:** ([QDataStream][QDataStream] &) Returns the stream without the transform data  
184 -* **example:**  
185 -  
186 - Transform *in = Transform::make("Example(property1=value1,property2=value2)");  
187 -  
188 - QDataStream stream;  
189 - stream << *in; // stores "Example(property1=value1,property2=value2)" in the stream  
190 -  
191 - Transform out;  
192 - stream >> out;  
193 - out->description(); // returns "Example(property1=value1,property2=value2)"  
docs/docs/misc/MBGC_file_overview.pdf 0 โ†’ 100644
No preview for this file type
docs/docs/technical.md
@@ -83,10 +83,10 @@ The *Biometric Evaluation Environment* (BEE) is a [NIST](http://www.nist.gov/ind @@ -83,10 +83,10 @@ The *Biometric Evaluation Environment* (BEE) is a [NIST](http://www.nist.gov/ind
83 83
84 OpenBR implements the following portions of the BEE specification: 84 OpenBR implements the following portions of the BEE specification:
85 85
86 -* Signature Set- A signature set (or *sigset*) is a [Gallery](api_docs/cpp_api/gallery/gallery.md) compliant **XML** file-list specified on page 9 of [MBGC File Overview](DOCUMENT ME) and implemented in [xmlGallery](api_docs/plugins/gallery.md#xmlgallery). Sigsets are identified with a **.xml** extension. 86 +* Signature Set- A signature set (or *sigset*) is a [Gallery](api_docs/cpp_api/gallery/gallery.md) compliant **XML** file-list specified on page 9 of the [MBGC File Overview](misc/MBGC_file_overview.pdf) and implemented in [xmlGallery](api_docs/plugins/gallery.md#xmlgallery). Sigsets are identified with a **.xml** extension.
87 87
88 -* Similarity Matrix- A similarity matrix (or *simmat*) is an [Output](api_docs/cpp_api/output/output.md) compliant binary score matrix specified on page 12 of [MBGC File Overview](DOCUMENT ME) and implemented in [mtxOutput](api_docs/plugins/output.md#mtxoutput). Simmats are identified with a **.mtx** extension. See [br_eval](api_docs/c_api/functions.md#br_eval) for more information. 88 +* Similarity Matrix- A similarity matrix (or *simmat*) is an [Output](api_docs/cpp_api/output/output.md) compliant binary score matrix specified on page 12 of the [MBGC File Overview](misc/MBGC_file_overview.pdf) and implemented in [mtxOutput](api_docs/plugins/output.md#mtxoutput). Simmats are identified with a **.mtx** extension. See [br_eval](api_docs/c_api/functions.md#br_eval) for more information.
89 89
90 -* Mask Matrix- A mask matrix (or *mask*) is a binary matrix specified on page 14 of [MBGC File Overview](DOCUMENT ME) identifying the ground truth genuines and impostors of a corresponding *simmat*. Masks are identified with a **.mask** extension. See [br_make_mask](api_docs/c_api/functions.md#br_make_mask) and [br_combine_masks](api_docs/c_api/functions.md#br_combine_masks) for more information. 90 +* Mask Matrix- A mask matrix (or *mask*) is a binary matrix specified on page 14 of the [MBGC File Overview](misc/MBGC_file_overview.pdf) identifying the ground truth genuines and impostors of a corresponding *simmat*. Masks are identified with a **.mask** extension. See [br_make_mask](api_docs/c_api/functions.md#br_make_mask) and [br_combine_masks](api_docs/c_api/functions.md#br_combine_masks) for more information.
91 91
92 --- 92 ---
docs/mkdocs.yml
@@ -6,6 +6,7 @@ copyright: 2012 The MITRE Corporation @@ -6,6 +6,7 @@ copyright: 2012 The MITRE Corporation
6 theme: readthedocs 6 theme: readthedocs
7 theme_dir: themes/readthedocs/ 7 theme_dir: themes/readthedocs/
8 links_file: docs/links.md 8 links_file: docs/links.md
  9 +contributors_file: docs/contributors.md
9 10
10 include_search: True 11 include_search: True
11 include_next_prev: False 12 include_next_prev: False
@@ -89,7 +90,6 @@ pages: @@ -89,7 +90,6 @@ pages:
89 - [api_docs/cpp_api/initializer/statics.md, Initializer, Static Functions] 90 - [api_docs/cpp_api/initializer/statics.md, Initializer, Static Functions]
90 - [api_docs/cpp_api/initializer/functions.md, Initializer, Functions] 91 - [api_docs/cpp_api/initializer/functions.md, Initializer, Functions]
91 92
92 -  
93 # Transform 93 # Transform
94 - [api_docs/cpp_api/transform/transform.md, C++ Plugin API, Transform] 94 - [api_docs/cpp_api/transform/transform.md, C++ Plugin API, Transform]
95 - [api_docs/cpp_api/transform/members.md, Transform, Members] 95 - [api_docs/cpp_api/transform/members.md, Transform, Members]
@@ -135,6 +135,12 @@ pages: @@ -135,6 +135,12 @@ pages:
135 # TimeVaryingTransform 135 # TimeVaryingTransform
136 - [api_docs/cpp_api/timevaryingtransform/timevaryingtransform.md, C++ Plugin API, TimeVaryingTransform] 136 - [api_docs/cpp_api/timevaryingtransform/timevaryingtransform.md, C++ Plugin API, TimeVaryingTransform]
137 137
  138 +# CompositeTransform
  139 +- [api_docs/cpp_api/compositetransform/compositetransform.md, C++ Plugin API, CompositeTransform]
  140 +
  141 +# WrapperTransform
  142 +- [api_docs/cpp_api/wrappertransform/wrappertransform.md, C++ Plugin API, WrapperTransform]
  143 +
138 # Distance 144 # Distance
139 - [api_docs/cpp_api/distance/distance.md, C++ Plugin API, Distance] 145 - [api_docs/cpp_api/distance/distance.md, C++ Plugin API, Distance]
140 - [api_docs/cpp_api/distance/members.md, Distance, Members] 146 - [api_docs/cpp_api/distance/members.md, Distance, Members]
@@ -181,6 +187,10 @@ pages: @@ -181,6 +187,10 @@ pages:
181 187
182 # FileGallery 188 # FileGallery
183 - [api_docs/cpp_api/filegallery/filegallery.md, C++ Plugin API, FileGallery] 189 - [api_docs/cpp_api/filegallery/filegallery.md, C++ Plugin API, FileGallery]
  190 +- [api_docs/cpp_api/filegallery/members.md, FileGallery, Members]
  191 +- [api_docs/cpp_api/filegallery/constructors.md, FileGallery, Constructors]
  192 +- [api_docs/cpp_api/filegallery/statics.md, FileGallery, Static Functions]
  193 +- [api_docs/cpp_api/filegallery/functions.md, FileGallery, Functions]
184 194
185 # Representation 195 # Representation
186 - [api_docs/cpp_api/representation/representation.md, C++ Plugin API, Representation] 196 - [api_docs/cpp_api/representation/representation.md, C++ Plugin API, Representation]
docs/scripts/check_links.py
@@ -72,13 +72,19 @@ def parse(path, html): @@ -72,13 +72,19 @@ def parse(path, html):
72 def check(headers, links): 72 def check(headers, links):
73 for f, file_links in links.items(): 73 for f, file_links in links.items():
74 for link in file_links: 74 for link in file_links:
75 - if link.http: 75 + if link.http: # Can't check links to other websites
76 continue 76 continue
77 77
78 link_file = f 78 link_file = f
79 if link.file: 79 if link.file:
80 link_file = link.file 80 link_file = link.file
81 81
  82 + if link_file.endswith('.pdf'):
  83 + if not os.path.exists(link_file):
  84 + print 'BAD PDF: ' + link_file + ' DOES NOT EXIST'
  85 + print
  86 + continue
  87 +
82 if link_file not in headers: 88 if link_file not in headers:
83 print 'BAD FILE IN ' + f + ':', link_file 89 print 'BAD FILE IN ' + f + ':', link_file
84 print 90 print
docs/scripts/generate_plugin_docs.py
1 -import os 1 +import os, sys
2 import re 2 import re
3 3
  4 +abstractions = ['FileList', 'File',
  5 + 'TemplateList', 'Template',
  6 + 'UntrainableTransform',
  7 + 'MetaTransform', 'UntrainableMetaTransform',
  8 + 'MetadataTransform', 'UntrainableMetadataTransform',
  9 + 'TimeVaryingTransform',
  10 + 'CompositeTransform', 'WrapperTransform',
  11 + 'Transform',
  12 + 'UntrainableDistance', 'Distance',
  13 + 'MatrixOutput', 'Output',
  14 + 'Format',
  15 + 'FileGallery', 'Gallery',
  16 + 'Representation',
  17 + 'Classifier'
  18 + ]
  19 +
4 def subfiles(path): 20 def subfiles(path):
5 return [name for name in os.listdir(path) if os.path.isfile(os.path.join(path, name)) and not name[0] == '.'] 21 return [name for name in os.listdir(path) if os.path.isfile(os.path.join(path, name)) and not name[0] == '.']
6 22
@@ -21,14 +37,15 @@ def parse(group): @@ -21,14 +37,15 @@ def parse(group):
21 if len(clss) == 0 or 'class' not in clss: 37 if len(clss) == 0 or 'class' not in clss:
22 return None 38 return None
23 39
24 - blocks = docsMatch.group().split('\\')[1:] 40 + clean_docs = docsMatch.group()[3:-2].replace('*', ' ').strip()
  41 + blocks = clean_docs.split('\\')[1:]
25 if len(blocks) == 0: 42 if len(blocks) == 0:
26 return None 43 return None
27 44
28 attributes = {} 45 attributes = {}
29 for block in blocks: 46 for block in blocks:
30 key = block[:block.find(' ')] 47 key = block[:block.find(' ')]
31 - value = block[block.find(' '):].split('\n')[0].strip() 48 + value = block[block.find(' '):].strip()
32 if key in attributes: 49 if key in attributes:
33 attributes[key].append(value) 50 attributes[key].append(value)
34 else: 51 else:
@@ -38,51 +55,91 @@ def parse(group): @@ -38,51 +55,91 @@ def parse(group):
38 attributes['Parent'] = clss[clss.find('public')+6:].strip().strip(',') # Handles the edge case of multiple inheritence 55 attributes['Parent'] = clss[clss.find('public')+6:].strip().strip(',') # Handles the edge case of multiple inheritence
39 return attributes 56 return attributes
40 57
41 -def parseInheritance(inheritance):  
42 - abstractions = ['Transform', 'UntrainableTransform',  
43 - 'MetaTransform', 'UntrainableMetaTransform',  
44 - 'MetadataTransform', 'UntrainableMetadataTransform',  
45 - 'TimeVaryingTransform',  
46 - 'Distance', 'UntrainableDistance',  
47 - 'Output', 'MatrixOutput',  
48 - 'Format',  
49 - 'Gallery', 'FileGallery',  
50 - 'Representation',  
51 - 'Classifier'  
52 - ] 58 +def parseBrief(briefs):
  59 + if not briefs:
  60 + print 'All plugins need a description!'
  61 + sys.exit(1)
  62 +
  63 + output = ""
  64 + for brief in briefs:
  65 + for abstraction in abstractions:
  66 + regex = re.compile('\s' + abstraction + "'?s?")
  67 +
  68 + matches = regex.finditer(brief)
  69 + for match in matches:
  70 + name = ' [' + abstraction + ']'
  71 + link = '(../cpp_api/' + abstraction.lower() + '/' + abstraction.lower() + '.md)'
  72 + brief = brief.replace(match.group(), name + link).strip() # strip removes a possible leading whitespace
  73 +
  74 + for line in brief.split('\n'):
  75 + if not line.strip():
  76 + output += "\n"
  77 + else:
  78 + output += line.strip() + "\n"
  79 +
  80 + output += ' '
  81 +
  82 + return output + '\n\n'
53 83
  84 +def parseInheritance(inheritance):
54 if inheritance in abstractions: 85 if inheritance in abstractions:
55 return '../cpp_api/' + inheritance.lower() + '/' + inheritance.lower() + '.md' 86 return '../cpp_api/' + inheritance.lower() + '/' + inheritance.lower() + '.md'
56 else: # Not an abstraction must inherit in the local file! 87 else: # Not an abstraction must inherit in the local file!
57 return '#' + inheritance.lower() 88 return '#' + inheritance.lower()
58 89
59 -def parseSees(sees):  
60 - if not sees: 90 +def parseLinks(links):
  91 + if not links:
61 return "" 92 return ""
62 93
63 output = "* **see:**" 94 output = "* **see:**"
64 - if len(sees) > 1: 95 + if len(links) > 1:
65 output += "\n\n" 96 output += "\n\n"
66 - for see in sees:  
67 - output += "\t* [" + see + "](" + see + ")\n" 97 + for link in links:
  98 + output += "\t* [" + link + "](" + link + ")\n"
68 output += "\n" 99 output += "\n"
69 else: 100 else:
70 - link = sees[0]  
71 - if not 'http' in link:  
72 - link = '#' + link.lower()  
73 - output += " [" + sees[0] + "](" + link + ")\n" 101 + output += " [" + links[0] + "](" + links[0] + ")\n"
74 102
75 return output 103 return output
76 104
77 -def parseAuthors(authors): 105 +def parsePapers(papers):
  106 + if not papers:
  107 + return ""
  108 +
  109 + output = "* **read:**\n\n"
  110 + for i in range(len(papers)):
  111 + info = papers[i].split('\n')
  112 + authors = info[0].strip()
  113 + title = None
  114 + other = None
  115 + if len(info) >= 2:
  116 + title = info[1].strip()
  117 + if len(info) >= 3:
  118 + other = info[2].strip()
  119 +
  120 + output += "\t" + str(i+1) + ". *" + authors + "*\n"
  121 + if title:
  122 + output += "\t **" + title + "**\n"
  123 + if other:
  124 + output += "\t " + other + "\n"
  125 + output += "\n"
  126 +
  127 + return output
  128 +
  129 +def parseAuthors(authors, citations):
78 if not authors: 130 if not authors:
79 - return "* **authors:** None\n" 131 + print 'All plugins need an author!'
  132 + sys.exit(1)
80 133
81 - output = "* **author"  
82 - if len(authors) > 1:  
83 - output += "s:** " + ", ".join(authors) + "\n"  
84 - else:  
85 - output += ":** " + authors[0] + "\n" 134 + if len(authors) != len(citations):
  135 + print 'Different number of authors and citations!'
  136 + print authors, citations
  137 + return "* **authors:** PARSING ERROR\n"
  138 +
  139 + output = "* **author(s):** "
  140 + for i in range(len(authors)):
  141 + output += "[" + authors[i] + "][" + citations[i] + "], "
  142 + output = output[:-2] + "\n"
86 143
87 return output 144 return output
88 145
@@ -91,8 +148,8 @@ def parseProperties(properties): @@ -91,8 +148,8 @@ def parseProperties(properties):
91 return "* **properties:** None\n\n" 148 return "* **properties:** None\n\n"
92 149
93 output = "* **properties:**\n\n" 150 output = "* **properties:**\n\n"
94 - output += "Property | Type | Description\n"  
95 - output += "--- | --- | ---\n" 151 + output += "\tProperty | Type | Description\n"
  152 + output += "\t--- | --- | ---\n"
96 for prop in properties: 153 for prop in properties:
97 split = prop.split(' ') 154 split = prop.split(' ')
98 ty = split[0] 155 ty = split[0]
@@ -115,13 +172,46 @@ def parseProperties(properties): @@ -115,13 +172,46 @@ def parseProperties(properties):
115 desc = before.strip() + table + after.strip() 172 desc = before.strip() + table + after.strip()
116 table_match = table_regex.search(desc) 173 table_match = table_regex.search(desc)
117 174
118 - output += name + " | " + ty + " | " + desc + "\n" 175 + output += "\t" + name + " | " + ty + " | " + desc + "\n"
119 176
120 return output 177 return output
121 178
  179 +def parseFormats(formats):
  180 + if not formats:
  181 + return ""
  182 +
  183 + output = "* **format:** "
  184 + for f in formats:
  185 + in_raw = False
  186 + for line in f.split('\n'):
  187 + if not line.strip():
  188 + output += "<pre><code>" if not in_raw else "</code></pre>"
  189 + in_raw = not in_raw
  190 + continue
  191 +
  192 + clean_line = line.strip()
  193 +
  194 + # <> are often used describing formats. Unfortunately they are also html tags.
  195 + # So we need to replace them with safe alternatives
  196 + if '<' in clean_line:
  197 + clean_line = clean_line.replace('<', '&lt;')
  198 + if '>' in clean_line:
  199 + clean_line = clean_line.replace('>', '&gt;')
  200 +
  201 + output += clean_line
  202 + if in_raw:
  203 + output += "\n"
  204 + else:
  205 + output += ' '
  206 +
  207 + if in_raw:
  208 + output += "</code></pre>"
  209 +
  210 + return output + "\n"
  211 +
122 def main(): 212 def main():
123 plugins_dir = '../../openbr/plugins/' 213 plugins_dir = '../../openbr/plugins/'
124 - output_dir = '../docs/docs/plugins/' 214 + output_dir = '../docs/api_docs/plugins/'
125 215
126 for module in subdirs(plugins_dir): 216 for module in subdirs(plugins_dir):
127 if module == "cmake": 217 if module == "cmake":
@@ -143,14 +233,18 @@ def main(): @@ -143,14 +233,18 @@ def main():
143 if not attributes or (attributes and attributes["Parent"] == "Initializer"): 233 if not attributes or (attributes and attributes["Parent"] == "Initializer"):
144 continue 234 continue
145 235
  236 + print 'documenting ' + module + "/" + plugin + '...'
  237 +
146 plugin_string = "# " + attributes["Name"] + "\n\n" 238 plugin_string = "# " + attributes["Name"] + "\n\n"
147 - plugin_string += ' '.join([brief for brief in attributes["brief"]]) + "\n\n" 239 + plugin_string += parseBrief(attributes.get("brief", None))
148 plugin_string += "* **file:** " + os.path.join(module, plugin) + "\n" 240 plugin_string += "* **file:** " + os.path.join(module, plugin) + "\n"
149 plugin_string += "* **inherits:** [" + attributes["Parent"] + "](" + parseInheritance(attributes["Parent"]) + ")\n" 241 plugin_string += "* **inherits:** [" + attributes["Parent"] + "](" + parseInheritance(attributes["Parent"]) + ")\n"
150 242
151 - plugin_string += parseSees(attributes.get("see", None))  
152 - plugin_string += parseAuthors(attributes.get("author", None))  
153 - plugin_string += parseProperties(attributes.get("property", None)) 243 + plugin_string += parseAuthors(attributes.get("author", None), attributes.get("cite", None))
  244 + plugin_string += parseLinks(attributes.get("br_link", None))
  245 + plugin_string += parsePapers(attributes.get("br_paper", None))
  246 + plugin_string += parseFormats(attributes.get("br_format", None))
  247 + plugin_string += parseProperties(attributes.get("br_property", None))
154 248
155 plugin_string += "\n---\n\n" 249 plugin_string += "\n---\n\n"
156 250
docs/themes/readthedocs/css/theme_extra.css
@@ -10,6 +10,9 @@ h3, h4, h5, h6 { @@ -10,6 +10,9 @@ h3, h4, h5, h6 {
10 font-weight: 300 10 font-weight: 300
11 } 11 }
12 12
  13 +p {
  14 + font-size: 90%;
  15 +}
13 /* 16 /*
14 * Sphinx doesn't have support for section dividers like we do in 17 * Sphinx doesn't have support for section dividers like we do in
15 * MkDocs, this styles the section titles in the nav 18 * MkDocs, this styles the section titles in the nav
openbr/openbr.h
@@ -23,427 +23,96 @@ @@ -23,427 +23,96 @@
23 extern "C" { 23 extern "C" {
24 #endif 24 #endif
25 25
26 -/*!  
27 - * \brief Wraps br::Context::about()  
28 - * \see br_version  
29 - */ 26 +
30 BR_EXPORT const char *br_about(); 27 BR_EXPORT const char *br_about();
31 28
32 -/*!  
33 - * \brief Wraps br::Cat()  
34 - */  
35 BR_EXPORT void br_cat(int num_input_galleries, const char *input_galleries[], const char *output_gallery); 29 BR_EXPORT void br_cat(int num_input_galleries, const char *input_galleries[], const char *output_gallery);
36 30
37 -/*!  
38 - * \brief Removes duplicate templates in a gallery.  
39 - * \param input_gallery Gallery to be deduplicated.  
40 - * \param output_gallery Deduplicated gallery.  
41 - * \param threshold Comparisons with a match score >= this value are designated to be duplicates.  
42 - * \note If a gallery contains n duplicates, the first n-1 duplicates in the gallery will be removed and the nth will be kept.  
43 - * \note Users are encouraged to use binary gallery formats as the entire gallery is read into memory in one call to Gallery::read.  
44 - */  
45 BR_EXPORT void br_deduplicate(const char *input_gallery, const char *output_gallery, const char *threshold); 31 BR_EXPORT void br_deduplicate(const char *input_gallery, const char *output_gallery, const char *threshold);
46 32
47 -/*!  
48 - * \brief Clusters one or more similarity matrices into a list of subjects.  
49 - *  
50 - * A similarity matrix is a type of br::Output. The current clustering algorithm is a simplified implementation of \cite zhu11.  
51 - * \param num_simmats Size of \c simmats.  
52 - * \param simmats Array of \ref simmat composing one large self-similarity matrix arranged in row major order.  
53 - * \param aggressiveness The higher the aggressiveness the larger the clusters. Suggested range is [0,10].  
54 - * \param csv The cluster results file to generate. Results are stored one row per cluster and use gallery indices.  
55 - */  
56 BR_EXPORT void br_cluster(int num_simmats, const char *simmats[], float aggressiveness, const char *csv); 33 BR_EXPORT void br_cluster(int num_simmats, const char *simmats[], float aggressiveness, const char *csv);
57 34
58 -/*!  
59 - * \brief Combines several equal-sized mask matrices.  
60 - * \param num_input_masks Size of \c input_masks  
61 - * \param input_masks Array of \ref mask to combine.  
62 - * All matrices must have the same dimensions.  
63 - * \param output_mask The file to contain the resulting \ref mask.  
64 - * \param method Either:  
65 - * - \c And - Ignore comparison if \em any input masks ignore.  
66 - * - \c Or - Ignore comparison if \em all input masks ignore.  
67 - * \note A comparison may not be simultaneously identified as both a genuine and an impostor by different input masks.  
68 - * \see br_make_mask  
69 - */  
70 BR_EXPORT void br_combine_masks(int num_input_masks, const char *input_masks[], const char *output_mask, const char *method); 35 BR_EXPORT void br_combine_masks(int num_input_masks, const char *input_masks[], const char *output_mask, const char *method);
71 36
72 -/*!  
73 - * \brief Compares each template in the query gallery to each template in the target gallery.  
74 - * \param target_gallery The br::Gallery file whose templates make up the columns of the output.  
75 - * \param query_gallery The br::Gallery file whose templates make up the rows of the output.  
76 - * A value of '.' reuses the target gallery as the query gallery.  
77 - * \param output Optional br::Output file to contain the results of comparing the templates.  
78 - * The default behavior is to print scores to the terminal.  
79 - * \see br_enroll  
80 - */  
81 BR_EXPORT void br_compare(const char *target_gallery, const char *query_gallery, const char *output = ""); 37 BR_EXPORT void br_compare(const char *target_gallery, const char *query_gallery, const char *output = "");
82 38
83 -/*!  
84 - * \brief Convenience function for comparing to multiple targets.  
85 - * \see br_compare  
86 - */  
87 BR_EXPORT void br_compare_n(int num_targets, const char *target_galleries[], const char *query_gallery, const char *output); 39 BR_EXPORT void br_compare_n(int num_targets, const char *target_galleries[], const char *query_gallery, const char *output);
88 40
89 -/*!  
90 - * \brief DOCUMENT ME!  
91 - */  
92 BR_EXPORT void br_pairwise_compare(const char *target_gallery, const char *query_gallery, const char *output = ""); 41 BR_EXPORT void br_pairwise_compare(const char *target_gallery, const char *query_gallery, const char *output = "");
93 42
94 -/*!  
95 - * \brief Wraps br::Convert()  
96 - */  
97 BR_EXPORT void br_convert(const char *file_type, const char *input_file, const char *output_file); 43 BR_EXPORT void br_convert(const char *file_type, const char *input_file, const char *output_file);
98 44
99 -/*!  
100 - * \brief Constructs template(s) from an input.  
101 - * \param input The br::Input set of images to enroll.  
102 - * \param gallery The br::Gallery file to contain the enrolled templates.  
103 - * By default the gallery will be held in memory and \em input can used as a gallery in \ref br_compare.  
104 - * \see br_enroll_n  
105 - */  
106 BR_EXPORT void br_enroll(const char *input, const char *gallery = ""); 45 BR_EXPORT void br_enroll(const char *input, const char *gallery = "");
107 46
108 -/*!  
109 - * \brief Convenience function for enrolling multiple inputs.  
110 - * \see br_enroll  
111 - */  
112 BR_EXPORT void br_enroll_n(int num_inputs, const char *inputs[], const char *gallery = ""); 47 BR_EXPORT void br_enroll_n(int num_inputs, const char *inputs[], const char *gallery = "");
113 48
114 -/*!  
115 - * \brief A naive alternative to \ref br_enroll.  
116 - */  
117 BR_EXPORT void br_project(const char *input, const char *output); 49 BR_EXPORT void br_project(const char *input, const char *output);
118 50
119 -/*!  
120 - * \brief Creates a \c .csv file containing performance metrics from evaluating the similarity matrix using the mask matrix.  
121 - * \param simmat The \ref simmat to use.  
122 - * \param mask The \ref mask to use.  
123 - * \param csv Optional \c .csv file to contain performance metrics.  
124 - * \param matches Optional integer number of matches to output around the EER, defualts to 0.  
125 - * \return True accept rate at a false accept rate of one in one thousand.  
126 - * \see br_plot  
127 - */  
128 BR_EXPORT float br_eval(const char *simmat, const char *mask, const char *csv = "", int matches = 0); 51 BR_EXPORT float br_eval(const char *simmat, const char *mask, const char *csv = "", int matches = 0);
129 52
130 -/*!  
131 - * \brief Evaluates the similarity matrix using the mask matrix. Function aborts ff TAR @ FAR = 0.001 does not meet an expected performance value  
132 - * \param simmat The \ref simmat to use.  
133 - * \param mask The \ref mask to use.  
134 - * \param accuracy Desired true accept rate at false accept rate of one in one thousand.  
135 - */  
136 - BR_EXPORT void br_assert_eval(const char *simmat, const char *mask, const float accuracy);  
137 -  
138 -/*!  
139 - * \brief Creates a \c .csv file containing performance metrics from evaluating the similarity matrix using galleries containing ground truth labels  
140 - * \param simmat The \ref simmat to use.  
141 - * \param target the name of a gallery containing metadata for the target set.  
142 - * \param query the name of a gallery containing metadata for the query set.  
143 - * \param csv Optional \c .csv file to contain performance metrics.  
144 - * \return True accept rate at a false accept rate of one in one thousand.  
145 - * \see br_plot  
146 - */ 53 +BR_EXPORT void br_assert_eval(const char *simmat, const char *mask, const float accuracy);
  54 +
147 BR_EXPORT float br_inplace_eval(const char * simmat, const char *target, const char *query, const char *csv = ""); 55 BR_EXPORT float br_inplace_eval(const char * simmat, const char *target, const char *query, const char *csv = "");
148 56
149 -/*!  
150 - * \brief Evaluates and prints classification accuracy to terminal.  
151 - * \param predicted_gallery The predicted br::Gallery.  
152 - * \param truth_gallery The ground truth br::Gallery.  
153 - * \param predicted_property (Optional) which metadata key to use from <i>predicted_gallery</i>.  
154 - * \param truth_property (Optional) which metadata key to use from <i>truth_gallery</i>.  
155 - */  
156 BR_EXPORT void br_eval_classification(const char *predicted_gallery, const char *truth_gallery, const char *predicted_property = "", const char *truth_property = ""); 57 BR_EXPORT void br_eval_classification(const char *predicted_gallery, const char *truth_gallery, const char *predicted_property = "", const char *truth_property = "");
157 58
158 -/*!  
159 - * \brief Evaluates and prints clustering accuracy to the terminal.  
160 - * \param csv The cluster results file.  
161 - * \param gallery The br::Gallery used to generate the \ref simmat that was clustered.  
162 - * \param truth_property (Optional) which metadata key to use from <i>gallery</i/>, defaults to Label  
163 - * \see br_cluster  
164 - */  
165 BR_EXPORT void br_eval_clustering(const char *csv, const char *gallery, const char * truth_property); 59 BR_EXPORT void br_eval_clustering(const char *csv, const char *gallery, const char * truth_property);
166 60
167 -/*!  
168 - * \brief Evaluates and prints detection accuracy to terminal.  
169 - * \param predicted_gallery The predicted br::Gallery.  
170 - * \param truth_gallery The ground truth br::Gallery.  
171 - * \param csv Optional \c .csv file to contain performance metrics.  
172 - * \param normalize Optional \c bool flag to normalize predicted bounding boxes for improved detection.  
173 - * \return Average detection bounding box overlap.  
174 - */  
175 BR_EXPORT float br_eval_detection(const char *predicted_gallery, const char *truth_gallery, const char *csv = "", bool normalize = false, int minSize = 0, int maxSize = 0); 61 BR_EXPORT float br_eval_detection(const char *predicted_gallery, const char *truth_gallery, const char *csv = "", bool normalize = false, int minSize = 0, int maxSize = 0);
176 62
177 -/*!  
178 - * \brief Evaluates and prints landmarking accuracy to terminal.  
179 - * \param predicted_gallery The predicted br::Gallery.  
180 - * \param truth_gallery The ground truth br::Gallery.  
181 - * \param csv Optional \c .csv file to contain performance metrics.  
182 - * \param normalization_index_a Optional first index in the list of points to use for normalization.  
183 - * \param normalization_index_b Optional second index in the list of points to use for normalization.  
184 - * \param sample_index Optional index for sample landmark image in ground truth gallery.  
185 - * \param total_examples Optional number of accurate and inaccurate examples to display.  
186 - */  
187 BR_EXPORT float br_eval_landmarking(const char *predicted_gallery, const char *truth_gallery, const char *csv = "", int normalization_index_a = 0, int normalization_index_b = 1, int sample_index = 0, int total_examples = 5); 63 BR_EXPORT float br_eval_landmarking(const char *predicted_gallery, const char *truth_gallery, const char *csv = "", int normalization_index_a = 0, int normalization_index_b = 1, int sample_index = 0, int total_examples = 5);
188 64
189 -/*!  
190 - * \brief Evaluates regression accuracy to disk.  
191 - * \param predicted_gallery The predicted br::Gallery.  
192 - * \param truth_gallery The ground truth br::Gallery.  
193 - * \param predicted_property (Optional) which metadata key to use from <i>predicted_gallery</i>.  
194 - * \param truth_property (Optional) which metadata key to use from <i>truth_gallery</i>.  
195 - */  
196 BR_EXPORT void br_eval_regression(const char *predicted_gallery, const char *truth_gallery, const char *predicted_property = "", const char *truth_property = ""); 65 BR_EXPORT void br_eval_regression(const char *predicted_gallery, const char *truth_gallery, const char *predicted_property = "", const char *truth_property = "");
197 66
198 -/*!  
199 - * \brief Wraps br::Context::finalize()  
200 - * \see br_initialize  
201 - */  
202 BR_EXPORT void br_finalize(); 67 BR_EXPORT void br_finalize();
203 68
204 -/*!  
205 - * \brief Perform score level fusion on similarity matrices.  
206 - * \param num_input_simmats Size of \em input_simmats.  
207 - * \param input_simmats Array of \ref simmat. All simmats must have the same dimensions.  
208 - * \param normalization Valid options are:  
209 - * - \c None - No score normalization.  
210 - * - \c MinMax - Scores normalized to [0,1].  
211 - * - \c ZScore - Scores normalized to a standard normal curve.  
212 - * \param fusion Valid options are:  
213 - * - \c Min - Uses the minimum score.  
214 - * - \c Max - Uses the maximum score.  
215 - * - \c Sum - Sums the scores. Sums can also be weighted: <tt>SumW1:W2:...:Wn</tt>.  
216 - * - \c Replace - Replaces scores in the first matrix with scores in the second matrix when the mask is set.  
217 - * \param output_simmat \ref simmat to contain the fused scores.  
218 - */  
219 BR_EXPORT void br_fuse(int num_input_simmats, const char *input_simmats[], 69 BR_EXPORT void br_fuse(int num_input_simmats, const char *input_simmats[],
220 const char *normalization, const char *fusion, const char *output_simmat); 70 const char *normalization, const char *fusion, const char *output_simmat);
221 71
222 -/*!  
223 - * \brief Wraps br::Context::initialize()  
224 - * \see br_finalize  
225 - */  
226 BR_EXPORT void br_initialize(int &argc, char *argv[], const char *sdk_path = "", bool use_gui = false); 72 BR_EXPORT void br_initialize(int &argc, char *argv[], const char *sdk_path = "", bool use_gui = false);
227 -/*!  
228 - * \brief Wraps br::Context::initialize() with default arguments.  
229 - * \see br_finalize  
230 - */ 73 +
231 BR_EXPORT void br_initialize_default(); 74 BR_EXPORT void br_initialize_default();
232 75
233 -/*!  
234 - * \brief Wraps br::IsClassifier()  
235 - */  
236 BR_EXPORT bool br_is_classifier(const char *algorithm); 76 BR_EXPORT bool br_is_classifier(const char *algorithm);
237 77
238 -/*!  
239 - * \brief Constructs a \ref mask from target and query inputs.  
240 - * \param target_input The target br::Input.  
241 - * \param query_input The query br::Input.  
242 - * \param mask The file to contain the resulting \ref mask.  
243 - * \see br_combine_masks  
244 - */  
245 BR_EXPORT void br_make_mask(const char *target_input, const char *query_input, const char *mask); 78 BR_EXPORT void br_make_mask(const char *target_input, const char *query_input, const char *mask);
246 79
247 -/*!  
248 - * \brief Constructs a \ref mask from target and query inputs considering the target and input sets to be definint pairwise comparisons  
249 - * \param target_input The target br::Input.  
250 - * \param query_input The query br::Input.  
251 - * \param mask The file to contain the resulting \ref mask.  
252 - * \see br_combine_masks  
253 - */  
254 BR_EXPORT void br_make_pairwise_mask(const char *target_input, const char *query_input, const char *mask); 80 BR_EXPORT void br_make_pairwise_mask(const char *target_input, const char *query_input, const char *mask);
255 81
256 -/*!  
257 - * \brief Returns the most recent line sent to stderr.  
258 - * \note \ref input_string_buffer  
259 - * \see br_progress br_time_remaining  
260 - */  
261 BR_EXPORT int br_most_recent_message(char * buffer, int buffer_length); 82 BR_EXPORT int br_most_recent_message(char * buffer, int buffer_length);
262 83
263 -/*!  
264 - * \brief Returns names and parameters for the requested objects.  
265 - *  
266 - * Each object is \c \\n seperated. Arguments are seperated from the object name with a \c \\t.  
267 - * \param abstractions Regular expression of the abstractions to search.  
268 - * \param implementations Regular expression of the implementations to search.  
269 - * \param parameters Include parameters after object name.  
270 - * \note \ref input_string_buffer  
271 - * \note This function uses Qt's <a href="http://doc.qt.digia.com/stable/qregexp.html">QRegExp</a> syntax.  
272 - */  
273 BR_EXPORT int br_objects(char * buffer, int buffer_length, const char *abstractions = ".*", const char *implementations = ".*", bool parameters = true); 84 BR_EXPORT int br_objects(char * buffer, int buffer_length, const char *abstractions = ".*", const char *implementations = ".*", bool parameters = true);
274 85
275 -/*!  
276 - * \brief Renders recognition performance figures for a set of <tt>.csv</tt> files created by \ref br_eval.  
277 - *  
278 - * In order of their output, the figures are:  
279 - * -# Metadata table  
280 - * -# Receiver Operating Characteristic (ROC)  
281 - * -# Detection Error Tradeoff (DET)  
282 - * -# Score Distribution (SD) histogram  
283 - * -# True Accept Rate Bar Chart (BC)  
284 - * -# Cumulative Match Characteristic (CMC)  
285 - * -# Error Rate (ERR) curve  
286 - *  
287 - * Two files will be created:  
288 - * - <i>destination</i><tt>.R</tt> which is the auto-generated R script used to render the figures.  
289 - * - <i>destination</i><tt>.pdf</tt> which has all of the figures in one file multi-page file.  
290 - *  
291 - * OpenBR uses file and folder names to automatically determine the plot legend.  
292 - * For example, let's consider the case where three algorithms (<tt>A</tt>, <tt>B</tt>, & <tt>C</tt>) were each evaluated on two datasets (<tt>Y</tt> & <tt>Z</tt>).  
293 - * The suggested way to plot these experiments on the same graph is to create a folder named <tt>Algorithm_Dataset</tt> that contains the six <tt>.csv</tt> files produced by br_eval <tt>A_Y.csv</tt>, <tt>A_Z.csv</tt>, <tt>B_Y.csv</tt>, <tt>B_Z.csv</tt>, <tt>C_Y.csv</tt>, & <tt>C_Z.csv</tt>.  
294 - * The '<tt>_</tt>' character plays a special role in determining the legend title(s) and value(s).  
295 - * In this case, <tt>A</tt>, <tt>B</tt>, & <tt>C</tt> will be identified as different values of type <tt>Algorithm</tt>, and each will be assigned its own color; <tt>Y</tt> & <tt>Z</tt> will be identified as different values of type Dataset, and each will be assigned its own line style.  
296 - * Matches around the EER will be displayed if the matches parameter is set in \ref br_eval.  
297 - *  
298 - * \param num_files Number of <tt>.csv</tt> files.  
299 - * \param files <tt>.csv</tt> files created using \ref br_eval.  
300 - * \param destination Basename for the resulting figures.  
301 - * \param show Open <i>destination</i>.pdf using the system's default PDF viewer.  
302 - * \return Returns \c true on success. Returns false on a failure to compile the figures due to a missing, out of date, or incomplete \c R installation.  
303 - * \note This function requires a current <a href="http://www.r-project.org/">R</a> installation with the following packages:  
304 - * \code install.packages(c("ggplot2", "gplots", "reshape", "scales", "jpg", "png")) \endcode  
305 - * \see br_eval  
306 - */  
307 BR_EXPORT bool br_plot(int num_files, const char *files[], const char *destination, bool show = false); 86 BR_EXPORT bool br_plot(int num_files, const char *files[], const char *destination, bool show = false);
308 87
309 -/*!  
310 - * \brief Renders detection performance figures for a set of <tt>.csv</tt> files created by \ref br_eval_detection.  
311 - *  
312 - * In order of their output, the figures are:  
313 - * -# Discrete Receiver Operating Characteristic (DiscreteROC)  
314 - * -# Continuous Receiver Operating Characteristic (ContinuousROC)  
315 - * -# Discrete Precision Recall (DiscretePR)  
316 - * -# Continuous Precision Recall (ContinuousPR)  
317 - * -# Bounding Box Overlap Histogram (Overlap)  
318 - * -# Average Overlap Table (AverageOverlap)  
319 - * -# Average Overlap Heatmap (AverageOverlap)  
320 - *  
321 - * Detection accuracy is measured with <i>overlap fraction = bounding box intersection / union</i>.  
322 - * When computing <i>discrete</i> curves, an overlap >= 0.5 is considered a true positive, otherwise it is considered a false negative.  
323 - * When computing <i>continuous</i> curves, true positives and false negatives are measured fractionally as <i>overlap</i> and <i>1-overlap</i> respectively.  
324 - *  
325 - * \see br_plot  
326 - */  
327 BR_EXPORT bool br_plot_detection(int num_files, const char *files[], const char *destination, bool show = false); 88 BR_EXPORT bool br_plot_detection(int num_files, const char *files[], const char *destination, bool show = false);
328 89
329 -/*!  
330 - * \brief Renders landmarking performance figures for a set of <tt>.csv</tt> files created by \ref br_eval_landmarking.  
331 - *  
332 - * In order of their output, the figures are:  
333 - * -# Cumulative landmarks less than normalized error (CD)  
334 - * -# Normalized error box and whisker plots (Box)  
335 - * -# Normalized error violin plots (Violin)  
336 - *  
337 - * Landmarking error is normalized against the distance between two predifined points, usually inter-ocular distance (IOD).  
338 - *  
339 - * \see br_plot  
340 - */  
341 BR_EXPORT bool br_plot_landmarking(int num_files, const char *files[], const char *destination, bool show = false); 90 BR_EXPORT bool br_plot_landmarking(int num_files, const char *files[], const char *destination, bool show = false);
342 91
343 -/*!  
344 - * \brief Renders metadata figures for a set of <tt>.csv</tt> files with specified columns.  
345 - *  
346 - * Several files will be created:  
347 - * - <tt>PlotMetadata.R</tt> which is the auto-generated R script used to render the figures.  
348 - * - <tt>PlotMetadata.pdf</tt> which has all of the figures in one file (convenient for attaching in an email).  
349 - * - <i>column</i><tt>.pdf</tt>, ..., <i>column</i><tt>.pdf</tt> which has each figure in a separate file (convenient for including in a presentation).  
350 - *  
351 - * \param num_files Number of <tt>.csv</tt> files.  
352 - * \param files <tt>.csv</tt> files created by enrolling templates to <tt>.csv</tt> metadata files.  
353 - * \param columns ';' seperated list of columns to plot.  
354 - * \param show Open <tt>PlotMetadata.pdf</tt> using the system's default PDF viewer.  
355 - * \return See \ref br_plot  
356 - */  
357 BR_EXPORT bool br_plot_metadata(int num_files, const char *files[], const char *columns, bool show = false); 92 BR_EXPORT bool br_plot_metadata(int num_files, const char *files[], const char *columns, bool show = false);
358 93
359 -/*!  
360 - * \brief Wraps br::Context::progress()  
361 - * \see br_most_recent_message br_time_remaining  
362 - */  
363 BR_EXPORT float br_progress(); 94 BR_EXPORT float br_progress();
364 95
365 -/*!  
366 - * \brief Read and parse arguments from a named pipe.  
367 - *  
368 - * Used by the \ref cli to implement \c -daemon, generally not useful otherwise.  
369 - * Guaranteed to return at least one argument.  
370 - * \param pipe Pipe name  
371 - * \param[out] argc argument count  
372 - * \param[out] argv argument list  
373 - * \note \ref managed_return_value  
374 - */  
375 BR_EXPORT void br_read_pipe(const char *pipe, int *argc, char ***argv); 96 BR_EXPORT void br_read_pipe(const char *pipe, int *argc, char ***argv);
376 97
377 -/*!  
378 - * \brief Wraps br::Context::scratchPath()  
379 - * \note \ref input_string_buffer  
380 - * \see br_version  
381 - */  
382 BR_EXPORT int br_scratch_path(char * buffer, int buffer_length); 98 BR_EXPORT int br_scratch_path(char * buffer, int buffer_length);
383 99
384 -  
385 -/*!  
386 - * \brief Returns the full path to the root of the SDK.  
387 - * \see br_initialize  
388 - */  
389 BR_EXPORT const char *br_sdk_path(); 100 BR_EXPORT const char *br_sdk_path();
390 101
391 -/*!  
392 - * \brief Retrieve the target and query inputs in the BEE matrix header.  
393 - * \param matrix The BEE matrix file to modify  
394 - * \param[out] target_gallery The matrix target  
395 - * \param[out] query_gallery The matrix query  
396 - * \note \ref managed_return_value  
397 - * \see br_set_header  
398 - */  
399 BR_EXPORT void br_get_header(const char *matrix, const char **target_gallery, const char **query_gallery); 102 BR_EXPORT void br_get_header(const char *matrix, const char **target_gallery, const char **query_gallery);
400 103
401 -/*!  
402 - * \brief Update the target and query inputs in the BEE matrix header.  
403 - * \param matrix The BEE matrix file to modify  
404 - * \param target_gallery The matrix target  
405 - * \param query_gallery The matrix query  
406 - * \see br_get_header  
407 - */  
408 BR_EXPORT void br_set_header(const char *matrix, const char *target_gallery, const char *query_gallery); 104 BR_EXPORT void br_set_header(const char *matrix, const char *target_gallery, const char *query_gallery);
409 105
410 -/*!  
411 - *\brief Wraps br::Context::setProperty()  
412 - */  
413 BR_EXPORT void br_set_property(const char *key, const char *value); 106 BR_EXPORT void br_set_property(const char *key, const char *value);
414 107
415 -/*!  
416 - * \brief Wraps br::Context::timeRemaining()  
417 - * \see br_most_recent_message br_progress  
418 - */  
419 BR_EXPORT int br_time_remaining(); 108 BR_EXPORT int br_time_remaining();
420 109
421 -/*!  
422 - * \brief Trains the br::Transform and br::Comparer on the input.  
423 - * \param input The br::Input set of images to train on.  
424 - * \param model Optional string specifying the binary file to serialize training results to.  
425 - * The trained algorithm can be recovered by using this file as the algorithm.  
426 - * By default the trained algorithm will not be serialized to disk.  
427 - * \see br_train_n  
428 - */  
429 BR_EXPORT void br_train(const char *input, const char *model = ""); 110 BR_EXPORT void br_train(const char *input, const char *model = "");
430 111
431 -/*!  
432 - * \brief Convenience function for training on multiple inputs.  
433 - * \see br_train  
434 - */  
435 BR_EXPORT void br_train_n(int num_inputs, const char *inputs[], const char *model = ""); 112 BR_EXPORT void br_train_n(int num_inputs, const char *inputs[], const char *model = "");
436 113
437 -/*!  
438 - * \brief Wraps br::Context::version()  
439 - * \see br_about br_scratch_path  
440 - */  
441 BR_EXPORT const char *br_version(); 114 BR_EXPORT const char *br_version();
442 115
443 -  
444 -/*!  
445 - * \brief For internal use via ProcessWrapperTransform  
446 - */  
447 BR_EXPORT void br_slave_process(const char * baseKey); 116 BR_EXPORT void br_slave_process(const char * baseKey);
448 117
449 // to avoid having to include unwanted headers 118 // to avoid having to include unwanted headers
@@ -454,124 +123,56 @@ typedef void* br_template; @@ -454,124 +123,56 @@ typedef void* br_template;
454 typedef void* br_template_list; 123 typedef void* br_template_list;
455 typedef void* br_gallery; 124 typedef void* br_gallery;
456 typedef void* br_matrix_output; 125 typedef void* br_matrix_output;
457 -/*!  
458 - * \brief Load an image from a string buffer.  
459 - * Easy way to pass an image in memory from another programming language to openbr.  
460 - * \param data The image buffer.  
461 - * \param len The length of the buffer.  
462 - * \see br_unload_img  
463 - */ 126 +
464 BR_EXPORT br_template br_load_img(const char *data, int len); 127 BR_EXPORT br_template br_load_img(const char *data, int len);
465 -/*!  
466 - * \brief Unload an image to a string buffer.  
467 - * Easy way to pass an image from openbr to another programming language.  
468 - * \param tmpl Pointer to a br::Template.  
469 - */ 128 +
470 BR_EXPORT unsigned char* br_unload_img(br_template tmpl); 129 BR_EXPORT unsigned char* br_unload_img(br_template tmpl);
471 -/*!  
472 - * \brief Deserialize a br::TemplateList from a buffer.  
473 - * Can be the buffer for a .gal file,  
474 - * since they are just a TemplateList serialized to disk.  
475 - */ 130 +
476 BR_EXPORT br_template_list br_template_list_from_buffer(const char *buf, int len); 131 BR_EXPORT br_template_list br_template_list_from_buffer(const char *buf, int len);
477 -/*!  
478 - * \brief Free a br::Template's memory.  
479 - */ 132 +
480 BR_EXPORT void br_free_template(br_template tmpl); 133 BR_EXPORT void br_free_template(br_template tmpl);
481 -/*!  
482 - * \brief Free a br::TemplateList's memory.  
483 - */ 134 +
484 BR_EXPORT void br_free_template_list(br_template_list tl); 135 BR_EXPORT void br_free_template_list(br_template_list tl);
485 -/*!  
486 - * \brief Free a br::Output's memory.  
487 - */ 136 +
488 BR_EXPORT void br_free_output(br_matrix_output output); 137 BR_EXPORT void br_free_output(br_matrix_output output);
489 -/*!  
490 - * \brief Get the number of rows in an image.  
491 - * \param tmpl Pointer to a br::Template.  
492 - */ 138 +
493 BR_EXPORT int br_img_rows(br_template tmpl); 139 BR_EXPORT int br_img_rows(br_template tmpl);
494 -/*!  
495 - * \brief Get the number of columns in an image.  
496 - * \param tmpl Pointer to a br::Template.  
497 - */ 140 +
498 BR_EXPORT int br_img_cols(br_template tmpl); 141 BR_EXPORT int br_img_cols(br_template tmpl);
499 -/*!  
500 - * \brief Get the number of channels in an image.  
501 - * \param tmpl Pointer to a br::Template.  
502 - */ 142 +
503 BR_EXPORT int br_img_channels(br_template tmpl); 143 BR_EXPORT int br_img_channels(br_template tmpl);
504 -/*!  
505 - * \brief Returns if the image is empty.  
506 - */ 144 +
507 BR_EXPORT bool br_img_is_empty(br_template tmpl); 145 BR_EXPORT bool br_img_is_empty(br_template tmpl);
508 -/*!  
509 - * \brief Get the filename for a br::Template  
510 - * \note \ref input_string_buffer  
511 - */ 146 +
512 BR_EXPORT int br_get_filename(char * buffer, int buffer_length, br_template tmpl); 147 BR_EXPORT int br_get_filename(char * buffer, int buffer_length, br_template tmpl);
513 -/*!  
514 - * \brief Set the filename for a br::Template.  
515 - */ 148 +
516 BR_EXPORT void br_set_filename(br_template tmpl, const char *filename); 149 BR_EXPORT void br_set_filename(br_template tmpl, const char *filename);
517 -/*!  
518 - * \brief Get metadata as a string for the given key in the given template.  
519 - * \note \ref input_string_buffer  
520 - */ 150 +
521 BR_EXPORT int br_get_metadata_string(char * buffer, int buffer_length, br_template tmpl, const char *key); 151 BR_EXPORT int br_get_metadata_string(char * buffer, int buffer_length, br_template tmpl, const char *key);
522 -/*!  
523 - * \brief Enroll a br::Template from the C API! Returns a pointer to a br::TemplateList  
524 - * \param tmpl Pointer to a br::Template.  
525 - */ 152 +
526 BR_EXPORT br_template_list br_enroll_template(br_template tmpl); 153 BR_EXPORT br_template_list br_enroll_template(br_template tmpl);
527 -/*!  
528 - * \brief Enroll a br::TemplateList from the C API!  
529 - * \param tl Pointer to a br::TemplateList.  
530 - */ 154 +
531 BR_EXPORT void br_enroll_template_list(br_template_list tl); 155 BR_EXPORT void br_enroll_template_list(br_template_list tl);
532 -/*!  
533 - * \brief Compare br::TemplateLists from the C API!  
534 - * \return Pointer to a br::MatrixOutput.  
535 - */ 156 +
536 BR_EXPORT br_matrix_output br_compare_template_lists(br_template_list target, br_template_list query); 157 BR_EXPORT br_matrix_output br_compare_template_lists(br_template_list target, br_template_list query);
537 -/*!  
538 - * \brief Get a value in the br::MatrixOutput.  
539 - */ 158 +
540 BR_EXPORT float br_get_matrix_output_at(br_matrix_output output, int row, int col); 159 BR_EXPORT float br_get_matrix_output_at(br_matrix_output output, int row, int col);
541 -/*!  
542 - * \brief Get a pointer to a br::Template at a specified index.  
543 - * \param tl Pointer to a br::TemplateList.  
544 - * \param index The index of the br::Template.  
545 - */ 160 +
546 BR_EXPORT br_template br_get_template(br_template_list tl, int index); 161 BR_EXPORT br_template br_get_template(br_template_list tl, int index);
547 -/*!  
548 - * \brief Get the number of br::Templates in a br::TemplateList.  
549 - * \param tl Pointer to a br::TemplateList  
550 - */ 162 +
551 BR_EXPORT int br_num_templates(br_template_list tl); 163 BR_EXPORT int br_num_templates(br_template_list tl);
552 -/*!  
553 - * \brief Initialize a br::Gallery.  
554 - * \param gallery String location of gallery on disk.  
555 - */ 164 +
556 BR_EXPORT br_gallery br_make_gallery(const char *gallery); 165 BR_EXPORT br_gallery br_make_gallery(const char *gallery);
557 -/*!  
558 - * \brief Read br::TemplateList from br::Gallery.  
559 - */ 166 +
560 BR_EXPORT br_template_list br_load_from_gallery(br_gallery gallery); 167 BR_EXPORT br_template_list br_load_from_gallery(br_gallery gallery);
561 -/*!  
562 - * \brief Write a br::Template to the br::Gallery on disk.  
563 - */ 168 +
564 BR_EXPORT void br_add_template_to_gallery(br_gallery gallery, br_template tmpl); 169 BR_EXPORT void br_add_template_to_gallery(br_gallery gallery, br_template tmpl);
565 -/*!  
566 - * \brief Write a br::TemplateList to the br::Gallery on disk.  
567 - */ 170 +
568 BR_EXPORT void br_add_template_list_to_gallery(br_gallery gallery, br_template_list tl); 171 BR_EXPORT void br_add_template_list_to_gallery(br_gallery gallery, br_template_list tl);
569 -/*!  
570 - * \brief Close the br::Gallery.  
571 - */ 172 +
572 BR_EXPORT void br_close_gallery(br_gallery gallery); 173 BR_EXPORT void br_close_gallery(br_gallery gallery);
573 174
574 -/*! @}*/ 175 +
575 176
576 #ifdef __cplusplus 177 #ifdef __cplusplus
577 } 178 }
openbr/openbr_export.cpp
1 -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *  
2 - * Copyright 2012 The MITRE Corporation *  
3 - * *  
4 - * Licensed under the Apache License, Version 2.0 (the "License"); *  
5 - * you may not use this file except in compliance with the License. *  
6 - * You may obtain a copy of the License at *  
7 - * *  
8 - * http://www.apache.org/licenses/LICENSE-2.0 *  
9 - * *  
10 - * Unless required by applicable law or agreed to in writing, software *  
11 - * distributed under the License is distributed on an "AS IS" BASIS, *  
12 - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. *  
13 - * See the License for the specific language governing permissions and *  
14 - * limitations under the License. *  
15 - * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */  
16 -  
17 -/*!  
18 - * \mainpage  
19 - * \section overview Overview  
20 - * OpenBR \cite klontz2013open is a framework for investigating new modalities, improving existing algorithms, interfacing with commercial systems, measuring recognition performance, and deploying automated biometric systems.  
21 - * The project is designed to facilitate rapid algorithm prototyping, and features a mature core framework, flexible plugin system, and support for open and closed source development.  
22 - * Off-the-shelf algorithms are also available for specific modalities including \ref cpp_face_recognition, \ref cpp_age_estimation, and \ref cpp_gender_estimation.  
23 - *  
24 - * OpenBR originated within The MITRE Corporation from a need to streamline the process of prototyping new algorithms.  
25 - * The project was later published as open source software under the <a href="http://www.apache.org/licenses/LICENSE-2.0.html">Apache 2</a> license and is <i>free for academic and commercial use</i>.  
26 - *  
27 - * \image html "abstraction.svg" "The two principal software artifacts are the shared library 'openbr' and command line application 'br'."  
28 - *  
29 - * \section get_started Get Started  
30 - * - \ref introduction - A high-level technical overview of OpenBR.  
31 - * - \ref installation - A hacker's guide to building, editing, and running OpenBR.  
32 - * - \ref examples - Source code illustrating common use cases.  
33 - * - \ref help - Talk to the experts.  
34 - *  
35 - * \section learn_more Learn More  
36 - * - \ref algorithm_grammar - How algorithms are constructed from string descriptions.  
37 - * - \ref cli - Command line wrapper of the \ref c_sdk.  
38 - * - \ref c_sdk - High-level API for running algorithms and evaluating results.  
39 - * - \ref cpp_plugin_sdk - Plugin API for extending OpenBR functionality.  
40 - * - \ref bee - A <a href="http://www.nist.gov/index.html">NIST</a> standard for evaluating biometric algorithms.  
41 - * - \ref qmake_integration - Add OpenBR to your Qt <tt>.pro</tt> project.  
42 - */  
43 -  
44 -/*!  
45 - * \page introduction Introduction  
46 - * \brief A high-level technical overview of OpenBR.  
47 - *  
48 - * We strongly encourage users new to OpenBR to read our <a href="http://www.openbiometrics.org/publications/klontz2013open.pdf"><b>publication</b></a> for an introduction to the core concepts.  
49 - * Researchers incorporating OpenBR into their own work are kindly requested to cite this paper.  
50 - */  
51 -  
52 -/*!  
53 - * \page installation Installation  
54 - * \brief A hacker's guide to building, editing, and running OpenBR.  
55 - *  
56 - * \section installation_from_source From Source  
57 - * Installation from source is the recommended method for getting OpenBR on your machine.  
58 - * <b>If you are interested in our off-the-shelf algorithms, please use the latest tagged release instead of the master branch.</b>  
59 - * If you need a little help getting started, choose from the list of build instructions for free C++ compilers below:  
60 - * - \subpage windows_msvc  
61 - * - \subpage osx_clang  
62 - * - \subpage linux_gcc  
63 - * - \subpage raspbian_gcc  
64 - *  
65 - * \section installation_from_binary From Binary  
66 - * Pre-compiled releases are not currently provided, but they can be built from source using the instructions above.  
67 - * Generally you should follow your operating system's best practices for installing a binary package.  
68 - * However, for temporary evaluation, one simple configuration approach is:  
69 - *  
70 - * \par Linux  
71 -\verbatim  
72 -$ cd bin  
73 -$ export LD_LIBRARY_PATH=../lib:${LD_LIBRARY_PATH}  
74 -$ sudo ldconfig  
75 -\endverbatim  
76 - * \par OS X  
77 -\verbatim  
78 -$ cd bin  
79 -$ export DYLD_LIBRARY_PATH=../lib:${DYLD_LIBRARY_PATH}  
80 -$ export DYLD_FRAMEWORK_PATH=../lib:${DYLD_FRAMEWORK_PATH}  
81 -\endverbatim  
82 - * \par Windows  
83 - * No configuration is necessary!  
84 - *  
85 - * \section installation_done Start Working  
86 - * To test for successful installation:  
87 -\verbatim  
88 -$ cd bin  
89 -$ br -help  
90 -\endverbatim  
91 - */  
92 -  
93 -/*!  
94 - * \page windows_msvc Windows 7 - Visual Studio Express Edition 2012 - x64  
95 - * -# <a href="http://www.microsoft.com/en-us/download/details.aspx?id=34673">Download Visual Studio 2012 Express Edition for Windows Desktop</a> and install.  
96 - * -# Consider the free open source program <a href="http://wincdemu.sysprogs.org">WinCDEmu</a> if you need a program to mount ISO images.  
97 - * -# You will have to register with Microsoft after installation, but it's free.  
98 - * -# Grab any available <a href="http://www.microsoft.com/visualstudio/eng/downloads#d-visual-studio-2012-update">Visual Studio Updates</a>.  
99 - * -# Download and install <a href="http://msdn.microsoft.com/en-us/windows/hardware/hh852363.aspx">Windows 8 SDK</a>.  
100 - * -# <a href="http://www.cmake.org/files/v2.8/cmake-2.8.11.2-win32-x86.exe">Download and Install CMake 2.8.11.2</a>  
101 - * -# During installation setup select "add CMake to PATH".  
102 - * -# <a href="http://downloads.sourceforge.net/project/opencvlibrary/opencv-unix/2.4.6.1/opencv-2.4.6.1.tar.gz">Download OpenCV 2.4.6.1</a>  
103 - * -# Consider the free open source program <a href="http://www.7-zip.org/">7-Zip</a> if you need a program to unarchive tarballs.  
104 - * -# Move the "opencv-2.4.6.1" folder to "C:\".  
105 - * -# Open "VS2012 x64 Cross Tools Command Prompt" (from the Start Menu, select "All Programs" -> "Microsoft Visual Studio 2012" -> "Visual Studio Tools" -> "VS2012 x64 Cross Tools Command Prompt") and enter:  
106 - \code  
107 - $ cd C:\opencv-2.4.6.1  
108 - $ mkdir build-msvc2012  
109 - $ cd build-msvc2012  
110 - $ cmake -G "NMake Makefiles" -DBUILD_PERF_TESTS=OFF -DBUILD_TESTS=OFF -DWITH_FFMPEG=OFF -DCMAKE_BUILD_TYPE=Debug ..  
111 - $ nmake  
112 - $ nmake install  
113 - $ cmake -DCMAKE_BUILD_TYPE=Release ..  
114 - $ nmake  
115 - $ nmake install  
116 - $ nmake clean  
117 - \endcode  
118 - * -# <a href="http://download.qt-project.org/official_releases/qt/5.1/5.1.1/qt-windows-opensource-5.1.1-msvc2012-x86_64-offline.exe">Download and Install Qt 5.1.1</a>  
119 - * -# Create a <a href="github.com">GitHub</a> account and follow their instructions for <a href="https://help.github.com/articles/set-up-git">setting up Git</a>.  
120 - * -# Launch "Git Bash" from the Desktop and clone OpenBR:  
121 - \code  
122 - $ cd /c  
123 - $ git clone https://github.com/biometrics/openbr.git  
124 - $ cd openbr  
125 - $ git checkout 0.5  
126 - $ git submodule init  
127 - $ git submodule update  
128 - \endcode  
129 - * -# Build OpenBR!  
130 - * -# From the VS2012 x64 Cross Tools Command Prompt:  
131 - \code  
132 - $ cd C:\openbr  
133 - $ mkdir build-msvc2012  
134 - $ cd build-msvc2012  
135 - $ cmake -G "CodeBlocks - NMake Makefiles" -DCMAKE_PREFIX_PATH="C:/opencv-2.4.6.1/build-msvc2012/install;C:/Qt/Qt5.1.1/5.1.1/msvc2012_64" -DCMAKE_INSTALL_PREFIX="./install" -DBR_INSTALL_DEPENDENCIES=ON -DCMAKE_BUILD_TYPE=Release ..  
136 - $ nmake  
137 - $ nmake install  
138 - \endcode  
139 - * -# Check out the "install" folder.  
140 - * -# Hack OpenBR!  
141 - * -# From the VS2012 x64 Cross Tools Command Prompt:  
142 - \code  
143 - $ C:\Qt\Qt5.1.1\Tools\QtCreator\bin\qtcreator.exe  
144 - \endcode  
145 - * -# From the Qt Creator "Tools" menu select "Options..."  
146 - * -# Under "Kits" select "Desktop (default)"  
147 - * -# For "Compiler:" select "Microsoft Visual C++ Compiler 11.0 (x86_amd64)" and click "OK"  
148 - * -# From the Qt Creator "File" menu select "Open File or Project...".  
149 - * -# Select "C:\openbr\CMakeLists.txt" then "Open".  
150 - * -# If prompted for the location of CMake, enter "C:\Program Files (x86)\CMake 2.8\bin\cmake.exe".  
151 - * -# Browse to your pre-existing build directory "C:\openbr\build-msvc2012" then select "Next".  
152 - * -# Select "Run CMake" then "Finish".  
153 - * -# You're all set! You can find more information on Qt Creator <a href="http://qt-project.org/doc/qtcreator">here</a> if you need.  
154 - * -# (Optional) Package OpenBR!  
155 - * -# From the VS2012 x64 Cross Tools Command Prompt:  
156 - \code  
157 - $ cd C:\openbr\build-msvc2012  
158 - $ cpack -G ZIP  
159 - \endcode  
160 - */  
161 -  
162 -/*!  
163 - * \page osx_clang OS X Mountain Lion - Clang/LLVM 3.1 - x64  
164 - * -# Download and install the latest "Xcode" and "Command Line Tools" from the <a href="https://developer.apple.com/downloads/index.action#">Apple Developer Downloads</a> page.  
165 - * -# <a href="http://www.cmake.org/files/v2.8/cmake-2.8.11.2.tar.gz">Download CMake 2.8.11.2</a>  
166 - \code  
167 - $ cd ~/Downloads  
168 - $ tar -xf cmake-2.8.11.2.tar.gz  
169 - $ cd cmake-2.8.11.2  
170 - $ ./configure  
171 - $ make -j4  
172 - $ sudo make install  
173 - $ cd ..  
174 - $ rm -rf cmake-2.8.11.2*  
175 - \endcode  
176 - * -# <a href="http://downloads.sourceforge.net/project/opencvlibrary/opencv-unix/2.4.6.1/opencv-2.4.6.1.tar.gz">Download OpenCV 2.4.6.1</a>  
177 - \code  
178 - $ cd ~/Downloads  
179 - $ tar -xf opencv-2.4.6.1.tar.gz  
180 - $ cd opencv-2.4.6.1  
181 - $ mkdir build  
182 - $ cd build  
183 - $ cmake -DCMAKE_BUILD_TYPE=Release ..  
184 - $ make -j4  
185 - $ sudo make install  
186 - $ cd ../..  
187 - $ rm -rf opencv-2.4.6.1*  
188 - \endcode  
189 - * -# <a href="http://download.qt-project.org/official_releases/qt/5.1/5.1.1/qt-mac-opensource-5.1.1-clang-offline.dmg">Download and install Qt 5.1.1</a>  
190 - * -# Create a <a href="github.com">GitHub</a> account, follow their instructions for <a href="https://help.github.com/articles/set-up-git">setting up Git</a>.  
191 - \code  
192 - $ git clone https://github.com/biometrics/openbr.git  
193 - $ cd openbr  
194 - $ git checkout 0.5  
195 - $ git submodule init  
196 - $ git submodule update  
197 - \endcode  
198 - * -# Build OpenBR!  
199 - \code  
200 - $ mkdir build # from the OpenBR root directory  
201 - $ cd build  
202 - $ cmake -DCMAKE_PREFIX_PATH=~/Qt5.1.1/5.1.1/clang_64 -DCMAKE_BUILD_TYPE=Release ..  
203 - $ make -j4  
204 - $ sudo make install  
205 - \endcode  
206 - * -# Hack OpenBR!  
207 - * -# Open Qt Creator IDE  
208 - \code  
209 - $ open ~/Qt5.1.1/Qt\ Creator.app  
210 - \endcode  
211 - * -# From the Qt Creator "File" menu select "Open File or Project...".  
212 - * -# Select "openbr/CMakeLists.txt" then "Open".  
213 - * -# Browse to your pre-existing build directory "openbr/build" then select "Continue".  
214 - * -# Select "Run CMake" then "Done".  
215 - * -# You're all set! You can find more information on Qt Creator <a href="http://qt-project.org/doc/qtcreator">here</a> if you need.  
216 - * -# (Optional) Test OpenBR!  
217 - \code  
218 - $ cd openbr/scripts  
219 - $ ./downloadDatasets.sh  
220 - $ cd ../build  
221 - $ make test  
222 - \endcode  
223 - * -# (Optional) Package OpenBR!  
224 - \code  
225 - $ cd openbr/build  
226 - $ sudo cpack -G TGZ  
227 - \endcode  
228 - * -# (Optional) Build OpenBR documentation!  
229 - * -# <a href="ftp://ftp.stack.nl/pub/users/dimitri/doxygen-1.8.5.src.tar.gz">Download Doxygen 1.8.5</a>  
230 - \code  
231 - $ cd ~/Downloads  
232 - $ tar -xf doxygen-1.8.5.src.tar.gz  
233 - $ cd doxygen-1.8.5  
234 - $ ./configure  
235 - $ make -j4  
236 - $ sudo make install  
237 - $ cd ..  
238 - $ rm -rf doxygen-1.8.5*  
239 - \endcode  
240 - * -# Modify build settings and recompile.  
241 - \code  
242 - $ cd openbr/build  
243 - $ cmake -DBR_BUILD_DOCUMENTATION=ON ..  
244 - $ make -j4  
245 - $ open html/index.html  
246 - \endcode  
247 - */  
248 -  
249 -/*!  
250 - * \page linux_gcc Ubuntu 13.04 - GCC 4.7.3 - x64  
251 - * -# Install GCC 4.7.3  
252 - \code  
253 - $ sudo apt-get update  
254 - $ sudo apt-get install build-essential  
255 - \endcode  
256 - * -# Install CMake 2.8.10.1  
257 - \code  
258 - $ sudo apt-get install cmake cmake-curses-gui  
259 - \endcode  
260 - * -# <a href="http://downloads.sourceforge.net/project/opencvlibrary/opencv-unix/2.4.5/opencv-2.4.5.tar.gz">Download OpenCV 2.4.5</a>, note <a href="https://github.com/biometrics/openbr/wiki/Build-OpenCV-with-Video-Support-on-Ubuntu">this</a>  
261 - \code  
262 - $ cd ~/Downloads  
263 - $ tar -xf opencv-2.4.5.tar.gz  
264 - $ cd opencv-2.4.5  
265 - $ mkdir build  
266 - $ cd build  
267 - $ cmake -DCMAKE_BUILD_TYPE=Release ..  
268 - $ make -j4  
269 - $ sudo make install  
270 - $ cd ../..  
271 - $ rm -rf opencv-2.4.5*  
272 - \endcode  
273 - * -# Install Qt 5.0.1  
274 - \code  
275 - $ sudo apt-get install qt5-default libqt5svg5-dev qtcreator  
276 - \endcode  
277 - * -# Create a <a href="github.com">GitHub</a> account, follow their instructions for <a href="https://help.github.com/articles/set-up-git">setting up Git</a>.  
278 - \code  
279 - $ git clone https://github.com/biometrics/openbr.git  
280 - $ cd openbr  
281 - $ git checkout 0.5  
282 - $ git submodule init  
283 - $ git submodule update  
284 - \endcode  
285 - * -# Build OpenBR!  
286 - \code  
287 - $ mkdir build # from the OpenBR root directory  
288 - $ cd build  
289 - $ cmake -DCMAKE_BUILD_TYPE=Release ..  
290 - $ make -j4  
291 - $ sudo make install  
292 - \endcode  
293 - * -# Hack OpenBR!  
294 - * -# Open Qt Creator IDE  
295 - \code  
296 - $ qtcreator &  
297 - \endcode  
298 - * -# From the Qt Creator "File" menu select "Open File or Project...".  
299 - * -# Select "openbr/CMakeLists.txt" then "Open".  
300 - * -# Browse to your pre-existing build directory "openbr/build" then select "Next".  
301 - * -# Select "Run CMake" then "Finish".  
302 - * -# You're all set! You can find more information on Qt Creator <a href="http://qt-project.org/doc/qtcreator">here</a> if you need.  
303 - * -# (Optional) Test OpenBR!  
304 - \code  
305 - $ cd openbr/scripts  
306 - $ ./downloadDatasets.sh  
307 - $ cd ../build  
308 - $ make test  
309 - \endcode  
310 - * -# (Optional) Package OpenBR!  
311 - \code  
312 - $ cd openbr/build  
313 - $ sudo cpack -G TGZ  
314 - \endcode  
315 - * -# (Optional) Build OpenBR documentation!  
316 - \code  
317 - $ sudo apt-get install doxygen  
318 - $ cd openbr/build  
319 - $ cmake -DBR_BUILD_DOCUMENTATION=ON ..  
320 - $ make -j4  
321 - $ sudo apt-get install libgnome2-bin  
322 - $ gnome-open html/index.html  
323 - \endcode  
324 - */  
325 -  
326 -/*!  
327 - * \page raspbian_gcc Raspbian 3.0.1 - GCC 4.6.3 - ARMv6  
328 - * -# Install CMake 2.8.9  
329 - \code  
330 - $ sudo apt-get install cmake  
331 - \endcode  
332 - * -# Download OpenCV 2.4.9  
333 - \code  
334 - $ wget http://sourceforge.net/projects/opencvlibrary/files/opencv-unix/2.4.9/opencv-2.4.9.zip  
335 - $ unzip opencv-2.4.9.zip  
336 - $ cd opencv-2.4.9  
337 - $ mkdir build  
338 - $ cd build  
339 - $ cmake -DCMAKE_BUILD_TYPE=Release ..  
340 - $ make  
341 - $ sudo make install  
342 - $ cd ../..  
343 - $ rm -rf opencv-2.4.9*  
344 - \endcode  
345 - * -# Install Qt5  
346 - * -# Modify source list  
347 - \code  
348 - $ nano /etc/apt/sources.list  
349 - \endcode  
350 - by changing:  
351 - \code  
352 - deb http://mirrordirector.raspbian.org/raspbian/ wheezy main contrib non-free rpi  
353 - \endcode  
354 - to:  
355 - \code  
356 - deb http://mirrordirector.raspbian.org/raspbian/ jessie main contrib non-free rpi  
357 - \endcode  
358 - * -# Update apt-get  
359 - \code  
360 - $ sudo apt-get update  
361 - \endcode  
362 - * -# Install packages  
363 - \code  
364 - $ sudo apt-get install qt5-default libqt5svg5-dev  
365 - \endcode  
366 - * -# Create a <a href="github.com">GitHub</a> account, follow their instructions for <a href="https://help.github.com/articles/set-up-git">setting up Git</a>.  
367 - \code  
368 - $ git clone https://github.com/biometrics/openbr.git  
369 - $ cd openbr  
370 - $ git checkout 0.5  
371 - $ git submodule init  
372 - $ git submodule update  
373 - \endcode  
374 - * -# Build OpenBR!  
375 - \code  
376 - $ mkdir build # from the OpenBR root directory  
377 - $ cd build  
378 - $ cmake -DCMAKE_BUILD_TYPE=Release ..  
379 - $ make  
380 - $ sudo make install  
381 - \endcode  
382 - * -# (Optional) Test OpenBR!  
383 - \code  
384 - $ cd openbr/scripts  
385 - $ ./downloadDatasets.sh  
386 - $ cd ../build  
387 - $ make test  
388 - \endcode  
389 -*/  
390 -  
391 -/*!  
392 - * \page help Help  
393 - * - Developer mailing list: <a href="https://groups.google.com/forum/?fromgroups#!forum/openbr-dev">openbr-dev@googlegroups.com</a>  
394 - * - IRC Channel: <a href="http://webchat.freenode.net/?channels=openbr">irc.freenode.net\#openbr</a>  
395 - */  
396 -  
397 -/*!  
398 - * \page qmake_integration QMake Integration  
399 - * \brief Add OpenBR to your Qt <tt>.pro</tt> project.  
400 - *  
401 - * After completing the \ref installation instructions, try launching Qt Creator and opening <tt>\<path_to_openbr_installation\>/share/openbr/qmake_tutorial/hello.pro</tt>.  
402 - *  
403 - * Happy hacking!  
404 - */  
405 -  
406 -/*!  
407 - * \page algorithm_grammar Algorithm Grammar  
408 - * \brief How algorithms are constructed from string descriptions.  
409 - *  
410 - * <b>So you've run <tt>scripts/helloWorld.sh</tt> and it generally makes sense, except you have no idea what <tt>'Open+Cvt(Gray)+Cascade(FrontalFace)+ASEFEyes+Affine(128,128,0.33,0.45)+CvtFloat+PCA(0.95):Dist(L2)'</tt> means or how it is executed.</b>  
411 - * Well if this is the case, you've found the right documentation.  
412 - * Let's get started!  
413 - *  
414 - * In OpenBR an <i>algorithm</i> is a technique for enrolling templates associated with a technique for comparing them.  
415 - * Recall that our ultimate goal is to be able to say how similar two face images are (or two fingerprints, irises, etc.).  
416 - * Instead of storing the entire raw image for comparison, it is common practice to store an optimized representation, or <i>template</i>, of the image for the task at hand.  
417 - * The process of generating this optimized representatation is called <i>template enrollment</i> or <i>template generation</i>.  
418 - * Given two templates, <i>template comparison</i> computes the similarity between them, where the higher values indicate more probable matches and the threshold for determining what constitutes an adaquate match is determined operationally.  
419 - * The goal of template generation is to design templates that are small, accurate, and fast to compare.  
420 - * Ok, you probably knew all of this already, let's move on.  
421 - *  
422 - * The only way of creating an algorithm in OpenBR is from a text string that describes it.  
423 - * We call this string the <i>algorithm description</i>.  
424 - * The algorithm description is seperated into two parts by a ':', with the left hand side indicating how to generate templates and the right hand side indicating how to compare them.  
425 - * Some algorithms, like \ref cpp_gender_estimation and \ref cpp_age_estimation are <i>classifiers</i> that don't create templates.  
426 - * In these cases, the colon and the template comparison technique can be omitted from the algorithm description.  
427 - *  
428 - * There are several motivations for mandating that algorithms are defined from these strings, here are the most important:  
429 - * -# It ensures good software development practices by forcibly decoupling the development of each step in an algorithm, facilitating the modification of algorithms and the re-use of individual steps.  
430 - * -# It spares the creation and maintainance of a lot of very similar header files that would otherwise be needed for each step in an algorithm, observe the abscence of headers in <tt>openbr/plugins</tt>.  
431 - * -# It allows for algorithm parameter tuning without recompiling.  
432 - * -# It is completely unambiguous, both the OpenBR interpreter and anyone familiar with the project can understand exactly what your algorithm does just from this description.  
433 - *  
434 - * Let's look at some of the important parts of the code base that make this possible!  
435 - *  
436 - * In <tt>AlgorithmCore::init()</tt> in <tt>openbr/core/core.cpp</tt> you can see the code for splitting the algorithm description at the colon.  
437 - * Shortly thereafter in this function we <i>make</i> the template generation and comparison methods.  
438 - * These make calls are defined in the public \ref cpp_plugin_sdk and can also be called from end user code.  
439 - *  
440 - * Below we discuss some of the source code for \ref br::Transform::make in <tt>openbr/openbr_plugin.cpp</tt>.  
441 - * Note, \ref br::Distance::make is similar in spirit and will not be covered.  
442 - *  
443 - * One of the first steps when converting the template enrollment description into a \ref br::Transform is to replace the operators, like '+', with their full form:  
444 - * \snippet openbr/openbr_plugin.cpp Make a pipe  
445 - * A pipe (see \ref br::PipeTransform in <tt>openbr/plugins/meta.cpp</tt>) is the standard way of chaining together multiple steps in series to form more sophisticated algorithms.  
446 - * PipeTransform takes a list of transforms, and <i>projects</i> templates through each transform in order.  
447 - *  
448 - * After operator expansion, the template enrollment description forms a tree, and the transform is constructed from this description starting recurively starting at the root of the tree:  
449 - * \snippet openbr/openbr_plugin.cpp Construct the root transform  
450 - *  
451 - * At this point we reach arguably the most important code in the entire framework, the <i>object factory</i> in <tt>openbr/openbr_plugin.h</tt>.  
452 - * The \ref br::Factory class is responsible for constructing an object from a string:  
453 - * \snippet openbr/openbr_plugin.h Factory make  
454 - *  
455 - * Going back to our original example, a \ref br::PipeTransform will be created with \ref br::OpenTransform, \ref br::CvtTransform, \ref br::CascadeTransform, \ref br::ASEFEyesTransform, \ref br::AffineTransform, \ref br::CvtFloatTransform, and \ref br::PCATransform as its children.  
456 - * If you want all the tedious details about what exactly this algoritm does, then you should read the \ref br::Transform::project function implemented by each of these plugins.  
457 - * The brief explanation is that it <i>reads the image from disk, converts it to grayscale, runs the face detector, runs the eye detector on any detected faces, uses the eye locations to normalize the face for rotation and scale, converts to floating point format, and then embeds it in a PCA subspaced trained on face images</i>.  
458 - * If you are familiar with face recognition, you will likely recognize this as the Eigenfaces \cite turk1991eigenfaces algorithm.  
459 - *  
460 - * As a final note, the Eigenfaces algorithms uses the Euclidean distance (or L2-norm) to compare templates.  
461 - * Since OpenBR expects <i>similarity</i> values when comparing templates, and not <i>distances</i>, \ref br::DistDistance will return <i>-log(distance+1)</i> so that larger values indicate more similarity.  
462 - */  
463 -  
464 -/*!  
465 - * \page bee Biometric Evaluation Environment  
466 - * \brief The <i>Biometric Evaluation Environment</i> (BEE) is a <a href="http://www.nist.gov/index.html">NIST</a> standard for evaluating biometric algorithms.  
467 - *  
468 - * OpenBR implements the following portions of the BEE specification:  
469 - *  
470 - * \section sigset Signature Set  
471 - * A signature set (or \em sigset) is a br::Gallery compliant \c XML file-list specified on page 9 of <a href="MBGC_file_overview.pdf#page=9">MBGC File Overview</a> and implemented in xmlGallery.  
472 - * Sigsets are identified with a <tt>.xml</tt> extension.  
473 - *  
474 - * \section simmat Similarity Matrix  
475 - * A similarity matrix (or \em simmat) is a br::Output compliant binary score matrix specified on page 12 of <a href="MBGC_file_overview.pdf#page=12">MBGC File Overview</a> and implemented in mtxOutput.  
476 - * Simmats are identified with a <tt>.mtx</tt> extension.  
477 - * \see br_eval  
478 - *  
479 - * \section mask Mask Matrix  
480 - * A mask matrix (or \em mask) is a binary matrix specified on page 14 of <a href="MBGC_file_overview.pdf#page=14">MBGC File Overview</a> identifying the ground truth genuines and impostors of a corresponding \ref simmat.  
481 - * Masks are identified with a <tt>.mask</tt> extension.  
482 - * \see br_make_mask br_combine_masks  
483 - */  
openbr/openbr_plugin.h
@@ -43,183 +43,69 @@ @@ -43,183 +43,69 @@
43 #include <openbr/openbr.h> 43 #include <openbr/openbr.h>
44 #include <assert.h> 44 #include <assert.h>
45 45
46 -/*!  
47 - * \defgroup cpp_plugin_sdk C++ Plugin SDK  
48 - * \brief Plugin API for extending OpenBR functionality.  
49 - *  
50 - * \code  
51 - * #include <openbr/openbr_plugin.h>  
52 - * \endcode  
53 - *  
54 - * \par Development  
55 - * Plugins should be developed in <tt>openbr/plugins/</tt>.  
56 - * See this folder for numerous examples of existing plugins to follow when writing your own.  
57 - * Plugins may optionally include a <tt>.cmake</tt> file to control build configuration.  
58 - *  
59 - * \par Documentation  
60 - * Plugin documentation should include at least three lines providing the plugin abstraction, a brief explanation, and author.  
61 - * If multiple authors are specified, the last author is assumed to be the current maintainer of the plugin.  
62 - * Plugin authors are encouraged to <tt>\\cite</tt> relevant papers by adding them to <tt>share/openbr/openbr.bib</tt>.  
63 - *  
64 - * \section examples Examples  
65 - * - \ref cpp_face_recognition  
66 - * - \ref cpp_face_recognition_search  
67 - * - \ref cpp_age_estimation  
68 - * - \ref cpp_gender_estimation  
69 - *  
70 - * \subsection cpp_face_recognition Face Recognition  
71 - * \ref cli_face_recognition "Command Line Interface Equivalent"  
72 - * \snippet app/examples/face_recognition.cpp face_recognition  
73 - *  
74 - * \subsection cpp_face_recognition_search Face Recognition Search  
75 - * \ref cli_face_recognition_search "Command Line Interface Equivalent"  
76 - * \snippet app/examples/face_recognition_search.cpp face_recognition_search  
77 - *  
78 - * \subsection cpp_face_recognition_train Face Recognition Train  
79 - * \ref cli_face_recognition_train "Command Line Interface Equivalent"  
80 - * \snippet app/examples/face_recognition_train.cpp face_recognition_train  
81 - *  
82 - * \subsection cpp_age_estimation Age Estimation  
83 - * \ref cli_age_estimation "Command Line Interface Equivalent"  
84 - * \snippet app/examples/age_estimation.cpp age_estimation  
85 - *  
86 - * \subsection cpp_gender_estimation Gender Estimation  
87 - * \ref cli_gender_estimation "Command Line Interface Equivalent"  
88 - * \snippet app/examples/gender_estimation.cpp gender_estimation  
89 - */  
90 -  
91 namespace br 46 namespace br
92 { 47 {
93 48
94 -/*!  
95 - * \addtogroup cpp_plugin_sdk  
96 - * @{  
97 - */  
98 -  
99 -/*!  
100 - * Helper macro for use with <a href="http://doc.qt.digia.com/qt/properties.html">Q_PROPERTY</a>.  
101 - *  
102 - * \b Example:<br>  
103 - * Note the symmetry between \c BR_PROPERTY and \c Q_PROPERTY.  
104 - * \snippet openbr/plugins/misc.cpp example_transform  
105 - */  
106 #define BR_PROPERTY(TYPE,NAME,DEFAULT) \ 49 #define BR_PROPERTY(TYPE,NAME,DEFAULT) \
107 TYPE NAME; \ 50 TYPE NAME; \
108 TYPE get_##NAME() const { return NAME; } \ 51 TYPE get_##NAME() const { return NAME; } \
109 void set_##NAME(TYPE the_##NAME) { NAME = the_##NAME; } \ 52 void set_##NAME(TYPE the_##NAME) { NAME = the_##NAME; } \
110 void reset_##NAME() { NAME = DEFAULT; } 53 void reset_##NAME() { NAME = DEFAULT; }
111 54
112 -/*!  
113 - * \brief A file path with associated metadata.  
114 - *  
115 - * The File is one of two important data structures in OpenBR (the Template is the other).  
116 - * It is typically used to store the path to a file on disk with associated metadata.  
117 - * The ability to associate a key/value metadata table with the file helps keep the API simple while providing customizable behavior.  
118 - *  
119 - * When querying the value of a metadata key, the value will first try to be resolved against the file's private metadata table.  
120 - * If the key does not exist in its local table then it will be resolved against the properities in the global Context.  
121 - * By design file metadata may be set globally using Context::setProperty to operate on all files.  
122 - *  
123 - * Files have a simple grammar that allow them to be converted to and from strings.  
124 - * If a string ends with a \c ] or \c ) then the text within the final \c [] or \c () are parsed as comma sperated metadata fields.  
125 - * By convention, fields within \c [] are expected to have the format <tt>[key1=value1, key2=value2, ..., keyN=valueN]</tt> where order is irrelevant.  
126 - * Fields within \c () are expected to have the format <tt>(value1, value2, ..., valueN)</tt> where order matters and the key context dependent.  
127 - * The left hand side of the string not parsed in a manner described above is assigned to #name.  
128 - *  
129 - * Values are not necessarily stored as strings in the metadata table.  
130 - * The system will attempt to infer and convert them to their "native" type.  
131 - * The conversion logic is as follows:  
132 - * -# If the value starts with \c [ and ends with \c ] then it is treated as a comma separated list and represented with \c QVariantList. Each value in the list is parsed recursively.  
133 - * -# If the value starts with \c ( and ends with \c ) and contains four comma separated elements, each convertable to a floating point number, then it is represented with \c QRectF.  
134 - * -# If the value starts with \c ( and ends with \c ) and contains two comma separated elements, each convertable to a floating point number, then it is represented with \c QPointF.  
135 - * -# If the value is convertable to a floating point number then it is represented with \c float.  
136 - * -# Otherwise, it is represented with \c QString.  
137 - *  
138 - * Metadata keys fall into one of two categories:  
139 - * - \c camelCaseKeys are inputs that specify how to process the file.  
140 - * - \c Capitalized_Underscored_Keys are outputs computed from processing the file.  
141 - *  
142 - * Below are some of the most commonly occuring standardized keys:  
143 - *  
144 - * Key | Value | Description  
145 - * --- | ---- | -----------  
146 - * name | QString | Contents of #name  
147 - * separator | QString | Seperate #name into multiple files  
148 - * Index | int | Index of a template in a template list  
149 - * Confidence | float | Classification/Regression quality  
150 - * FTE | bool | Failure to enroll  
151 - * FTO | bool | Failure to open  
152 - * *_X | float | Position  
153 - * *_Y | float | Position  
154 - * *_Width | float | Size  
155 - * *_Height | float | Size  
156 - * *_Radius | float | Size  
157 - * Label | QString | Class label  
158 - * Theta | float | Pose  
159 - * Roll | float | Pose  
160 - * Pitch | float | Pose  
161 - * Yaw | float | Pose  
162 - * Points | QList<QPointF> | List of unnamed points  
163 - * Rects | QList<Rect> | List of unnamed rects  
164 - * Age | float | Age used for demographic filtering  
165 - * Gender | QString | Subject gender  
166 - * Train | bool | The data is for training, as opposed to enrollment  
167 - * _* | * | Reserved for internal use  
168 - */  
169 struct BR_EXPORT File 55 struct BR_EXPORT File
170 { 56 {
171 - QString name; /*!< \brief Path to a file on disk. */ 57 + QString name;
172 58
173 File() { fte = false; } 59 File() { fte = false; }
174 - File(const QString &file) { init(file); } /*!< \brief Construct a file from a string. */  
175 - File(const QString &file, const QVariant &label) { init(file); set("Label", label); } /*!< \brief Construct a file from a string and assign a label. */  
176 - File(const char *file) { init(file); } /*!< \brief Construct a file from a c-style string. */  
177 - File(const QVariantMap &metadata) : fte(false), m_metadata(metadata) {} /*!< \brief Construct a file from metadata. */  
178 - inline operator QString() const { return name; } /*!< \brief Returns #name. */  
179 - QString flat() const; /*!< \brief A stringified version of the file with metadata. */  
180 - QString hash() const; /*!< \brief A hash of the file. */  
181 -  
182 - inline QStringList localKeys() const { return m_metadata.keys(); } /*!< \brief Returns the private metadata keys. */  
183 - inline QVariantMap localMetadata() const { return m_metadata; } /*!< \brief Returns the private metadata. */  
184 -  
185 - void append(const QVariantMap &localMetadata); /*!< \brief Add new metadata fields. */  
186 - void append(const File &other); /*!< \brief Append another file using \c separator. */  
187 - inline File &operator+=(const QMap<QString,QVariant> &other) { append(other); return *this; } /*!< \brief Add new metadata fields. */  
188 - inline File &operator+=(const File &other) { append(other); return *this; } /*!< \brief Append another file using \c separator. */  
189 -  
190 - QList<File> split() const; /*!< \brief Split the file using \c separator. */  
191 - QList<File> split(const QString &separator) const; /*!< \brief Split the file. */  
192 -  
193 - inline void setParameter(int index, const QVariant &value) { set("_Arg" + QString::number(index), value); } /*!< \brief Insert a keyless value. */  
194 - inline bool containsParameter(int index) const { return contains("_Arg" + QString::number(index)); } /*!< \brief Check for the existence of a keyless value. */  
195 - inline QVariant getParameter(int index) const { return get<QVariant>("_Arg" + QString::number(index)); } /*!< \brief Retrieve a keyless value. */  
196 -  
197 - inline bool operator==(const char* other) const { return name == other; } /*!< \brief Compare name to c-style string. */  
198 - inline bool operator==(const File &other) const { return (name == other.name) && (m_metadata == other.m_metadata); } /*!< \brief Compare name and metadata for equality. */  
199 - inline bool operator!=(const File &other) const { return !(*this == other); } /*!< \brief Compare name and metadata for inequality. */  
200 - inline bool operator<(const File &other) const { return name < other.name; } /*!< \brief Compare name. */  
201 - inline bool operator<=(const File &other) const { return name <= other.name; } /*!< \brief Compare name. */  
202 - inline bool operator>(const File &other) const { return name > other.name; } /*!< \brief Compare name. */  
203 - inline bool operator>=(const File &other) const { return name >= other.name; } /*!< \brief Compare name. */  
204 -  
205 - inline bool isNull() const { return name.isEmpty() && m_metadata.isEmpty(); } /*!< \brief Returns \c true if name and metadata are empty, \c false otherwise. */  
206 - inline bool isTerminal() const { return name == "terminal"; } /*!< \brief Returns \c true if #name is "terminal", \c false otherwise. */  
207 - inline bool exists() const { return QFileInfo(name).exists(); } /*!< \brief Returns \c true if the file exists on disk, \c false otherwise. */  
208 - inline QString fileName() const { return QFileInfo(name).fileName(); } /*!< \brief Returns the file's base name and extension. */ 60 + File(const QString &file) { init(file); }
  61 + File(const QString &file, const QVariant &label) { init(file); set("Label", label); }
  62 + File(const char *file) { init(file); }
  63 + File(const QVariantMap &metadata) : fte(false), m_metadata(metadata) {}
  64 + inline operator QString() const { return name; }
  65 + QString flat() const;
  66 + QString hash() const;
  67 +
  68 + inline QStringList localKeys() const { return m_metadata.keys(); }
  69 + inline QVariantMap localMetadata() const { return m_metadata; }
  70 +
  71 + void append(const QVariantMap &localMetadata);
  72 + void append(const File &other);
  73 + inline File &operator+=(const QMap<QString,QVariant> &other) { append(other); return *this; }
  74 + inline File &operator+=(const File &other) { append(other); return *this; }
  75 +
  76 + QList<File> split() const;
  77 + QList<File> split(const QString &separator) const;
  78 +
  79 + inline void setParameter(int index, const QVariant &value) { set("_Arg" + QString::number(index), value); }
  80 + inline bool containsParameter(int index) const { return contains("_Arg" + QString::number(index)); }
  81 + inline QVariant getParameter(int index) const { return get<QVariant>("_Arg" + QString::number(index)); }
  82 +
  83 + inline bool operator==(const char* other) const { return name == other; }
  84 + inline bool operator==(const File &other) const { return (name == other.name) && (m_metadata == other.m_metadata); }
  85 + inline bool operator!=(const File &other) const { return !(*this == other); }
  86 + inline bool operator<(const File &other) const { return name < other.name; }
  87 + inline bool operator<=(const File &other) const { return name <= other.name; }
  88 + inline bool operator>(const File &other) const { return name > other.name; }
  89 + inline bool operator>=(const File &other) const { return name >= other.name; }
  90 +
  91 + inline bool isNull() const { return name.isEmpty() && m_metadata.isEmpty(); }
  92 + inline bool isTerminal() const { return name == "terminal"; }
  93 + inline bool exists() const { return QFileInfo(name).exists(); }
  94 + inline QString fileName() const { return QFileInfo(name).fileName(); }
209 inline QString baseName() const { const QString baseName = QFileInfo(name).baseName(); 95 inline QString baseName() const { const QString baseName = QFileInfo(name).baseName();
210 - return baseName.isEmpty() ? QDir(name).dirName() : baseName; } /*!< \brief Returns the file's base name. */  
211 - inline QString suffix() const { return QFileInfo(name).suffix(); } /*!< \brief Returns the file's extension. */  
212 - inline QString path() const { return QFileInfo(name).path(); } /*! \brief Returns the file's path excluding its name. */  
213 - QString resolved() const; /*!< \brief Returns name prepended with Globals->path if name does not exist. */  
214 -  
215 - bool contains(const QString &key) const; /*!< \brief Returns \c true if the key has an associated value, \c false otherwise. */  
216 - bool contains(const QStringList &keys) const; /*!< \brief Returns \c true if all keys have associated values, \c false otherwise. */  
217 - QVariant value(const QString &key) const; /*!< \brief Returns the value for the specified key. */  
218 - static QVariant parse(const QString &value); /*!< \brief Try to convert the QString to a QPointF or QRectF if possible. */  
219 - inline void set(const QString &key, const QVariant &value) { m_metadata.insert(key, value); } /*!< \brief Insert or overwrite the metadata key with the specified value. */  
220 - void set(const QString &key, const QString &value); /*!< \brief Insert or overwrite the metadata key with the specified value. */  
221 -  
222 - /*!< \brief Specialization for list type. Insert or overwrite the metadata key with the specified value. */ 96 + return baseName.isEmpty() ? QDir(name).dirName() : baseName; }
  97 + inline QString suffix() const { return QFileInfo(name).suffix(); }
  98 + inline QString path() const { return QFileInfo(name).path(); }
  99 + QString resolved() const;
  100 +
  101 + bool contains(const QString &key) const;
  102 + bool contains(const QStringList &keys) const;
  103 + QVariant value(const QString &key) const;
  104 + static QVariant parse(const QString &value);
  105 + inline void set(const QString &key, const QVariant &value) { m_metadata.insert(key, value); }
  106 + void set(const QString &key, const QString &value);
  107 +
  108 +
223 template <typename T> 109 template <typename T>
224 void setList(const QString &key, const QList<T> &value) 110 void setList(const QString &key, const QList<T> &value)
225 { 111 {
@@ -230,9 +116,9 @@ struct BR_EXPORT File @@ -230,9 +116,9 @@ struct BR_EXPORT File
230 set(key, variantList); 116 set(key, variantList);
231 } 117 }
232 118
233 - inline void remove(const QString &key) { m_metadata.remove(key); } /*!< \brief Remove the metadata key. */ 119 + inline void remove(const QString &key) { m_metadata.remove(key); }
  120 +
234 121
235 - /*!< \brief Returns a value for the key, throwing an error if the key does not exist. */  
236 template <typename T> 122 template <typename T>
237 T get(const QString &key) const 123 T get(const QString &key) const
238 { 124 {
@@ -242,7 +128,7 @@ struct BR_EXPORT File @@ -242,7 +128,7 @@ struct BR_EXPORT File
242 return variant.value<T>(); 128 return variant.value<T>();
243 } 129 }
244 130
245 - /*!< \brief Returns a value for the key, returning \em defaultValue if the key does not exist or can't be converted. */ 131 +
246 template <typename T> 132 template <typename T>
247 T get(const QString &key, const T &defaultValue) const 133 T get(const QString &key, const T &defaultValue) const
248 { 134 {
@@ -252,10 +138,10 @@ struct BR_EXPORT File @@ -252,10 +138,10 @@ struct BR_EXPORT File
252 return variant.value<T>(); 138 return variant.value<T>();
253 } 139 }
254 140
255 - /*!< \brief Specialization for boolean type. */ 141 +
256 bool getBool(const QString &key, bool defaultValue = false) const; 142 bool getBool(const QString &key, bool defaultValue = false) const;
257 143
258 - /*!< \brief Specialization for list type. Returns a list of type T for the key, throwing an error if the key does not exist or if the value cannot be converted to the specified type. */ 144 +
259 template <typename T> 145 template <typename T>
260 QList<T> getList(const QString &key) const 146 QList<T> getList(const QString &key) const
261 { 147 {
@@ -268,7 +154,7 @@ struct BR_EXPORT File @@ -268,7 +154,7 @@ struct BR_EXPORT File
268 return list; 154 return list;
269 } 155 }
270 156
271 - /*!< \brief Specialization for list type. Returns a list of type T for the key, returning \em defaultValue if the key does not exist or can't be converted. */ 157 +
272 template <typename T> 158 template <typename T>
273 QList<T> getList(const QString &key, const QList<T> defaultValue) const 159 QList<T> getList(const QString &key, const QList<T> defaultValue) const
274 { 160 {
@@ -281,7 +167,7 @@ struct BR_EXPORT File @@ -281,7 +167,7 @@ struct BR_EXPORT File
281 return list; 167 return list;
282 } 168 }
283 169
284 - /*!< \brief Returns the value for the specified key for every file in the list. */ 170 +
285 template<class U> 171 template<class U>
286 static QList<QVariant> values(const QList<U> &fileList, const QString &key) 172 static QList<QVariant> values(const QList<U> &fileList, const QString &key)
287 { 173 {
@@ -290,7 +176,7 @@ struct BR_EXPORT File @@ -290,7 +176,7 @@ struct BR_EXPORT File
290 return values; 176 return values;
291 } 177 }
292 178
293 - /*!< \brief Returns a value for the key for every file in the list, throwing an error if the key does not exist. */ 179 +
294 template<class T, class U> 180 template<class T, class U>
295 static QList<T> get(const QList<U> &fileList, const QString &key) 181 static QList<T> get(const QList<U> &fileList, const QString &key)
296 { 182 {
@@ -299,7 +185,7 @@ struct BR_EXPORT File @@ -299,7 +185,7 @@ struct BR_EXPORT File
299 return result; 185 return result;
300 } 186 }
301 187
302 - /*!< \brief Returns a value for the key for every file in the list, returning \em defaultValue if the key does not exist or can't be converted. */ 188 +
303 template<class T, class U> 189 template<class T, class U>
304 static QList<T> get(const QList<U> &fileList, const QString &key, const T &defaultValue) 190 static QList<T> get(const QList<U> &fileList, const QString &key, const T &defaultValue)
305 { 191 {
@@ -308,22 +194,22 @@ struct BR_EXPORT File @@ -308,22 +194,22 @@ struct BR_EXPORT File
308 return result; 194 return result;
309 } 195 }
310 196
311 - QList<QPointF> namedPoints() const; /*!< \brief Returns points convertible from metadata keys. */  
312 - QList<QPointF> points() const; /*!< \brief Returns the file's points list. */  
313 - void appendPoint(const QPointF &point); /*!< \brief Adds a point to the file's point list. */  
314 - void appendPoints(const QList<QPointF> &points); /*!< \brief Adds landmarks to the file's landmark list. */  
315 - inline void clearPoints() { m_metadata["Points"] = QList<QVariant>(); } /*!< \brief Clears the file's landmark list. */  
316 - inline void setPoints(const QList<QPointF> &points) { clearPoints(); appendPoints(points); } /*!< \brief Overwrites the file's landmark list. */  
317 -  
318 - QList<QRectF> namedRects() const; /*!< \brief Returns rects convertible from metadata values. */  
319 - QList<QRectF> rects() const; /*!< \brief Returns the file's rects list. */  
320 - void appendRect(const QRectF &rect); /*!< \brief Adds a rect to the file's rect list. */  
321 - void appendRect(const cv::Rect &rect); /*!< \brief Adds a rect to the file's rect list. */  
322 - void appendRects(const QList<QRectF> &rects); /*!< \brief Adds rects to the file's rect list. */  
323 - void appendRects(const QList<cv::Rect> &rects); /*!< \brief Adds rects to the file's rect list. */  
324 - inline void clearRects() { m_metadata["Rects"] = QList<QVariant>(); } /*!< \brief Clears the file's rect list. */  
325 - inline void setRects(const QList<QRectF> &rects) { clearRects(); appendRects(rects); } /*!< \brief Overwrites the file's rect list. */  
326 - inline void setRects(const QList<cv::Rect> &rects) { clearRects(); appendRects(rects); } /*!< \brief Overwrites the file's rect list. */ 197 + QList<QPointF> namedPoints() const;
  198 + QList<QPointF> points() const;
  199 + void appendPoint(const QPointF &point);
  200 + void appendPoints(const QList<QPointF> &points);
  201 + inline void clearPoints() { m_metadata["Points"] = QList<QVariant>(); }
  202 + inline void setPoints(const QList<QPointF> &points) { clearPoints(); appendPoints(points); }
  203 +
  204 + QList<QRectF> namedRects() const;
  205 + QList<QRectF> rects() const;
  206 + void appendRect(const QRectF &rect);
  207 + void appendRect(const cv::Rect &rect);
  208 + void appendRects(const QList<QRectF> &rects);
  209 + void appendRects(const QList<cv::Rect> &rects);
  210 + inline void clearRects() { m_metadata["Rects"] = QList<QVariant>(); }
  211 + inline void setRects(const QList<QRectF> &rects) { clearRects(); appendRects(rects); }
  212 + inline void setRects(const QList<cv::Rect> &rects) { clearRects(); appendRects(rects); }
327 213
328 bool fte; 214 bool fte;
329 private: 215 private:
@@ -334,83 +220,64 @@ private: @@ -334,83 +220,64 @@ private:
334 void init(const QString &file); 220 void init(const QString &file);
335 }; 221 };
336 222
337 -/*!< \brief Specialization for boolean type. */ 223 +
338 template <> 224 template <>
339 inline bool File::get<bool>(const QString &key, const bool &defaultValue) const 225 inline bool File::get<bool>(const QString &key, const bool &defaultValue) const
340 { 226 {
341 return getBool(key, defaultValue); 227 return getBool(key, defaultValue);
342 } 228 }
343 229
344 -/*!< \brief Specialization for boolean type. */ 230 +
345 template <> 231 template <>
346 inline bool File::get<bool>(const QString &key) const 232 inline bool File::get<bool>(const QString &key) const
347 { 233 {
348 return getBool(key); 234 return getBool(key);
349 } 235 }
350 236
351 -BR_EXPORT QDebug operator<<(QDebug dbg, const File &file); /*!< \brief Prints br::File::flat() to \c stderr. */  
352 -BR_EXPORT QDataStream &operator<<(QDataStream &stream, const File &file); /*!< \brief Serializes the file to a stream. */  
353 -BR_EXPORT QDataStream &operator>>(QDataStream &stream, File &file); /*!< \brief Deserializes the file from a stream. */ 237 +BR_EXPORT QDebug operator<<(QDebug dbg, const File &file);
  238 +BR_EXPORT QDataStream &operator<<(QDataStream &stream, const File &file);
  239 +BR_EXPORT QDataStream &operator>>(QDataStream &stream, File &file);
  240 +
354 241
355 -/*!  
356 - * \brief A list of files.  
357 - *  
358 - * Convenience class for working with a list of files.  
359 - */  
360 struct BR_EXPORT FileList : public QList<File> 242 struct BR_EXPORT FileList : public QList<File>
361 { 243 {
362 FileList() {} 244 FileList() {}
363 - FileList(int n); /*!< \brief Initialize the list with \em n empty files. */  
364 - FileList(const QStringList &files); /*!< \brief Initialize the file list from a string list. */  
365 - FileList(const QList<File> &files) { append(files); } /*!< \brief Initialize the file list from another file list. */ 245 + FileList(int n);
  246 + FileList(const QStringList &files);
  247 + FileList(const QList<File> &files) { append(files); }
366 248
367 - QStringList flat() const; /*!< \brief Returns br::File::flat() for each file in the list. */  
368 - QStringList names() const; /*!< \brief Returns #br::File::name for each file in the list. */  
369 - void sort(const QString& key); /*!< \brief Sort the list based on metadata. */ 249 + QStringList flat() const;
  250 + QStringList names() const;
  251 + void sort(const QString& key);
370 252
371 - QList<int> crossValidationPartitions() const; /*!< \brief Returns the cross-validation partition (default=0) for each file in the list. */  
372 - int failures() const; /*!< \brief Returns the number of files with br::File::failed(). */ 253 + QList<int> crossValidationPartitions() const;
  254 + int failures() const;
373 255
374 - static FileList fromGallery(const File &gallery, bool cache = false); /*!< \brief Create a file list from a br::Gallery. */ 256 + static FileList fromGallery(const File &gallery, bool cache = false);
375 }; 257 };
376 258
377 -/*!  
378 - * \brief A list of matrices associated with a file.  
379 - *  
380 - * The Template is one of two important data structures in OpenBR (the File is the other).  
381 - * A template represents a biometric at various stages of enrollment and can be modified by br::Transform and compared to other templates with br::Distance.  
382 - *  
383 - * While there exist many cases (ex. video enrollment, multiple face detects, per-patch subspace learning, ...) where the template will contain more than one matrix,  
384 - * in most cases templates have exactly one matrix in their list representing a single image at various stages of enrollment.  
385 - * In the cases where exactly one image is expected, the template provides the function m() as an idiom for treating it as a single matrix.  
386 - * Casting operators are also provided to pass the template into image processing functions expecting matrices.  
387 - *  
388 - * Metadata related to the template that is computed during enrollment (ex. bounding boxes, eye locations, quality metrics, ...) should be assigned to the template's #file member.  
389 - */ 259 +
390 struct Template : public QList<cv::Mat> 260 struct Template : public QList<cv::Mat>
391 { 261 {
392 - File file; /*!< \brief The file from which the template is constructed. */ 262 + File file;
393 Template() {} 263 Template() {}
394 - Template(const File &_file) : file(_file) {} /*!< \brief Initialize #file. */  
395 - Template(const File &_file, const cv::Mat &mat) : file(_file) { append(mat); } /*!< \brief Initialize #file and append a matrix. */  
396 - Template(const File &_file, const QList<cv::Mat> &mats) : file(_file) { append(mats); } /*!< \brief Initialize #file and append matricies. */  
397 - Template(const cv::Mat &mat) { append(mat); } /*!< \brief Append a matrix. */ 264 + Template(const File &_file) : file(_file) {}
  265 + Template(const File &_file, const cv::Mat &mat) : file(_file) { append(mat); }
  266 + Template(const File &_file, const QList<cv::Mat> &mats) : file(_file) { append(mats); }
  267 + Template(const cv::Mat &mat) { append(mat); }
398 268
399 inline const cv::Mat &m() const { static const cv::Mat NullMatrix; 269 inline const cv::Mat &m() const { static const cv::Mat NullMatrix;
400 - return isEmpty() ? qFatal("Empty template."), NullMatrix : last(); } /*!< \brief Idiom to treat the template as a matrix. */  
401 - inline cv::Mat &m() { return isEmpty() ? append(cv::Mat()), last() : last(); } /*!< \brief Idiom to treat the template as a matrix. */ 270 + return isEmpty() ? qFatal("Empty template."), NullMatrix : last(); }
  271 + inline cv::Mat &m() { return isEmpty() ? append(cv::Mat()), last() : last(); }
402 inline operator const File &() const { return file; } 272 inline operator const File &() const { return file; }
403 - inline cv::Mat &operator=(const cv::Mat &other) { return m() = other; } /*!< \brief Idiom to treat the template as a matrix. */  
404 - inline operator const cv::Mat&() const { return m(); } /*!< \brief Idiom to treat the template as a matrix. */  
405 - inline operator cv::Mat&() { return m(); } /*!< \brief Idiom to treat the template as a matrix. */  
406 - inline operator cv::_InputArray() const { return m(); } /*!< \brief Idiom to treat the template as a matrix. */  
407 - inline operator cv::_OutputArray() { return m(); } /*!< \brief Idiom to treat the template as a matrix. */  
408 - inline bool isNull() const { return isEmpty() || !m().data; } /*!< \brief Returns \c true if the template is empty or has no matrix data, \c false otherwise. */  
409 - inline void merge(const Template &other) { append(other); file.append(other.file); } /*!< \brief Append the contents of another template. */  
410 -  
411 - /*!  
412 - * \brief Returns the total number of bytes in all the matrices.  
413 - */ 273 + inline cv::Mat &operator=(const cv::Mat &other) { return m() = other; }
  274 + inline operator const cv::Mat&() const { return m(); }
  275 + inline operator cv::Mat&() { return m(); }
  276 + inline operator cv::_InputArray() const { return m(); }
  277 + inline operator cv::_OutputArray() { return m(); }
  278 + inline bool isNull() const { return isEmpty() || !m().data; }
  279 + inline void merge(const Template &other) { append(other); file.append(other.file); }
  280 +
414 size_t bytes() const 281 size_t bytes() const
415 { 282 {
416 size_t bytes = 0; 283 size_t bytes = 0;
@@ -419,9 +286,6 @@ struct Template : public QList&lt;cv::Mat&gt; @@ -419,9 +286,6 @@ struct Template : public QList&lt;cv::Mat&gt;
419 return bytes; 286 return bytes;
420 } 287 }
421 288
422 - /*!  
423 - * \brief Copies all the matrices and returns a new template.  
424 - */  
425 Template clone() const 289 Template clone() const
426 { 290 {
427 Template other(file); 291 Template other(file);
@@ -430,41 +294,27 @@ struct Template : public QList&lt;cv::Mat&gt; @@ -430,41 +294,27 @@ struct Template : public QList&lt;cv::Mat&gt;
430 } 294 }
431 }; 295 };
432 296
433 -/*!  
434 - * \brief Serialize a template.  
435 - */  
436 BR_EXPORT QDataStream &operator<<(QDataStream &stream, const Template &t); 297 BR_EXPORT QDataStream &operator<<(QDataStream &stream, const Template &t);
437 298
438 -/*!  
439 - * \brief Deserialize a template.  
440 - */  
441 BR_EXPORT QDataStream &operator>>(QDataStream &stream, Template &t); 299 BR_EXPORT QDataStream &operator>>(QDataStream &stream, Template &t);
442 300
443 -/*!  
444 - * \brief A list of templates.  
445 - *  
446 - * Convenience class for working with a list of templates.  
447 - */  
448 struct TemplateList : public QList<Template> 301 struct TemplateList : public QList<Template>
449 { 302 {
450 TemplateList() {} 303 TemplateList() {}
451 - TemplateList(const QList<Template> &templates) { append(templates); } /*!< \brief Initialize the template list from another template list. */  
452 - TemplateList(const QList<File> &files) { foreach (const File &file, files) append(file); } /*!< \brief Initialize the template list from a file list. */  
453 - BR_EXPORT static TemplateList fromGallery(const File &gallery); /*!< \brief Create a template list from a br::Gallery. */ 304 + TemplateList(const QList<Template> &templates) { append(templates); }
  305 + TemplateList(const QList<File> &files) { foreach (const File &file, files) append(file); }
  306 + BR_EXPORT static TemplateList fromGallery(const File &gallery);
  307 +
454 308
455 - /*!< \brief Create a template list from a memory buffer of individual templates. Compatible with '.gal' galleries. */  
456 BR_EXPORT static TemplateList fromBuffer(const QByteArray &buffer); 309 BR_EXPORT static TemplateList fromBuffer(const QByteArray &buffer);
457 310
458 - /*!< \brief Ensure labels are in the range [0,numClasses-1]. */ 311 +
459 BR_EXPORT static TemplateList relabel(const TemplateList &tl, const QString &propName, bool preserveIntegers); 312 BR_EXPORT static TemplateList relabel(const TemplateList &tl, const QString &propName, bool preserveIntegers);
460 313
461 BR_EXPORT QList<int> indexProperty(const QString &propName, QHash<QString, int> * valueMap=NULL,QHash<int, QVariant> * reverseLookup = NULL) const; 314 BR_EXPORT QList<int> indexProperty(const QString &propName, QHash<QString, int> * valueMap=NULL,QHash<int, QVariant> * reverseLookup = NULL) const;
462 BR_EXPORT QList<int> indexProperty(const QString &propName, QHash<QString, int> &valueMap, QHash<int, QVariant> &reverseLookup) const; 315 BR_EXPORT QList<int> indexProperty(const QString &propName, QHash<QString, int> &valueMap, QHash<int, QVariant> &reverseLookup) const;
463 BR_EXPORT QList<int> applyIndex(const QString &propName, const QHash<QString, int> &valueMap) const; 316 BR_EXPORT QList<int> applyIndex(const QString &propName, const QHash<QString, int> &valueMap) const;
464 317
465 - /*!  
466 - * \brief Returns the total number of bytes in all the templates.  
467 - */  
468 template <typename T> 318 template <typename T>
469 T bytes() const 319 T bytes() const
470 { 320 {
@@ -473,9 +323,6 @@ struct TemplateList : public QList&lt;Template&gt; @@ -473,9 +323,6 @@ struct TemplateList : public QList&lt;Template&gt;
473 return bytes; 323 return bytes;
474 } 324 }
475 325
476 - /*!  
477 - * \brief Returns a list of matrices with one matrix from each template at the specified \em index.  
478 - */  
479 QList<cv::Mat> data(int index = 0) const 326 QList<cv::Mat> data(int index = 0) const
480 { 327 {
481 QList<cv::Mat> data; data.reserve(size()); 328 QList<cv::Mat> data; data.reserve(size());
@@ -483,9 +330,6 @@ struct TemplateList : public QList&lt;Template&gt; @@ -483,9 +330,6 @@ struct TemplateList : public QList&lt;Template&gt;
483 return data; 330 return data;
484 } 331 }
485 332
486 - /*!  
487 - * \brief Returns a list of #br::TemplateList with each #br::Template in a given #br::TemplateList containing the number of matrices specified by \em partitionSizes.  
488 - */  
489 QList<TemplateList> partition(const QList<int> &partitionSizes) const 333 QList<TemplateList> partition(const QList<int> &partitionSizes) const
490 { 334 {
491 int sum = 0; 335 int sum = 0;
@@ -517,9 +361,6 @@ struct TemplateList : public QList&lt;Template&gt; @@ -517,9 +361,6 @@ struct TemplateList : public QList&lt;Template&gt;
517 return partitions; 361 return partitions;
518 } 362 }
519 363
520 - /*!  
521 - * \brief Returns #br::Template::file for each template in the list.  
522 - */  
523 FileList files() const 364 FileList files() const
524 { 365 {
525 FileList files; files.reserve(size()); 366 FileList files; files.reserve(size());
@@ -527,14 +368,8 @@ struct TemplateList : public QList&lt;Template&gt; @@ -527,14 +368,8 @@ struct TemplateList : public QList&lt;Template&gt;
527 return files; 368 return files;
528 } 369 }
529 370
530 - /*!  
531 - * \brief Returns #br::Template::file for each template in the list.  
532 - */  
533 FileList operator()() const { return files(); } 371 FileList operator()() const { return files(); }
534 372
535 - /*!  
536 - * \brief Returns the number of occurences for each label in the list.  
537 - */  
538 template<typename T> 373 template<typename T>
539 QMap<T,int> countValues(const QString &propName, bool excludeFailures = false) const 374 QMap<T,int> countValues(const QString &propName, bool excludeFailures = false) const
540 { 375 {
@@ -545,9 +380,6 @@ struct TemplateList : public QList&lt;Template&gt; @@ -545,9 +380,6 @@ struct TemplateList : public QList&lt;Template&gt;
545 return labelCounts; 380 return labelCounts;
546 } 381 }
547 382
548 - /*!  
549 - * \brief Merge all the templates together.  
550 - */  
551 TemplateList reduced() const 383 TemplateList reduced() const
552 { 384 {
553 Template reduced; 385 Template reduced;
@@ -556,9 +388,6 @@ struct TemplateList : public QList&lt;Template&gt; @@ -556,9 +388,6 @@ struct TemplateList : public QList&lt;Template&gt;
556 return TemplateList() << reduced; 388 return TemplateList() << reduced;
557 } 389 }
558 390
559 - /*!  
560 - * \brief Find the indices of templates with specified key, value pairs.  
561 - */  
562 template<typename T> 391 template<typename T>
563 QList<int> find(const QString& key, const T& value) 392 QList<int> find(const QString& key, const T& value)
564 { 393 {
@@ -571,41 +400,36 @@ struct TemplateList : public QList&lt;Template&gt; @@ -571,41 +400,36 @@ struct TemplateList : public QList&lt;Template&gt;
571 } 400 }
572 }; 401 };
573 402
574 -/*!  
575 - * \brief The base class of all plugins and objects requiring introspection.  
576 - *  
577 - * Plugins are constructed from files.  
578 - * The file's name specifies which plugin to construct and the metadata provides initialization values for the plugin's properties.  
579 - */ 403 +
580 class BR_EXPORT Object : public QObject 404 class BR_EXPORT Object : public QObject
581 { 405 {
582 Q_OBJECT 406 Q_OBJECT
583 - int firstAvailablePropertyIdx; /*!< \brief Index of the first property that can be set via command line arguments. */ 407 + int firstAvailablePropertyIdx;
584 408
585 public: 409 public:
586 - File file; /*!< \brief The file used to construct the plugin. */ 410 + File file;
  411 +
  412 + virtual void init() {}
  413 + virtual void store(QDataStream &stream) const;
  414 + virtual void load(QDataStream &stream);
587 415
588 - virtual void init() {} /*!< \brief Overload this function instead of the default constructor to initialize the derived class. It should be safe to call this function multiple times. */  
589 - virtual void store(QDataStream &stream) const; /*!< \brief Serialize the object. */  
590 - virtual void load(QDataStream &stream); /*!< \brief Deserialize the object. Default implementation calls init() after deserialization. */  
591 416
592 - /*!< \brief Serialize an object created via the plugin system, including the string used to build the base object, allowing re-creation of the object without knowledge of its base string*/  
593 virtual void serialize(QDataStream &stream) const 417 virtual void serialize(QDataStream &stream) const
594 { 418 {
595 stream << description(); 419 stream << description();
596 store(stream); 420 store(stream);
597 } 421 }
598 422
599 - QStringList parameters() const; /*!< \brief A string describing the parameters the object takes. */  
600 - QStringList prunedArguments(bool expanded = false) const; /*!< \brief A string describing the values the object has, default valued parameters will not be listed. If expanded is true, all abbreviations and model file names should be replaced with a description of the object generated from those names. */  
601 - QString argument(int index, bool expanded) const; /*!< \brief A string value for the argument at the specified index. */  
602 - virtual QString description(bool expanded = false) const; /*!< \brief Returns a string description of the object. */  
603 -  
604 - void setProperty(const QString &name, QVariant value); /*!< \brief Overload of QObject::setProperty to handle OpenBR data types. */  
605 - virtual bool setPropertyRecursive(const QString &name, QVariant value); /*!< \brief Recursive version of setProperty, try to set the property on this object, or its children, returns true if successful. */  
606 - bool setExistingProperty(const QString &name, QVariant value); /*! <\brief attempt to set property 'name' on this object. If name is not a pre-declared property, return false */ 423 + QStringList parameters() const;
  424 + QStringList prunedArguments(bool expanded = false) const;
  425 + QString argument(int index, bool expanded) const;
  426 + virtual QString description(bool expanded = false) const;
607 427
608 - virtual QList<Object *> getChildren() const; /*!< \brief retrieve children of this object, default version scans properties, subclasses which do not sotre their children as properties must overload. */ 428 + void setProperty(const QString &name, QVariant value);
  429 + virtual bool setPropertyRecursive(const QString &name, QVariant value);
  430 + bool setExistingProperty(const QString &name, QVariant value);
  431 +
  432 + virtual QList<Object *> getChildren() const;
609 433
610 template<typename T> 434 template<typename T>
611 QList<T *> getChildren() const 435 QList<T *> getChildren() const
@@ -620,287 +444,109 @@ public: @@ -620,287 +444,109 @@ public:
620 return output; 444 return output;
621 } 445 }
622 446
623 - static QStringList parse(const QString &string, char split = ','); /*!< \brief Splits the string while respecting lexical scoping of <tt>()</tt>, <tt>[]</tt>, <tt>\<\></tt>, and <tt>{}</tt>. */ 447 + static QStringList parse(const QString &string, char split = ',');
624 448
625 private: 449 private:
626 template <typename T> friend struct Factory; 450 template <typename T> friend struct Factory;
627 friend class Context; 451 friend class Context;
628 - void init(const File &file); /*!< \brief Initializes the plugin's properties from the file's metadata. */ 452 + void init(const File &file);
629 }; 453 };
630 454
631 -/*!  
632 - * \brief The singleton class of global settings.  
633 - *  
634 - * Allocated by br::Context::initialize(), and deallocated by br::Context::finalize().  
635 - *  
636 - * \code  
637 - * // Access the global context using the br::Globals pointer:  
638 - * QString theSDKPath = br::Globals->sdkPath;  
639 - * \endcode  
640 - */ 455 +
641 class BR_EXPORT Context : public Object 456 class BR_EXPORT Context : public Object
642 { 457 {
643 Q_OBJECT 458 Q_OBJECT
644 QFile logFile; 459 QFile logFile;
645 460
646 public: 461 public:
647 - /*!  
648 - * \brief Path to <tt>share/openbr/openbr.bib</tt>  
649 - */ 462 +
650 Q_PROPERTY(QString sdkPath READ get_sdkPath WRITE set_sdkPath RESET reset_sdkPath) 463 Q_PROPERTY(QString sdkPath READ get_sdkPath WRITE set_sdkPath RESET reset_sdkPath)
651 BR_PROPERTY(QString, sdkPath, "") 464 BR_PROPERTY(QString, sdkPath, "")
652 465
653 - /*!  
654 - * \brief The default algorithm to use when enrolling and comparing templates.  
655 - */  
656 Q_PROPERTY(QString algorithm READ get_algorithm WRITE set_algorithm RESET reset_algorithm) 466 Q_PROPERTY(QString algorithm READ get_algorithm WRITE set_algorithm RESET reset_algorithm)
657 BR_PROPERTY(QString, algorithm, "") 467 BR_PROPERTY(QString, algorithm, "")
658 468
659 - /*!  
660 - * \brief Optional log file to copy <tt>stderr</tt> to.  
661 - */  
662 Q_PROPERTY(QString log READ get_log WRITE set_log RESET reset_log) 469 Q_PROPERTY(QString log READ get_log WRITE set_log RESET reset_log)
663 BR_PROPERTY(QString, log, "") 470 BR_PROPERTY(QString, log, "")
664 471
665 - /*!  
666 - * \brief Path to use when resolving images specified with relative paths.  
667 - * Multiple paths can be specified using a semicolon separator.  
668 - */  
669 Q_PROPERTY(QString path READ get_path WRITE set_path RESET reset_path) 472 Q_PROPERTY(QString path READ get_path WRITE set_path RESET reset_path)
670 BR_PROPERTY(QString, path, "") 473 BR_PROPERTY(QString, path, "")
671 474
672 - /*!  
673 - * \brief The number of threads to use.  
674 - */  
675 Q_PROPERTY(int parallelism READ get_parallelism WRITE set_parallelism RESET reset_parallelism) 475 Q_PROPERTY(int parallelism READ get_parallelism WRITE set_parallelism RESET reset_parallelism)
676 BR_PROPERTY(int, parallelism, std::max(1, QThread::idealThreadCount()+1)) 476 BR_PROPERTY(int, parallelism, std::max(1, QThread::idealThreadCount()+1))
677 477
678 - /*!  
679 - * \brief Whether or not to use GUI functions  
680 - */  
681 Q_PROPERTY(bool useGui READ get_useGui WRITE set_useGui RESET reset_useGui) 478 Q_PROPERTY(bool useGui READ get_useGui WRITE set_useGui RESET reset_useGui)
682 BR_PROPERTY(bool, useGui, true) 479 BR_PROPERTY(bool, useGui, true)
683 480
684 - /*!  
685 - * \brief The maximum number of templates to process in parallel.  
686 - */  
687 Q_PROPERTY(int blockSize READ get_blockSize WRITE set_blockSize RESET reset_blockSize) 481 Q_PROPERTY(int blockSize READ get_blockSize WRITE set_blockSize RESET reset_blockSize)
688 BR_PROPERTY(int, blockSize, parallelism * ((sizeof(void*) == 4) ? 128 : 1024)) 482 BR_PROPERTY(int, blockSize, parallelism * ((sizeof(void*) == 4) ? 128 : 1024))
689 483
690 - /*!  
691 - * \brief If \c true no messages will be sent to the terminal, \c false by default.  
692 - */  
693 Q_PROPERTY(bool quiet READ get_quiet WRITE set_quiet RESET reset_quiet) 484 Q_PROPERTY(bool quiet READ get_quiet WRITE set_quiet RESET reset_quiet)
694 BR_PROPERTY(bool, quiet, false) 485 BR_PROPERTY(bool, quiet, false)
695 486
696 - /*!  
697 - * \brief If \c true extra messages will be sent to the terminal, \c false by default.  
698 - */  
699 Q_PROPERTY(bool verbose READ get_verbose WRITE set_verbose RESET reset_verbose) 487 Q_PROPERTY(bool verbose READ get_verbose WRITE set_verbose RESET reset_verbose)
700 BR_PROPERTY(bool, verbose, false) 488 BR_PROPERTY(bool, verbose, false)
701 489
702 - /*!  
703 - * \brief The most resent message sent to the terminal.  
704 - */  
705 Q_PROPERTY(QString mostRecentMessage READ get_mostRecentMessage WRITE set_mostRecentMessage RESET reset_mostRecentMessage) 490 Q_PROPERTY(QString mostRecentMessage READ get_mostRecentMessage WRITE set_mostRecentMessage RESET reset_mostRecentMessage)
706 BR_PROPERTY(QString, mostRecentMessage, "") 491 BR_PROPERTY(QString, mostRecentMessage, "")
707 492
708 - /*!  
709 - * \brief Used internally to compute progress() and timeRemaining().  
710 - */  
711 -  
712 Q_PROPERTY(double currentStep READ get_currentStep WRITE set_currentStep RESET reset_currentStep) 493 Q_PROPERTY(double currentStep READ get_currentStep WRITE set_currentStep RESET reset_currentStep)
713 BR_PROPERTY(double, currentStep, 0) 494 BR_PROPERTY(double, currentStep, 0)
714 495
715 Q_PROPERTY(double currentProgress READ get_currentProgress WRITE set_currentProgress RESET reset_currentProgress) 496 Q_PROPERTY(double currentProgress READ get_currentProgress WRITE set_currentProgress RESET reset_currentProgress)
716 BR_PROPERTY(double, currentProgress, 0) 497 BR_PROPERTY(double, currentProgress, 0)
717 498
718 -  
719 - /*!  
720 - * \brief Used internally to compute progress() and timeRemaining().  
721 - */  
722 Q_PROPERTY(double totalSteps READ get_totalSteps WRITE set_totalSteps RESET reset_totalSteps) 499 Q_PROPERTY(double totalSteps READ get_totalSteps WRITE set_totalSteps RESET reset_totalSteps)
723 BR_PROPERTY(double, totalSteps, 0) 500 BR_PROPERTY(double, totalSteps, 0)
724 501
725 - /*!  
726 - * \brief If \c true enroll 0 or more templates per image, otherwise (default) enroll exactly one.  
727 - */  
728 Q_PROPERTY(bool enrollAll READ get_enrollAll WRITE set_enrollAll RESET reset_enrollAll) 502 Q_PROPERTY(bool enrollAll READ get_enrollAll WRITE set_enrollAll RESET reset_enrollAll)
729 BR_PROPERTY(bool, enrollAll, false) 503 BR_PROPERTY(bool, enrollAll, false)
730 504
731 typedef QHash<QString,QStringList> Filters; 505 typedef QHash<QString,QStringList> Filters;
732 - /*!  
733 - * \brief Filters that automatically determine impostor matches based on target (gallery) template metadata.  
734 - * \see br::FilterDistance  
735 - */  
736 Q_PROPERTY(Filters filters READ get_filters WRITE set_filters RESET reset_filters) 506 Q_PROPERTY(Filters filters READ get_filters WRITE set_filters RESET reset_filters)
737 BR_PROPERTY(Filters, filters, Filters()) 507 BR_PROPERTY(Filters, filters, Filters())
738 508
739 - /*!  
740 - * \brief File output is redirected here if the file's basename is 'buffer', clearing previous contents.  
741 - */  
742 Q_PROPERTY(QByteArray buffer READ get_buffer WRITE set_buffer RESET reset_buffer) 509 Q_PROPERTY(QByteArray buffer READ get_buffer WRITE set_buffer RESET reset_buffer)
743 BR_PROPERTY(QByteArray, buffer, QByteArray()) 510 BR_PROPERTY(QByteArray, buffer, QByteArray())
744 511
745 - /*!  
746 - * \brief Enable/disable score normalization.  
747 - */  
748 Q_PROPERTY(bool scoreNormalization READ get_scoreNormalization WRITE set_scoreNormalization RESET reset_scoreNormalization) 512 Q_PROPERTY(bool scoreNormalization READ get_scoreNormalization WRITE set_scoreNormalization RESET reset_scoreNormalization)
749 BR_PROPERTY(bool, scoreNormalization, true) 513 BR_PROPERTY(bool, scoreNormalization, true)
750 514
751 - /*!  
752 - * \brief Perform k-fold cross validation.  
753 - */  
754 Q_PROPERTY(int crossValidate READ get_crossValidate WRITE set_crossValidate RESET reset_crossValidate) 515 Q_PROPERTY(int crossValidate READ get_crossValidate WRITE set_crossValidate RESET reset_crossValidate)
755 BR_PROPERTY(int, crossValidate, 0) 516 BR_PROPERTY(int, crossValidate, 0)
756 517
757 - /*!  
758 - * \brief List of paths sub-models will be searched for on  
759 - */  
760 Q_PROPERTY(QList<QString> modelSearch READ get_modelSearch WRITE set_modelSearch RESET reset_modelSearch) 518 Q_PROPERTY(QList<QString> modelSearch READ get_modelSearch WRITE set_modelSearch RESET reset_modelSearch)
761 BR_PROPERTY(QList<QString>, modelSearch, QList<QString>() ) 519 BR_PROPERTY(QList<QString>, modelSearch, QList<QString>() )
762 520
763 - QHash<QString,QString> abbreviations; /*!< \brief Used by br::Transform::make() to expand abbreviated algorithms into their complete definitions. */  
764 - QTime startTime; /*!< \brief Used to estimate timeRemaining(). */ 521 + QHash<QString,QString> abbreviations;
  522 + QTime startTime;
765 523
766 - /*!  
767 - * \brief Returns true if \em name is queryable using <a href="http://doc.qt.digia.com/qt/qobject.html#property">QObject::property</a>  
768 - * \param name The property key to check for existance.  
769 - * \return \c true if \em name is a property, \c false otherwise.  
770 - * \see set  
771 - */  
772 bool contains(const QString &name); 524 bool contains(const QString &name);
773 -  
774 - /*!  
775 - * \brief Prints current progress statistics to \em stdout.  
776 - * \see progress  
777 - */  
778 void printStatus(); 525 void printStatus();
779 -  
780 - /*!  
781 - * \brief Returns the completion percentage of a call to br::Train(), br::Enroll() or br::Compare().  
782 - * \return float Fraction completed.  
783 - * - \c -1 if no task is underway.  
784 - * \see timeRemaining  
785 - */  
786 float progress() const; 526 float progress() const;
787 -  
788 - /*!  
789 - * \brief Set a global property.  
790 - * \param key Global property key.  
791 - * \param value Global property value.  
792 - * \see contains  
793 - */  
794 void setProperty(const QString &key, const QString &value); 527 void setProperty(const QString &key, const QString &value);
795 -  
796 - /*!  
797 - * \brief Returns the time remaining in seconds of a call to \ref br_train, \ref br_enroll or \ref br_compare.  
798 - * \return int Time remaining in seconds.  
799 - * - \c -1 if no task is underway.  
800 - * \see progress  
801 - */  
802 int timeRemaining() const; 528 int timeRemaining() const;
803 529
804 - /*!  
805 - * \brief Returns \c true if \em sdkPath is valid, \c false otherwise.  
806 - * \param sdkPath The path to <tt>share/openbr/openbr.bib</tt>  
807 - */  
808 static bool checkSDKPath(const QString &sdkPath); 530 static bool checkSDKPath(const QString &sdkPath);
809 -  
810 - /*!  
811 - * \brief Call \em once at the start of the application to allocate global variables.  
812 - * \code  
813 - * int main(int argc, char *argv[])  
814 - * {  
815 - * br::Context::initialize(argc, argv);  
816 - *  
817 - * // ...  
818 - *  
819 - * br::Context::finalize();  
820 - * return 0;  
821 - * }  
822 - * \endcode  
823 - * \param argc As provided by <tt>main()</tt>.  
824 - * \param argv As provided by <tt>main()</tt>.  
825 - * \param sdkPath The path to the folder containing <tt>share/openbr/openbr.bib</tt>  
826 - * By default <tt>share/openbr/openbr.bib</tt> will be searched for relative to:  
827 - * -# The working directory  
828 - * -# The executable's location  
829 - * \param useGui Create a QApplication instead of a QCoreApplication.  
830 - * \note Tiggers \em abort() on failure to locate <tt>share/openbr/openbr.bib</tt>.  
831 - * \note <a href="http://qt-project.org/">Qt</a> users should instead call this <i>after</i> initializing QApplication.  
832 - * \see finalize  
833 - */  
834 static void initialize(int &argc, char *argv[], QString sdkPath = "", bool useGui = true); 531 static void initialize(int &argc, char *argv[], QString sdkPath = "", bool useGui = true);
835 -  
836 - /*!  
837 - * \brief Call \em once at the end of the application to deallocate global variables.  
838 - * \see initialize  
839 - */  
840 static void finalize(); 532 static void finalize();
841 -  
842 - /*!  
843 - * \brief Returns a string with the name, version, and copyright of the project.  
844 - * \return A string suitable for printing to the terminal or displaying in a dialog box.  
845 - * \see version  
846 - */  
847 static QString about(); 533 static QString about();
848 -  
849 - /*!  
850 - * \brief Returns the version of the SDK.  
851 - * \return A string with the format: <i>\<MajorVersion\></i><tt>.</tt><i>\<MinorVersion\></i><tt>.</tt><i>\<PatchVersion\></i>  
852 - * \see about scratchPath  
853 - */  
854 static QString version(); 534 static QString version();
855 -  
856 - /*!  
857 - * \brief Returns the scratch directory.  
858 - * \return A string with the format: <i>\</path/to/user/home/\></i><tt>OpenBR-</tt><i>\<MajorVersion\></i><tt>.</tt><i>\<MinorVersion\></i>  
859 - * \note This should be used as the root directory for managing temporary files and providing process persistence.  
860 - * \see version  
861 - */  
862 static QString scratchPath(); 535 static QString scratchPath();
863 -  
864 - /*!  
865 - * \brief Returns names and parameters for the requested objects.  
866 - *  
867 - * Each object is \c \\n seperated. Arguments are seperated from the object name with a \c \\t.  
868 - * \param abstractions Regular expression of the abstractions to search.  
869 - * \param implementations Regular expression of the implementations to search.  
870 - * \param parameters Include parameters after object name.  
871 - * \note \ref managed_return_value  
872 - * \note This function uses Qt's <a href="http://doc.qt.digia.com/stable/qregexp.html">QRegExp</a> syntax.  
873 - */  
874 static QStringList objects(const char *abstractions = ".*", const char *implementations = ".*", bool parameters = true); 536 static QStringList objects(const char *abstractions = ".*", const char *implementations = ".*", bool parameters = true);
875 537
876 private: 538 private:
877 static void messageHandler(QtMsgType type, const QMessageLogContext &context, const QString &msg); 539 static void messageHandler(QtMsgType type, const QMessageLogContext &context, const QString &msg);
878 }; 540 };
879 541
880 -/*!  
881 - * \brief The globally available settings.  
882 - *  
883 - * Initialized by Context::initialize() and destroyed with Context::finalize().  
884 - */  
885 BR_EXPORT extern Context *Globals; 542 BR_EXPORT extern Context *Globals;
886 543
887 -/*!  
888 - * \brief For run time construction of objects from strings.  
889 - *  
890 - * All plugins must derive from br::Object.  
891 - * The factory is a templated struct to allow for different types of plugins.  
892 - *  
893 - * Uses the Industrial Strength Pluggable Factory model described <a href="http://adtmag.com/articles/2000/09/25/industrial-strength-pluggable-factories.aspx">here</a>.  
894 - */ 544 +
895 template <class T> 545 template <class T>
896 struct Factory 546 struct Factory
897 { 547 {
898 virtual ~Factory() {} 548 virtual ~Factory() {}
899 549
900 - /*!  
901 - * \brief Constructs a plugin from a file.  
902 - */  
903 - //! [Factory make]  
904 static T *make(const File &file) 550 static T *make(const File &file)
905 { 551 {
906 QString name = file.get<QString>("plugin", ""); 552 QString name = file.get<QString>("plugin", "");
@@ -914,11 +560,7 @@ struct Factory @@ -914,11 +560,7 @@ struct Factory
914 static_cast<Object*>(object)->init(file); 560 static_cast<Object*>(object)->init(file);
915 return object; 561 return object;
916 } 562 }
917 - //! [Factory make]  
918 563
919 - /*!  
920 - * \brief Constructs all the available plugins.  
921 - */  
922 static QList< QSharedPointer<T> > makeAll() 564 static QList< QSharedPointer<T> > makeAll()
923 { 565 {
924 QList< QSharedPointer<T> > objects; 566 QList< QSharedPointer<T> > objects;
@@ -929,14 +571,8 @@ struct Factory @@ -929,14 +571,8 @@ struct Factory
929 return objects; 571 return objects;
930 } 572 }
931 573
932 - /*!  
933 - * \brief Returns the names of the available plugins.  
934 - */  
935 static QStringList names() { return registry ? registry->keys() : QStringList(); } 574 static QStringList names() { return registry ? registry->keys() : QStringList(); }
936 575
937 - /*!  
938 - * \brief Returns the parameters for a plugin.  
939 - */  
940 static QString parameters(const QString &name) 576 static QString parameters(const QString &name)
941 { 577 {
942 if (!registry) return QString(); 578 if (!registry) return QString();
@@ -946,9 +582,6 @@ struct Factory @@ -946,9 +582,6 @@ struct Factory
946 } 582 }
947 583
948 protected: 584 protected:
949 - /*!  
950 - * \brief For internal use. Nifty trick to register objects using a constructor.  
951 - */  
952 Factory(QString name) 585 Factory(QString name)
953 { 586 {
954 if (!registry) registry = new QMap<QString,Factory<T>*>(); 587 if (!registry) registry = new QMap<QString,Factory<T>*>();
@@ -979,49 +612,22 @@ class FactoryInstance : public Factory&lt;_Abstraction&gt; @@ -979,49 +612,22 @@ class FactoryInstance : public Factory&lt;_Abstraction&gt;
979 template <class _Abstraction, class _Implementation> 612 template <class _Abstraction, class _Implementation>
980 const FactoryInstance<_Abstraction,_Implementation> FactoryInstance<_Abstraction,_Implementation>::registerThis; 613 const FactoryInstance<_Abstraction,_Implementation> FactoryInstance<_Abstraction,_Implementation>::registerThis;
981 614
982 -/*!  
983 - * Macro to register a br::Factory plugin.  
984 - *  
985 - * \b Example:<br>  
986 - * Note the use of \c Q_OBJECT at the beginning of the class declaration and \c BR_REGISTER after the class declaration.  
987 - * \snippet openbr/plugins/misc.cpp example_transform  
988 - */  
989 #define BR_REGISTER(ABSTRACTION,IMPLEMENTATION) \ 615 #define BR_REGISTER(ABSTRACTION,IMPLEMENTATION) \
990 template class \ 616 template class \
991 br::FactoryInstance<br::ABSTRACTION, IMPLEMENTATION>; 617 br::FactoryInstance<br::ABSTRACTION, IMPLEMENTATION>;
992 618
993 -/*!  
994 - * \defgroup initializers Initializers  
995 - * \brief Plugins that initialize resources.  
996 - */  
997 619
998 -/*!  
999 - * \ingroup initializers  
1000 - * \brief Plugin base class for initializing resources.  
1001 - */  
1002 class BR_EXPORT Initializer : public Object 620 class BR_EXPORT Initializer : public Object
1003 { 621 {
1004 Q_OBJECT 622 Q_OBJECT
1005 623
1006 public: 624 public:
1007 virtual ~Initializer() {} 625 virtual ~Initializer() {}
1008 - virtual void initialize() const = 0; /*!< \brief Called once at the end of br::Context::initialize(). */  
1009 - virtual void finalize() const {} /*!< \brief Called once at the beginning of br::Context::finalize(). */ 626 + virtual void initialize() const = 0;
  627 + virtual void finalize() const {}
1010 }; 628 };
1011 629
1012 -/*!  
1013 - * \defgroup outputs Outputs  
1014 - * \brief Plugins that store template comparison results.  
1015 - */  
1016 -  
1017 -/*!  
1018 - * \ingroup outputs  
1019 - * \brief Plugin base class for storing template comparison results.  
1020 - *  
1021 - * An \em output is a br::File representing the result comparing templates.  
1022 - * br::File::suffix() is used to determine which plugin should handle the output.  
1023 - * \note Handle serialization to disk in the derived class destructor.  
1024 - */ 630 +
1025 class BR_EXPORT Output : public Object 631 class BR_EXPORT Output : public Object
1026 { 632 {
1027 Q_OBJECT 633 Q_OBJECT
@@ -1032,16 +638,16 @@ public: @@ -1032,16 +638,16 @@ public:
1032 BR_PROPERTY(int, blockRows, -1) 638 BR_PROPERTY(int, blockRows, -1)
1033 BR_PROPERTY(int, blockCols, -1) 639 BR_PROPERTY(int, blockCols, -1)
1034 640
1035 - FileList targetFiles; /*!< \brief List of files representing the gallery templates. */  
1036 - FileList queryFiles; /*!< \brief List of files representing the probe templates. */  
1037 - bool selfSimilar; /*!< \brief \c true if the \em targetFiles == \em queryFiles, \c false otherwise. */ 641 + FileList targetFiles;
  642 + FileList queryFiles;
  643 + bool selfSimilar;
1038 644
1039 virtual ~Output() {} 645 virtual ~Output() {}
1040 - virtual void initialize(const FileList &targetFiles, const FileList &queryFiles); /*!< \brief Initializes class data members. */  
1041 - virtual void setBlock(int rowBlock, int columnBlock); /*!< \brief Set the current block. */  
1042 - virtual void setRelative(float value, int i, int j); /*!< \brief Set a score relative to the current block. */ 646 + virtual void initialize(const FileList &targetFiles, const FileList &queryFiles);
  647 + virtual void setBlock(int rowBlock, int columnBlock);
  648 + virtual void setRelative(float value, int i, int j);
1043 649
1044 - static Output *make(const File &file, const FileList &targetFiles, const FileList &queryFiles); /*!< \brief Make an output from a file and gallery/probe file lists. */ 650 + static Output *make(const File &file, const FileList &targetFiles, const FileList &queryFiles);
1045 651
1046 private: 652 private:
1047 QSharedPointer<Output> next; 653 QSharedPointer<Output> next;
@@ -1049,81 +655,50 @@ private: @@ -1049,81 +655,50 @@ private:
1049 virtual void set(float value, int i, int j) = 0; 655 virtual void set(float value, int i, int j) = 0;
1050 }; 656 };
1051 657
1052 -/*!  
1053 - * \ingroup outputs  
1054 - * \brief Plugin derived base class for storing outputs as matrices.  
1055 - */ 658 +
1056 class BR_EXPORT MatrixOutput : public Output 659 class BR_EXPORT MatrixOutput : public Output
1057 { 660 {
1058 Q_OBJECT 661 Q_OBJECT
1059 662
1060 public: 663 public:
1061 - cv::Mat data; /*!< \brief The similarity matrix. */ 664 + cv::Mat data;
1062 665
1063 - /*!  
1064 - * \brief Make a MatrixOutput from gallery and probe file lists.  
1065 - */  
1066 static MatrixOutput *make(const FileList &targetFiles, const FileList &queryFiles); 666 static MatrixOutput *make(const FileList &targetFiles, const FileList &queryFiles);
1067 667
1068 protected: 668 protected:
1069 - QString toString(int row, int column) const; /*!< \brief Converts the value requested similarity score to a string. */ 669 + QString toString(int row, int column) const;
1070 670
1071 private: 671 private:
1072 void initialize(const FileList &targetFiles, const FileList &queryFiles); 672 void initialize(const FileList &targetFiles, const FileList &queryFiles);
1073 void set(float value, int i, int j); 673 void set(float value, int i, int j);
1074 }; 674 };
1075 675
1076 -/*!  
1077 - * \defgroup formats Formats  
1078 - * \brief Plugins that read a matrix.  
1079 - */  
1080 -  
1081 -/*!  
1082 - * \ingroup formats  
1083 - * \brief Plugin base class for reading a template from disk.  
1084 - *  
1085 - * A \em format is a br::File representing a template (ex. jpg image) on disk.  
1086 - * br::File::suffix() is used to determine which plugin should handle the format.  
1087 - */  
1088 class BR_EXPORT Format : public Object 676 class BR_EXPORT Format : public Object
1089 { 677 {
1090 Q_OBJECT 678 Q_OBJECT
1091 679
1092 public: 680 public:
1093 virtual ~Format() {} 681 virtual ~Format() {}
1094 - virtual Template read() const = 0; /*!< \brief Returns a br::Template created by reading #br::Object::file. */  
1095 - virtual void write(const Template &t) const = 0; /*!< \brief Writes the br::Template to #br::Object::file. */ 682 + virtual Template read() const = 0;
  683 + virtual void write(const Template &t) const = 0;
1096 static Template read(const QString &file); 684 static Template read(const QString &file);
1097 static void write(const QString &file, const Template &t); 685 static void write(const QString &file, const Template &t);
1098 }; 686 };
1099 687
1100 -/*!  
1101 - * \defgroup galleries Galleries  
1102 - * \brief Plugins that store templates.  
1103 - */  
1104 -  
1105 -/*!  
1106 - * \ingroup galleries  
1107 - * \brief Plugin base class for storing a list of enrolled templates.  
1108 - *  
1109 - * A \em gallery is a file representing a br::TemplateList serialized to disk.  
1110 - * br::File::suffix() is used to determine which plugin should handle the gallery.  
1111 - * \note Handle serialization to disk in the derived class destructor.  
1112 - */  
1113 class BR_EXPORT Gallery : public Object 688 class BR_EXPORT Gallery : public Object
1114 { 689 {
1115 - Q_OBJECT 690 + Q_OBJECT
1116 public: 691 public:
1117 Q_PROPERTY(int readBlockSize READ get_readBlockSize WRITE set_readBlockSize RESET reset_readBlockSize STORED false) 692 Q_PROPERTY(int readBlockSize READ get_readBlockSize WRITE set_readBlockSize RESET reset_readBlockSize STORED false)
1118 BR_PROPERTY(int, readBlockSize, Globals->blockSize) 693 BR_PROPERTY(int, readBlockSize, Globals->blockSize)
1119 694
1120 virtual ~Gallery() {} 695 virtual ~Gallery() {}
1121 - TemplateList read(); /*!< \brief Retrieve all the stored templates. */  
1122 - FileList files(); /*!< \brief Retrieve all the stored template files. */  
1123 - virtual TemplateList readBlock(bool *done) = 0; /*!< \brief Retrieve a portion of the stored templates. */  
1124 - void writeBlock(const TemplateList &templates); /*!< \brief Serialize a template list. */  
1125 - virtual void write(const Template &t) = 0; /*!< \brief Serialize a template. */  
1126 - static Gallery *make(const File &file); /*!< \brief Make a gallery to/from a file on disk. */ 696 + TemplateList read();
  697 + FileList files();
  698 + virtual TemplateList readBlock(bool *done) = 0;
  699 + void writeBlock(const TemplateList &templates);
  700 + virtual void write(const Template &t) = 0;
  701 + static Gallery *make(const File &file);
1127 void init(); 702 void init();
1128 703
1129 virtual qint64 totalSize() { return std::numeric_limits<qint64>::max(); } 704 virtual qint64 totalSize() { return std::numeric_limits<qint64>::max(); }
@@ -1133,20 +708,7 @@ private: @@ -1133,20 +708,7 @@ private:
1133 QSharedPointer<Gallery> next; 708 QSharedPointer<Gallery> next;
1134 }; 709 };
1135 710
1136 -/*!  
1137 - * \defgroup transforms Transforms  
1138 - * \brief Plugins that process a template.  
1139 - */  
1140 711
1141 -/*!  
1142 - * \addtogroup transforms  
1143 - * @{  
1144 - */  
1145 -  
1146 -/*!  
1147 - * \brief For asynchronous events during template projection.  
1148 - * \see Transform::getEvent  
1149 - */  
1150 class TemplateEvent : public QObject 712 class TemplateEvent : public QObject
1151 { 713 {
1152 Q_OBJECT 714 Q_OBJECT
@@ -1161,14 +723,7 @@ signals: @@ -1161,14 +723,7 @@ signals:
1161 void theSignal(const Template &output) const; 723 void theSignal(const Template &output) const;
1162 }; 724 };
1163 725
1164 -/*!  
1165 - * \brief Plugin base class for processing a template.  
1166 - *  
1167 - * Transforms support the idea of \em training and \em projecting,  
1168 - * whereby they are (optionally) given example images and are expected learn how to transform new instances into an alternative,  
1169 - * hopefully more useful, basis for the recognition task at hand.  
1170 - * Transforms can be chained together to support the declaration and use of arbitrary algorithms at run time.  
1171 - */ 726 +
1172 class BR_EXPORT Transform : public Object 727 class BR_EXPORT Transform : public Object
1173 { 728 {
1174 Q_OBJECT 729 Q_OBJECT
@@ -1177,53 +732,31 @@ public: @@ -1177,53 +732,31 @@ public:
1177 bool independent, trainable; 732 bool independent, trainable;
1178 733
1179 virtual ~Transform() {} 734 virtual ~Transform() {}
1180 - static Transform *make(QString str, QObject *parent); /*!< \brief Make a transform from a string. */  
1181 - static QSharedPointer<Transform> fromAlgorithm(const QString &algorithm, bool preprocess=false); /*!< \brief Retrieve an algorithm's transform. If preprocess is true, attaches a stream transform as the root of the algorithm*/ 735 + static Transform *make(QString str, QObject *parent);
  736 + static QSharedPointer<Transform> fromAlgorithm(const QString &algorithm, bool preprocess=false);
1182 static QSharedPointer<Transform> fromComparison(const QString &algorithm); 737 static QSharedPointer<Transform> fromComparison(const QString &algorithm);
1183 738
1184 - virtual Transform *clone() const; /*!< \brief Copy the transform. */ 739 + virtual Transform *clone() const;
1185 740
1186 - /*!< \brief Train the transform. */  
1187 - virtual void train(const TemplateList &data);  
1188 741
1189 - /*!< \brief Train the transform, separate list items represent the way calls to project would be broken up  
1190 - * Transforms that have to call train on another transform should implement train(QList), the strucutre of the  
1191 - * list should mirror the calls that would be made to project by the parent transform. For example, DistributeTemplates  
1192 - * would make a separate project call for each template it receives, and therefore sets the QList to contain single item  
1193 - * template lists before passing it on.  
1194 - * This version of train(QList) is appropriate for transforms that perform training on themselves, and don't call train  
1195 - * on other transforms. It combines everything in data into a single TemplateList, then calls train(TemplateList)  
1196 - */ 742 + virtual void train(const TemplateList &data);
1197 virtual void train(const QList<TemplateList> &data); 743 virtual void train(const QList<TemplateList> &data);
1198 744
1199 - /*!< \brief Apply the transform to a single template. Typically used by independent transforms */  
1200 - virtual void project(const Template &src, Template &dst) const = 0;  
1201 745
1202 - /*!< \brief Apply the transform, taking the full template list as input.  
1203 - * A TemplateList is what is typically passed from transform to transform. Transforms that just  
1204 - * need to operatoe on a single template at a time (and want to output exactly 1 template) can implement  
1205 - * project(template), but transforms that want to change the structure of the TemplateList (such as flatten), or  
1206 - * or output more or less than one template (e.g. detection methods) should implement project(TemplateList) directly  
1207 - */ 746 + virtual void project(const Template &src, Template &dst) const = 0;
1208 virtual void project(const TemplateList &src, TemplateList &dst) const; 747 virtual void project(const TemplateList &src, TemplateList &dst) const;
1209 748
1210 - /*!< \brief Apply the transform to a single template, may update the transform's internal state  
1211 - * By default, just call project, we can always call a const function from a non-const function.  
1212 - * If a transform implements projectUpdate, it should report true to timeVarying so that it can be  
1213 - * handled correctly by e.g. Stream.  
1214 - */  
1215 virtual void projectUpdate(const Template &src, Template &dst) 749 virtual void projectUpdate(const Template &src, Template &dst)
1216 { 750 {
1217 project(src, dst); 751 project(src, dst);
1218 } 752 }
1219 753
1220 - /*!< \brief Apply the transform, may update the transform's internal state. */  
1221 virtual void projectUpdate(const TemplateList &src, TemplateList &dst) 754 virtual void projectUpdate(const TemplateList &src, TemplateList &dst)
1222 { 755 {
1223 project(src,dst); 756 project(src,dst);
1224 } 757 }
1225 758
1226 - /*!< \brief inplace projectUpdate. */ 759 +
1227 void projectUpdate(Template &srcdst) 760 void projectUpdate(Template &srcdst)
1228 { 761 {
1229 Template dst; 762 Template dst;
@@ -1231,7 +764,6 @@ public: @@ -1231,7 +764,6 @@ public:
1231 srcdst = dst; 764 srcdst = dst;
1232 } 765 }
1233 766
1234 - /*!< \brief inplace projectUpdate. */  
1235 void projectUpdate(TemplateList &srcdst) 767 void projectUpdate(TemplateList &srcdst)
1236 { 768 {
1237 TemplateList dst; 769 TemplateList dst;
@@ -1239,24 +771,9 @@ public: @@ -1239,24 +771,9 @@ public:
1239 srcdst = dst; 771 srcdst = dst;
1240 } 772 }
1241 773
1242 - /*!  
1243 - * Time-varying transforms may move away from a single input->single output model, and only emit  
1244 - * templates under some conditions (e.g. a tracking thing may emit a template for each detected  
1245 - * unique object), in this case finalize indicates that no further calls to project will be made  
1246 - * and the transform can emit a final set if templates if it wants. Time-invariant transforms  
1247 - * don't have to do anything.  
1248 - */  
1249 virtual void finalize(TemplateList &output) { output = TemplateList(); } 774 virtual void finalize(TemplateList &output) { output = TemplateList(); }
1250 -  
1251 - /*!  
1252 - * \brief Does the transform require the non-const version of project? Can vary for aggregation type transforms  
1253 - * (if their children are time varying, they are also time varying, otherwise probably not)  
1254 - */  
1255 virtual bool timeVarying() const { return false; } 775 virtual bool timeVarying() const { return false; }
1256 776
1257 - /*!  
1258 - * \brief Convenience function equivalent to project().  
1259 - */  
1260 inline Template operator()(const Template &src) const 777 inline Template operator()(const Template &src) const
1261 { 778 {
1262 Template dst; 779 Template dst;
@@ -1265,9 +782,6 @@ public: @@ -1265,9 +782,6 @@ public:
1265 return dst; 782 return dst;
1266 } 783 }
1267 784
1268 - /*!  
1269 - * \brief Convenience function equivalent to project().  
1270 - */  
1271 inline TemplateList operator()(const TemplateList &src) const 785 inline TemplateList operator()(const TemplateList &src) const
1272 { 786 {
1273 TemplateList dst; 787 TemplateList dst;
@@ -1275,21 +789,9 @@ public: @@ -1275,21 +789,9 @@ public:
1275 return dst; 789 return dst;
1276 } 790 }
1277 791
1278 - /*!  
1279 - * \brief Perform the minimum amount of work necessary to make a  
1280 - * transform that can be used safely from a different thread than this  
1281 - * transform. For transforms that aren't time-varying, nothing needs to be  
1282 - * done, returning this is sufficient. Time varying transforms should implement this method  
1283 - * and copy enough of their state that projectUpdate can safely be called on the original  
1284 - * instance, and the copy concurrently.  
1285 - */  
1286 virtual Transform *smartCopy(bool &newTransform) { newTransform=false; return this;} 792 virtual Transform *smartCopy(bool &newTransform) { newTransform=false; return this;}
1287 -  
1288 virtual Transform *smartCopy() {bool junk; return smartCopy(junk);} 793 virtual Transform *smartCopy() {bool junk; return smartCopy(junk);}
1289 794
1290 - /*!  
1291 - * \brief Recursively retrieve a named event, returns NULL if an event is not found.  
1292 - */  
1293 virtual TemplateEvent *getEvent(const QString &name); 795 virtual TemplateEvent *getEvent(const QString &name);
1294 796
1295 static Transform *deserialize(QDataStream &stream) 797 static Transform *deserialize(QDataStream &stream)
@@ -1301,88 +803,63 @@ public: @@ -1301,88 +803,63 @@ public:
1301 return res; 803 return res;
1302 } 804 }
1303 805
1304 - /*!  
1305 - * \brief Return a pointer to a simplified version of this transform (if possible). Transforms which are only active during training should remove  
1306 - * themselves by either returning their child transforms (where relevant) or returning NULL. Set newTransform to true if the transform returned is newly allocated.  
1307 - */  
1308 virtual Transform * simplify(bool &newTransform) { newTransform = false; return this; } 806 virtual Transform * simplify(bool &newTransform) { newTransform = false; return this; }
1309 807
1310 protected: 808 protected:
1311 - Transform(bool independent = true, bool trainable = true); /*!< \brief Construct a transform. */  
1312 - inline Transform *make(const QString &description) { return make(description, this); } /*!< \brief Make a subtransform. */ 809 + Transform(bool independent = true, bool trainable = true);
  810 + inline Transform *make(const QString &description) { return make(description, this); }
1313 }; 811 };
1314 812
1315 -/*!  
1316 - * \brief Convenience function equivalent to project().  
1317 - */  
1318 inline Template &operator>>(Template &srcdst, const Transform &f) 813 inline Template &operator>>(Template &srcdst, const Transform &f)
1319 { 814 {
1320 srcdst = f(srcdst); 815 srcdst = f(srcdst);
1321 return srcdst; 816 return srcdst;
1322 } 817 }
1323 818
1324 -/*!  
1325 - * \brief Convenience function equivalent to project().  
1326 - */  
1327 inline TemplateList &operator>>(TemplateList &srcdst, const Transform &f) 819 inline TemplateList &operator>>(TemplateList &srcdst, const Transform &f)
1328 { 820 {
1329 srcdst = f(srcdst); 821 srcdst = f(srcdst);
1330 return srcdst; 822 return srcdst;
1331 } 823 }
1332 824
1333 -/*!  
1334 - * \brief Convenience function equivalent to store().  
1335 - */  
1336 inline QDataStream &operator<<(QDataStream &stream, const Transform &f) 825 inline QDataStream &operator<<(QDataStream &stream, const Transform &f)
1337 { 826 {
1338 f.store(stream); 827 f.store(stream);
1339 return stream; 828 return stream;
1340 } 829 }
1341 830
1342 -/*!  
1343 - * \brief Convenience function equivalent to load().  
1344 - */  
1345 inline QDataStream &operator>>(QDataStream &stream, Transform &f) 831 inline QDataStream &operator>>(QDataStream &stream, Transform &f)
1346 { 832 {
1347 f.load(stream); 833 f.load(stream);
1348 return stream; 834 return stream;
1349 } 835 }
1350 -/*! @}*/  
1351 836
1352 -/*!  
1353 - * \defgroup distances Distances  
1354 - * \brief Plugins that compare templates.  
1355 - */  
1356 837
1357 -/*!  
1358 - * \ingroup distances  
1359 - * \brief Plugin base class for comparing templates.  
1360 - */  
1361 class BR_EXPORT Distance : public Object 838 class BR_EXPORT Distance : public Object
1362 { 839 {
1363 Q_OBJECT 840 Q_OBJECT
1364 841
1365 public: 842 public:
1366 virtual ~Distance() {} 843 virtual ~Distance() {}
1367 - static Distance *make(QString str, QObject *parent); /*!< \brief Make a distance from a string. */ 844 + static Distance *make(QString str, QObject *parent);
1368 845
1369 - static QSharedPointer<Distance> fromAlgorithm(const QString &algorithm); /*!< \brief Retrieve an algorithm's distance. */  
1370 - virtual bool trainable() { return true; } /*!< \brief \c true if The distance implements train(), false otherwise. */  
1371 - virtual void train(const TemplateList &src) = 0; /*!< \brief Train the distance. */  
1372 - virtual void compare(const TemplateList &target, const TemplateList &query, Output *output) const; /*!< \brief Compare two template lists. */  
1373 - virtual QList<float> compare(const TemplateList &targets, const Template &query) const; /*!< \brief Compute the normalized distance between a template and a template list. */  
1374 - virtual float compare(const Template &a, const Template &b) const; /*!< \brief Compute the distance between two templates. */  
1375 - virtual float compare(const cv::Mat &a, const cv::Mat &b) const; /*!< \brief Compute the distance between two biometric signatures. */  
1376 - virtual float compare(const uchar *a, const uchar *b, size_t size) const; /*!< \brief Compute the distance between two buffers. */ 846 + static QSharedPointer<Distance> fromAlgorithm(const QString &algorithm);
  847 + virtual bool trainable() { return true; }
  848 + virtual void train(const TemplateList &src) = 0;
  849 + virtual void compare(const TemplateList &target, const TemplateList &query, Output *output) const;
  850 + virtual QList<float> compare(const TemplateList &targets, const Template &query) const;
  851 + virtual float compare(const Template &a, const Template &b) const;
  852 + virtual float compare(const cv::Mat &a, const cv::Mat &b) const;
  853 + virtual float compare(const uchar *a, const uchar *b, size_t size) const;
1377 854
1378 protected: 855 protected:
1379 - inline Distance *make(const QString &description) { return make(description, this); } /*!< \brief Make a subdistance. */ 856 + inline Distance *make(const QString &description) { return make(description, this); }
1380 857
1381 private: 858 private:
1382 virtual void compareBlock(const TemplateList &target, const TemplateList &query, Output *output, int targetOffset, int queryOffset) const; 859 virtual void compareBlock(const TemplateList &target, const TemplateList &query, Output *output, int targetOffset, int queryOffset) const;
1383 860
1384 friend struct AlgorithmCore; 861 friend struct AlgorithmCore;
1385 - virtual bool compare(const File &targetGallery, const File &queryGallery, const File &output) const /*!< \brief Escape hatch for algorithms that need customized file I/O during comparison. */ 862 + virtual bool compare(const File &targetGallery, const File &queryGallery, const File &output) const
1386 { (void) targetGallery; (void) queryGallery; (void) output; return false; } 863 { (void) targetGallery; (void) queryGallery; (void) output; return false; }
1387 }; 864 };
1388 865
@@ -1393,7 +870,7 @@ class BR_EXPORT Representation : public Object @@ -1393,7 +870,7 @@ class BR_EXPORT Representation : public Object
1393 public: 870 public:
1394 virtual ~Representation() {} 871 virtual ~Representation() {}
1395 872
1396 - static Representation *make(QString str, QObject *parent); /*!< \brief Make a representation from a string. */ 873 + static Representation *make(QString str, QObject *parent);
1397 virtual cv::Mat preprocess(const cv::Mat &image) const { return image; } 874 virtual cv::Mat preprocess(const cv::Mat &image) const { return image; }
1398 virtual void train(const QList<cv::Mat> &images, const QList<float> &labels) { (void) images; (void)labels; } 875 virtual void train(const QList<cv::Mat> &images, const QList<float> &labels) { (void) images; (void)labels; }
1399 // By convention, an empty indices list will result in all feature responses being calculated 876 // By convention, an empty indices list will result in all feature responses being calculated
@@ -1409,90 +886,41 @@ class BR_EXPORT Classifier : public Object @@ -1409,90 +886,41 @@ class BR_EXPORT Classifier : public Object
1409 public: 886 public:
1410 virtual ~Classifier() {} 887 virtual ~Classifier() {}
1411 888
1412 - static Classifier *make(QString str, QObject *parent); /*!< \brief Make a classifier from a string. */ 889 + static Classifier *make(QString str, QObject *parent);
1413 virtual void train(const QList<cv::Mat> &images, const QList<float> &labels) = 0; 890 virtual void train(const QList<cv::Mat> &images, const QList<float> &labels) = 0;
1414 // By convention, classify should return a value normalized such that the threshold is 0. Negative values 891 // By convention, classify should return a value normalized such that the threshold is 0. Negative values
1415 // can be interpreted as a negative classification and positive values as a positive classification. 892 // can be interpreted as a negative classification and positive values as a positive classification.
1416 virtual float classify(const cv::Mat &image) const = 0; 893 virtual float classify(const cv::Mat &image) const = 0;
1417 }; 894 };
1418 895
1419 -/*!  
1420 -* \brief Returns \c true if the algorithm is a classifier, \c false otherwise.  
1421 -*  
1422 -* Classifers have no br::Distance associated with their br::Transform.  
1423 -* Instead they populate br::Template::file \c Label metadata field with the predicted class.  
1424 -*/ 896 +
1425 BR_EXPORT bool IsClassifier(const QString &algorithm); 897 BR_EXPORT bool IsClassifier(const QString &algorithm);
1426 898
1427 -/*!  
1428 - * \brief High-level function for creating models.  
1429 - * \see br_train  
1430 - */  
1431 BR_EXPORT void Train(const File &input, const File &model); 899 BR_EXPORT void Train(const File &input, const File &model);
1432 900
1433 -/*!  
1434 - * \brief High-level function for creating galleries.  
1435 - * \see br_enroll  
1436 - */  
1437 BR_EXPORT void Enroll(const File &input, const File &gallery = File()); 901 BR_EXPORT void Enroll(const File &input, const File &gallery = File());
1438 902
1439 -/*!  
1440 - * \brief High-level function for enrolling templates.  
1441 - * \see br_enroll  
1442 - */  
1443 BR_EXPORT void Enroll(TemplateList &tmpl); 903 BR_EXPORT void Enroll(TemplateList &tmpl);
1444 904
1445 -/*!  
1446 - * \brief A naive alternative to \ref br::Enroll  
1447 - */  
1448 BR_EXPORT void Project(const File &input, const File &output); 905 BR_EXPORT void Project(const File &input, const File &output);
1449 906
1450 -/*!  
1451 - * \brief High-level function for comparing galleries.  
1452 - * \see br_compare  
1453 - */  
1454 BR_EXPORT void Compare(const File &targetGallery, const File &queryGallery, const File &output); 907 BR_EXPORT void Compare(const File &targetGallery, const File &queryGallery, const File &output);
1455 -/*!  
1456 - * \brief High-level function for comparing templates.  
1457 - */  
1458 -BR_EXPORT void CompareTemplateLists(const TemplateList &target, const TemplateList &query, Output *output);  
1459 908
  909 +BR_EXPORT void CompareTemplateLists(const TemplateList &target, const TemplateList &query, Output *output);
1460 910
1461 -/*!  
1462 - * \brief High-level function for doing a series of pairwise comparisons.  
1463 - * \see br_pairwise_compare  
1464 - */  
1465 BR_EXPORT void PairwiseCompare(const File &targetGallery, const File &queryGallery, const File &output); 911 BR_EXPORT void PairwiseCompare(const File &targetGallery, const File &queryGallery, const File &output);
1466 912
1467 -/*!  
1468 - * \brief Change file formats.  
1469 - * \param fileType One of \c Format, \c Gallery, or \c Output.  
1470 - * \param inputFile The source file to convert from.  
1471 - * \param outputFile The destination file to convert to.  
1472 - */  
1473 BR_EXPORT void Convert(const File &fileType, const File &inputFile, const File &outputFile); 913 BR_EXPORT void Convert(const File &fileType, const File &inputFile, const File &outputFile);
1474 914
1475 -/*!  
1476 - * \brief Concatenate several galleries into one.  
1477 - * \param inputGalleries List of galleries to concatenate.  
1478 - * \param outputGallery Gallery to store the concatenated result.  
1479 - * \note outputGallery must not be in inputGalleries.  
1480 - */  
1481 BR_EXPORT void Cat(const QStringList &inputGalleries, const QString &outputGallery); 915 BR_EXPORT void Cat(const QStringList &inputGalleries, const QString &outputGallery);
1482 916
1483 -/*!  
1484 - * \brief Deduplicate a gallery.  
1485 - * \param inputGallery Gallery to deduplicate.  
1486 - * \param outputGallery Gallery to store the deduplicated result.  
1487 - * \param threshold Match score threshold to determine duplicates.  
1488 - */  
1489 BR_EXPORT void Deduplicate(const File &inputGallery, const File &outputGallery, const QString &threshold); 917 BR_EXPORT void Deduplicate(const File &inputGallery, const File &outputGallery, const QString &threshold);
1490 918
1491 BR_EXPORT Transform *wrapTransform(Transform *base, const QString &target); 919 BR_EXPORT Transform *wrapTransform(Transform *base, const QString &target);
1492 920
1493 BR_EXPORT Transform *pipeTransforms(QList<Transform *> &transforms); 921 BR_EXPORT Transform *pipeTransforms(QList<Transform *> &transforms);
1494 922
1495 -/*! @}*/ 923 +
1496 924
1497 } // namespace br 925 } // namespace br
1498 926
openbr/plugins/classification/adaboost.cpp
@@ -26,17 +26,17 @@ namespace br @@ -26,17 +26,17 @@ namespace br
26 * \ingroup transforms 26 * \ingroup transforms
27 * \brief Wraps OpenCV's Ada Boost framework 27 * \brief Wraps OpenCV's Ada Boost framework
28 * \author Scott Klum \cite sklum 28 * \author Scott Klum \cite sklum
29 - * \see http://docs.opencv.org/modules/ml/doc/boosting.html  
30 - * \property enum type Type of Adaboost to perform. Options are: [Discrete, Real, Logit, Gentle] Default is Real.  
31 - * \property enum splitCriteria Splitting criteria used to choose optimal splits during a weak tree construction. Options are: [Default, Gini, Misclass, Sqerr] Default is Default.  
32 - * \property int weakCount Maximum number of weak classifiers per stage. Default is 100.  
33 - * \property float trimRate A threshold between 0 and 1 used to save computational time. Samples with summary weight \leq 1 - weight\_trim\_rate do not participate in the next iteration of training. Set this parameter to 0 to turn off this functionality. Default is 0.95.  
34 - * \property int folds OpenCV parameter variable. Default value is 0.  
35 - * \property int maxDepth Maximum height of each weak classifier tree. Default is 1 (stumps).  
36 - * \property bool returnConfidence Return the confidence value of the classification or the class value of the classification. Default is true (return confidence value).  
37 - * \property bool overwriteMat If true, the output template will be a 1x1 matrix with value equal to the confidence or classification (depending on returnConfidence). If false the output template will be the same as the input template. Default is true.  
38 - * \property QString inputVariable Metadata variable storing the label for each template. Default is "Label".  
39 - * \property QString outputVariable Metadata variable to store the confidence or classification of each template (depending on returnConfidence). If overwriteMat is true nothing will be written here. Default is "". 29 + * \br_link http://docs.opencv.org/modules/ml/doc/boosting.html
  30 + * \br_property type enum Type of Adaboost to perform. Options are: [Discrete, Real, Logit, Gentle] Default is Real.
  31 + * \br_property splitCriteria enum Splitting criteria used to choose optimal splits during a weak tree construction. Options are: [Default, Gini, Misclass, Sqerr] Default is Default.
  32 + * \br_property weakCount int Maximum number of weak classifiers per stage. Default is 100.
  33 + * \br_property trimRate float A threshold between 0 and 1 used to save computational time. Samples with summary weight \leq 1 - weight\_trim\_rate do not participate in the next iteration of training. Set this parameter to 0 to turn off this functionality. Default is 0.95.
  34 + * \br_property folds int OpenCV parameter variable. Default value is 0.
  35 + * \br_property maxDepth int Maximum height of each weak classifier tree. Default is 1 (stumps).
  36 + * \br_property returnConfidence bool Return the confidence value of the classification or the class value of the classification. Default is true (return confidence value).
  37 + * \br_property overwriteMat bool If true, the output template will be a 1x1 matrix with value equal to the confidence or classification (depending on returnConfidence). If false the output template will be the same as the input template. Default is true.
  38 + * \br_property inputVariable QString Metadata variable storing the label for each template. Default is "Label".
  39 + * \br_property outputVariable QString Metadata variable to store the confidence or classification of each template (depending on returnConfidence). If overwriteMat is true nothing will be written here. Default is "".
40 */ 40 */
41 class AdaBoostTransform : public Transform 41 class AdaBoostTransform : public Transform
42 { 42 {
openbr/plugins/classification/ebif.cpp
@@ -28,10 +28,12 @@ namespace br @@ -28,10 +28,12 @@ namespace br
28 /*! 28 /*!
29 * \ingroup transforms 29 * \ingroup transforms
30 * \brief Face Recognition Using Early Biologically Inspired Features 30 * \brief Face Recognition Using Early Biologically Inspired Features
31 - * \see Min Li (IBM China Research Lab, China), Nalini Ratha (IBM Watson Research Center, USA), Weihong Qian (IBM China Research Lab, China), Shenghua Bao (IBM China Research Lab, China), Zhong Su (IBM China Research Lab, China) 31 + * \br_paper Li, Min, et al.
  32 + * "Face recognition using early biologically inspired features."
  33 + * Biometrics: Theory, Applications and Systems (BTAS), 2013 IEEE Sixth International Conference on. IEEE, 2013.
32 * \author Josh Klontz \cite jklontz 34 * \author Josh Klontz \cite jklontz
33 - * \property int N The number of scales. Default is 6.  
34 - * \property int M The number of orientations between 0 and pi. Default is 9. 35 + * \br_property int N The number of scales. Default is 6.
  36 + * \br_property int M The number of orientations between 0 and pi. Default is 9.
35 */ 37 */
36 class EBIFTransform : public UntrainableTransform 38 class EBIFTransform : public UntrainableTransform
37 { 39 {
openbr/plugins/classification/forest.cpp
@@ -26,18 +26,18 @@ namespace br @@ -26,18 +26,18 @@ namespace br
26 * \ingroup transforms 26 * \ingroup transforms
27 * \brief Wraps OpenCV's random trees framework 27 * \brief Wraps OpenCV's random trees framework
28 * \author Scott Klum \cite sklum 28 * \author Scott Klum \cite sklum
29 - * \see http://docs.opencv.org/modules/ml/doc/random_trees.html  
30 - * \property bool classification If true the labels are expected to be categorical. Otherwise they are expected to be numerical. Default is true.  
31 - * \property float splitPercentage Used to calculate the minimum number of samples per split in a random tree. The minimum number of samples is calculated as the number of samples x splitPercentage. Default is 0.01.  
32 - * \property int maxDepth The maximum depth of each decision tree. Default is std::numeric_limits<int>::max() and typically should be set by the user.  
33 - * \property int maxTrees The maximum number of trees in the forest. Default is 10.  
34 - * \property float forestAccuracy A sufficient accuracy for the forest for training to terminate. Used if termCrit is EPS or Both. Default is 0.1.  
35 - * \property bool returnConfidence If both classification and returnConfidence are use a fuzzy class label as the output of the forest. Default is true.  
36 - * \property bool overwriteMat If true set dst to be a 1x1 Mat with the forest response as its value. Otherwise append the forest response to metadata using outputVariable as a key. Default is true.  
37 - * \property QString inputVariable The metadata key for each templates label. Default is "Label".  
38 - * \property QString outputVariable The metadata key for the forest response if overwriteMat is false. Default is "".  
39 - * \property bool weight If true and classification is true the random forest will use prior accuracies. Default is false.  
40 - * \property enum termCrit Termination criteria for training the random forest. Options are Iter, EPS and Both. Iter terminates when the maximum number of trees is reached. EPS terminates when forestAccuracy is met. Both terminates when either is true. Default is Iter. 29 + * \br_link http://docs.opencv.org/modules/ml/doc/random_trees.html
  30 + * \br_property bool classification If true the labels are expected to be categorical. Otherwise they are expected to be numerical. Default is true.
  31 + * \br_property float splitPercentage Used to calculate the minimum number of samples per split in a random tree. The minimum number of samples is calculated as the number of samples x splitPercentage. Default is 0.01.
  32 + * \br_property int maxDepth The maximum depth of each decision tree. Default is std::numeric_limits<int>::max() and typically should be set by the user.
  33 + * \br_property int maxTrees The maximum number of trees in the forest. Default is 10.
  34 + * \br_property float forestAccuracy A sufficient accuracy for the forest for training to terminate. Used if termCrit is EPS or Both. Default is 0.1.
  35 + * \br_property bool returnConfidence If both classification and returnConfidence are use a fuzzy class label as the output of the forest. Default is true.
  36 + * \br_property bool overwriteMat If true set dst to be a 1x1 Mat with the forest response as its value. Otherwise append the forest response to metadata using outputVariable as a key. Default is true.
  37 + * \br_property QString inputVariable The metadata key for each templates label. Default is "Label".
  38 + * \br_property QString outputVariable The metadata key for the forest response if overwriteMat is false. Default is "".
  39 + * \br_property bool weight If true and classification is true the random forest will use prior accuracies. Default is false.
  40 + * \br_property enum termCrit Termination criteria for training the random forest. Options are Iter, EPS and Both. Iter terminates when the maximum number of trees is reached. EPS terminates when forestAccuracy is met. Both terminates when either is true. Default is Iter.
41 */ 41 */
42 class ForestTransform : public Transform 42 class ForestTransform : public Transform
43 { 43 {
@@ -187,8 +187,8 @@ BR_REGISTER(Transform, ForestTransform) @@ -187,8 +187,8 @@ BR_REGISTER(Transform, ForestTransform)
187 * \ingroup transforms 187 * \ingroup transforms
188 * \brief Wraps OpenCV's random trees framework to induce features 188 * \brief Wraps OpenCV's random trees framework to induce features
189 * \author Scott Klum \cite sklum 189 * \author Scott Klum \cite sklum
190 - * \see https://lirias.kuleuven.be/bitstream/123456789/316661/1/icdm11-camready.pdf  
191 - * \property bool useRegressionValue SCOTT FILL ME IN. 190 + * \br_link https://lirias.kuleuven.be/bitstream/123456789/316661/1/icdm11-camready.pdf
  191 + * \br_property bool useRegressionValue SCOTT FILL ME IN.
192 */ 192 */
193 class ForestInductionTransform : public ForestTransform 193 class ForestInductionTransform : public ForestTransform
194 { 194 {
openbr/plugins/classification/lda.cpp
@@ -28,7 +28,7 @@ namespace br @@ -28,7 +28,7 @@ namespace br
28 /*! 28 /*!
29 * \ingroup initializers 29 * \ingroup initializers
30 * \brief Initialize Eigen 30 * \brief Initialize Eigen
31 - * http://eigen.tuxfamily.org/dox/TopicMultiThreading.html 31 + * \br_link http://eigen.tuxfamily.org/dox/TopicMultiThreading.html
32 * \author Scott Klum \cite sklum 32 * \author Scott Klum \cite sklum
33 */ 33 */
34 class EigenInitializer : public Initializer 34 class EigenInitializer : public Initializer
@@ -49,9 +49,9 @@ BR_REGISTER(Initializer, EigenInitializer) @@ -49,9 +49,9 @@ BR_REGISTER(Initializer, EigenInitializer)
49 * \author Brendan Klare \cite bklare 49 * \author Brendan Klare \cite bklare
50 * \author Josh Klontz \cite jklontz 50 * \author Josh Klontz \cite jklontz
51 * 51 *
52 - * \property float keep Options are: [keep < 0 - All eigenvalues are retained, keep == 0 - No PCA is performed and the eigenvectors form an identity matrix, 0 < keep < 1 - Keep is the fraction of the variance to retain, keep >= 1 - keep is the number of leading eigenvectors to retain] Default is 0.95.  
53 - * \property int drop BRENDAN OR JOSH FILL ME IN. Default is 0.  
54 - * \property bool whiten BRENDAN OR JOSH FILL ME IN. Default is false. 52 + * \br_property float keep Options are: [keep < 0 - All eigenvalues are retained, keep == 0 - No PCA is performed and the eigenvectors form an identity matrix, 0 < keep < 1 - Keep is the fraction of the variance to retain, keep >= 1 - keep is the number of leading eigenvectors to retain] Default is 0.95.
  53 + * \br_property int drop BRENDAN OR JOSH FILL ME IN. Default is 0.
  54 + * \br_property bool whiten BRENDAN OR JOSH FILL ME IN. Default is false.
55 */ 55 */
56 class PCATransform : public Transform 56 class PCATransform : public Transform
57 { 57 {
@@ -266,9 +266,12 @@ BR_REGISTER(Transform, RowWisePCATransform) @@ -266,9 +266,12 @@ BR_REGISTER(Transform, RowWisePCATransform)
266 266
267 /*! 267 /*!
268 * \ingroup transforms 268 * \ingroup transforms
269 - * \brief Computes Distance From Feature Space (DFFS) \cite moghaddam97. 269 + * \brief Computes Distance From Feature Space (DFFS)
  270 + * \br_paper Moghaddam, Baback, and Alex Pentland.
  271 + * "Probabilistic visual learning for object representation."
  272 + * Pattern Analysis and Machine Intelligence, IEEE Transactions on 19.7 (1997): 696-710.
270 * \author Josh Klontz \cite jklontz 273 * \author Josh Klontz \cite jklontz
271 - * \property float keep Sets PCA keep property. Default is 0.95. 274 + * \br_property float keep Sets PCA keep property. Default is 0.95.
272 */ 275 */
273 class DFFSTransform : public Transform 276 class DFFSTransform : public Transform
274 { 277 {
@@ -314,13 +317,13 @@ BR_REGISTER(Transform, DFFSTransform) @@ -314,13 +317,13 @@ BR_REGISTER(Transform, DFFSTransform)
314 * \brief Projects input into learned Linear Discriminant Analysis subspace. 317 * \brief Projects input into learned Linear Discriminant Analysis subspace.
315 * \author Brendan Klare \cite bklare 318 * \author Brendan Klare \cite bklare
316 * \author Josh Klontz \cite jklontz 319 * \author Josh Klontz \cite jklontz
317 - * \property float pcaKeep BRENDAN OR JOSH FILL ME IN. Default is 0.98.  
318 - * \property bool pcaWhiten BRENDAN OR JOSH FILL ME IN. Default is false.  
319 - * \property int directLDA BRENDAN OR JOSH FILL ME IN. Default is 0.  
320 - * \property float directDrop BRENDAN OR JOSH FILL ME IN. Default is 0.1.  
321 - * \property QString inputVariable BRENDAN OR JOSH FILL ME IN. Default is "Label".  
322 - * \property bool isBinary BRENDAN OR JOSH FILL ME IN. Default is false.  
323 - * \property bool normalize BRENDAN OR JOSH FILL ME IN. Default is true. 320 + * \br_property float pcaKeep BRENDAN OR JOSH FILL ME IN. Default is 0.98.
  321 + * \br_property bool pcaWhiten BRENDAN OR JOSH FILL ME IN. Default is false.
  322 + * \br_property int directLDA BRENDAN OR JOSH FILL ME IN. Default is 0.
  323 + * \br_property float directDrop BRENDAN OR JOSH FILL ME IN. Default is 0.1.
  324 + * \br_property QString inputVariable BRENDAN OR JOSH FILL ME IN. Default is "Label".
  325 + * \br_property bool isBinary BRENDAN OR JOSH FILL ME IN. Default is false.
  326 + * \br_property bool normalize BRENDAN OR JOSH FILL ME IN. Default is true.
324 */ 327 */
325 class LDATransform : public Transform 328 class LDATransform : public Transform
326 { 329 {
@@ -564,9 +567,9 @@ BR_REGISTER(Transform, LDATransform) @@ -564,9 +567,9 @@ BR_REGISTER(Transform, LDATransform)
564 * \ingroup transforms 567 * \ingroup transforms
565 * \brief Projects input into learned Linear Discriminant Analysis subspace learned on a sparse subset of features with the highest weight in the original LDA algorithm. 568 * \brief Projects input into learned Linear Discriminant Analysis subspace learned on a sparse subset of features with the highest weight in the original LDA algorithm.
566 * \author Brendan Klare \cite bklare 569 * \author Brendan Klare \cite bklare
567 - * \property float varThreshold BRENDAN FILL ME IN. Default is 1.5.  
568 - * \property float pcaKeep BRENDAN FILL ME IN. Default is 0.98.  
569 - * \property bool normalize BRENDAN FILL ME IN. Default is true. 570 + * \br_property float varThreshold BRENDAN FILL ME IN. Default is 1.5.
  571 + * \br_property float pcaKeep BRENDAN FILL ME IN. Default is 0.98.
  572 + * \br_property bool normalize BRENDAN FILL ME IN. Default is true.
570 */ 573 */
571 class SparseLDATransform : public Transform 574 class SparseLDATransform : public Transform
572 { 575 {
openbr/plugins/classification/liblinear.cpp
@@ -45,6 +45,10 @@ static void loadModel(model &amp;m, QDataStream &amp;stream) @@ -45,6 +45,10 @@ static void loadModel(model &amp;m, QDataStream &amp;stream)
45 m = *load_model(qPrintable(tempFile.fileName())); 45 m = *load_model(qPrintable(tempFile.fileName()));
46 } 46 }
47 47
  48 +/*!
  49 + * \brief DOCUMENT ME SCOTT
  50 + * \author Scott Klum \cite sklum
  51 + */
48 class Linear : public Transform 52 class Linear : public Transform
49 { 53 {
50 Q_OBJECT 54 Q_OBJECT
openbr/plugins/classification/mlp.cpp
@@ -28,13 +28,13 @@ namespace br @@ -28,13 +28,13 @@ namespace br
28 * \ingroup transforms 28 * \ingroup transforms
29 * \brief Wraps OpenCV's multi-layer perceptron framework 29 * \brief Wraps OpenCV's multi-layer perceptron framework
30 * \author Scott Klum \cite sklum 30 * \author Scott Klum \cite sklum
31 - * \see http://docs.opencv.org/modules/ml/doc/neural_networks.html  
32 - * \property enum kernel Type of MLP kernel to use. Options are Identity, Sigmoid, Gaussian. Default is Sigmoid.  
33 - * \property float alpha Determines activation function for neural network. See OpenCV documentation for more details. Default is 1.  
34 - * \property float beta Determines activation function for neural network. See OpenCV documentation for more details. Default is 1.  
35 - * \property QStringList inputVariables Metadata keys for the labels associated with each template. There should be the same number of keys in the list as there are neurons in the final layer. Default is QStringList().  
36 - * \property QStringList outputVariables Metadata keys to store the output of the neural network. There should be the same number of keys in the list as there are neurons in the final layer. Default is QStringList().  
37 - * \property QList<int> neuronsPerLayer The number of neurons in each layer of the net. Default is QList<int>() << 1 << 1. 31 + * \br_link http://docs.opencv.org/modules/ml/doc/neural_networks.html
  32 + * \br_property enum kernel Type of MLP kernel to use. Options are Identity, Sigmoid, Gaussian. Default is Sigmoid.
  33 + * \br_property float alpha Determines activation function for neural network. See OpenCV documentation for more details. Default is 1.
  34 + * \br_property float beta Determines activation function for neural network. See OpenCV documentation for more details. Default is 1.
  35 + * \br_property QStringList inputVariables Metadata keys for the labels associated with each template. There should be the same number of keys in the list as there are neurons in the final layer. Default is QStringList().
  36 + * \br_property QStringList outputVariables Metadata keys to store the output of the neural network. There should be the same number of keys in the list as there are neurons in the final layer. Default is QStringList().
  37 + * \br_property QList<int> neuronsPerLayer The number of neurons in each layer of the net. Default is QList<int>() << 1 << 1.
38 */ 38 */
39 class MLPTransform : public MetaTransform 39 class MLPTransform : public MetaTransform
40 { 40 {
openbr/plugins/classification/nt4.cpp
@@ -75,9 +75,9 @@ BR_REGISTER(Initializer, NT4Initializer) @@ -75,9 +75,9 @@ BR_REGISTER(Initializer, NT4Initializer)
75 */ 75 */
76 struct NT4Context 76 struct NT4Context
77 { 77 {
78 - HNLExtractor extractor; /*!< Face extractor. */  
79 - HNEExtractor irisExtractor; /*!< Iris extractor. */  
80 - HNMatcher matcher; /*!< Template matcher. */ 78 + HNLExtractor extractor; // Face extractor.
  79 + HNEExtractor irisExtractor; // Iris extractor.
  80 + HNMatcher matcher; // Template matcher.
81 81
82 NT4Context() 82 NT4Context()
83 { 83 {
@@ -148,9 +148,7 @@ struct NT4Context @@ -148,9 +148,7 @@ struct NT4Context
148 NObjectFree(matcher); 148 NObjectFree(matcher);
149 } 149 }
150 150
151 - /*!  
152 - * \brief to NT image  
153 - */ 151 + // to NT image
154 static void toImage(const Mat &src, HNGrayscaleImage *grayscaleImage) 152 static void toImage(const Mat &src, HNGrayscaleImage *grayscaleImage)
155 { 153 {
156 Mat gray; 154 Mat gray;
@@ -167,9 +165,7 @@ struct NT4Context @@ -167,9 +165,7 @@ struct NT4Context
167 NObjectFree(image); 165 NObjectFree(image);
168 } 166 }
169 167
170 - /*!  
171 - * \brief to OpenCV matrix  
172 - */ 168 + // to OpenCV matrix
173 static Mat toMat(const HNLTemplate &templ) 169 static Mat toMat(const HNLTemplate &templ)
174 { 170 {
175 NSizeType bufferSize; 171 NSizeType bufferSize;
@@ -181,9 +177,7 @@ struct NT4Context @@ -181,9 +177,7 @@ struct NT4Context
181 return buffer; 177 return buffer;
182 } 178 }
183 179
184 - /*!  
185 - * \brief extract metadata  
186 - */ 180 + // extract metadata
187 static File toMetadata(const NleDetectionDetails &detectionDetails) 181 static File toMetadata(const NleDetectionDetails &detectionDetails)
188 { 182 {
189 File metadata; 183 File metadata;
@@ -221,9 +215,7 @@ struct NT4Context @@ -221,9 +215,7 @@ struct NT4Context
221 return metadata; 215 return metadata;
222 } 216 }
223 217
224 - /*!  
225 - * \brief Initialize from metadata  
226 - */ 218 + // Initialize from metadata
227 static NleDetectionDetails fromMetadata(const File &metadata) 219 static NleDetectionDetails fromMetadata(const File &metadata)
228 { 220 {
229 NleDetectionDetails detectionDetails; 221 NleDetectionDetails detectionDetails;
openbr/plugins/classification/pp4.cpp
@@ -200,7 +200,7 @@ struct PP4Context @@ -200,7 +200,7 @@ struct PP4Context
200 * \brief Enroll faces in PittPatt 4 200 * \brief Enroll faces in PittPatt 4
201 * \author Josh Klontz \cite jklontz 201 * \author Josh Klontz \cite jklontz
202 * \warning Needs a maintainer. 202 * \warning Needs a maintainer.
203 - * \property bool detectOnly If true, return all detected faces. Otherwise, return only faces that are suitable for recognition. Default is false. 203 + * \br_property bool detectOnly If true, return all detected faces. Otherwise, return only faces that are suitable for recognition. Default is false.
204 */ 204 */
205 class PP4EnrollTransform : public UntrainableMetaTransform 205 class PP4EnrollTransform : public UntrainableMetaTransform
206 { 206 {
openbr/plugins/classification/pp5.cpp
@@ -252,12 +252,12 @@ struct PP5Context @@ -252,12 +252,12 @@ struct PP5Context
252 * \brief Enroll faces in PP5 252 * \brief Enroll faces in PP5
253 * \author Josh Klontz \cite jklontz 253 * \author Josh Klontz \cite jklontz
254 * \author E. Taborsky \cite mmtaborsky 254 * \author E. Taborsky \cite mmtaborsky
255 - * \property bool detectOnly If true, enroll all detected faces. Otherwise, only enroll faces suitable for recognition. Default is false.  
256 - * \property bool requireLandmarks If true, require the right eye, left eye, and nose base to be detectable by PP5. If this does not happen FTE is set to true for that template. Default is false.  
257 - * \property float adaptiveMinSize The minimum face size as a percentage of total image width. 0.1 corresponds to a minimum face size of 10% the total image width. Default is 0.01.  
258 - * \property int minSize The absolute minimum face size to search for. This is not a pixel value. Please see PittPatt documentation for the relationship between minSize and pixel IPD. Default is 4.  
259 - * \property enum landmarkRange Range of landmarks to search for. Options are Frontal, Extended, Full, and Comprehensive. Default is Comprehensive.  
260 - * \property int searchPruningAggressiveness The amount of aggressiveness involved in search for faces in images. 0 means all scales and locations are searched. 1 means fewer detectors are used in the early stages but all scales are still searched. 2-4 means that the largest faces are found first and then fewer scales are searched. Default is 0. 255 + * \br_property bool detectOnly If true, enroll all detected faces. Otherwise, only enroll faces suitable for recognition. Default is false.
  256 + * \br_property bool requireLandmarks If true, require the right eye, left eye, and nose base to be detectable by PP5. If this does not happen FTE is set to true for that template. Default is false.
  257 + * \br_property float adaptiveMinSize The minimum face size as a percentage of total image width. 0.1 corresponds to a minimum face size of 10% the total image width. Default is 0.01.
  258 + * \br_property int minSize The absolute minimum face size to search for. This is not a pixel value. Please see PittPatt documentation for the relationship between minSize and pixel IPD. Default is 4.
  259 + * \br_property enum landmarkRange Range of landmarks to search for. Options are Frontal, Extended, Full, and Comprehensive. Default is Comprehensive.
  260 + * \br_property int searchPruningAggressiveness The amount of aggressiveness involved in search for faces in images. 0 means all scales and locations are searched. 1 means fewer detectors are used in the early stages but all scales are still searched. 2-4 means that the largest faces are found first and then fewer scales are searched. Default is 0.
261 */ 261 */
262 class PP5EnrollTransform : public UntrainableMetaTransform 262 class PP5EnrollTransform : public UntrainableMetaTransform
263 { 263 {
@@ -406,10 +406,9 @@ BR_REGISTER(Transform, PP5EnrollTransform) @@ -406,10 +406,9 @@ BR_REGISTER(Transform, PP5EnrollTransform)
406 406
407 /*! 407 /*!
408 * \ingroup distances 408 * \ingroup distances
409 - * \brief Compare templates with PP5 409 + * \brief Compare templates with PP5. PP5 distance is known to be asymmetric
410 * \author Josh Klontz \cite jklontz 410 * \author Josh Klontz \cite jklontz
411 * \author E. Taborsky \cite mmtaborsky 411 * \author E. Taborsky \cite mmtaborsky
412 - * \note PP5 distance is known to be asymmetric  
413 */ 412 */
414 class PP5CompareDistance : public UntrainableDistance 413 class PP5CompareDistance : public UntrainableDistance
415 , public PP5Context 414 , public PP5Context
@@ -511,6 +510,10 @@ class PP5CompareDistance : public UntrainableDistance @@ -511,6 +510,10 @@ class PP5CompareDistance : public UntrainableDistance
511 510
512 BR_REGISTER(Distance, PP5CompareDistance) 511 BR_REGISTER(Distance, PP5CompareDistance)
513 512
  513 +/*!
  514 + * \brief DOCUMENT ME
  515 + * \author Unknown \cite unknown
  516 + */
514 class PP5GalleryTransform: public UntrainableMetaTransform 517 class PP5GalleryTransform: public UntrainableMetaTransform
515 , public PP5Context 518 , public PP5Context
516 { 519 {
openbr/plugins/classification/svm.cpp
@@ -29,19 +29,22 @@ namespace br @@ -29,19 +29,22 @@ namespace br
29 /*! 29 /*!
30 * \ingroup transforms 30 * \ingroup transforms
31 * \brief Wraps OpenCV's SVM framework. 31 * \brief Wraps OpenCV's SVM framework.
32 - * \see http://docs.opencv.org/modules/ml/doc/support_vector_machines.html  
33 - * \see C. Burges. "A tutorial on support vector machines for pattern recognition", Knowledge Discovery and Data Mining 2(2), 1998. 32 + * \br_link http://docs.opencv.org/modules/ml/doc/support_vector_machines.html
  33 + * \br_paper C. Burges.
  34 + * "A tutorial on support vector machines for pattern recognition"
  35 + * Knowledge Discovery and Data Mining 2(2), 1998.
34 * \author Josh Klontz \cite jklontz 36 * \author Josh Klontz \cite jklontz
35 - * \property enum Kernel The type of SVM kernel to use. Options are Linear, Poly, RBF, Sigmoid. Default is Linear.  
36 - * \property enum Type The type of SVM to do. Options are C_SVC, NU_SVC, ONE_CLASS, EPS_SVR, NU_SVR. Default is C_SVC.  
37 - * \property float C Parameter C of an SVM optimization problem. Needed when Type is C_SVC, EPS_SVR or NU_SVR. Default is -1.  
38 - * \property float gamma Parameter gamma of a kernel function. Needed when Kernel is Poly, RBF, or Sigmoid. Default is -1.  
39 - * \property QString inputVariable Metadata variable storing the label for each template. Default is "Label".  
40 - * \property QString outputVariable Metadata variable to store the prediction value of the trained SVM. If type is EPS_SVR or NU_SVR the stored value is the output of the SVM. Otherwise the value is the output of the SVM mapped through the reverse lookup table. Default is "".  
41 - * \property bool returnDFVal If true, dst is set to a 1x1 Mat with value equal to the predicted output of the SVM. Default is false.  
42 - * \property int termCriteria The maximum number of training iterations. Default is 1000.  
43 - * \property int folds Cross validation parameter used for autoselecting other parameters. Default is 5.  
44 - * \property bool balanceFolds If true and the problem is 2-class classification then more balanced cross validation subsets are created. Default is false. 37 + *
  38 + * \br_property enum Kernel The type of SVM kernel to use. Options are Linear, Poly, RBF, Sigmoid. Default is Linear.
  39 + * \br_property enum Type The type of SVM to do. Options are C_SVC, NU_SVC, ONE_CLASS, EPS_SVR, NU_SVR. Default is C_SVC.
  40 + * \br_property float C Parameter C of an SVM optimization problem. Needed when Type is C_SVC, EPS_SVR or NU_SVR. Default is -1.
  41 + * \br_property float gamma Parameter gamma of a kernel function. Needed when Kernel is Poly, RBF, or Sigmoid. Default is -1.
  42 + * \br_property QString inputVariable Metadata variable storing the label for each template. Default is "Label".
  43 + * \br_property QString outputVariable Metadata variable to store the prediction value of the trained SVM. If type is EPS_SVR or NU_SVR the stored value is the output of the SVM. Otherwise the value is the output of the SVM mapped through the reverse lookup table. Default is "".
  44 + * \br_property bool returnDFVal If true, dst is set to a 1x1 Mat with value equal to the predicted output of the SVM. Default is false.
  45 + * \br_property int termCriteria The maximum number of training iterations. Default is 1000.
  46 + * \br_property int folds Cross validation parameter used for autoselecting other parameters. Default is 5.
  47 + * \br_property bool balanceFolds If true and the problem is 2-class classification then more balanced cross validation subsets are created. Default is false.
45 */ 48 */
46 class SVMTransform : public Transform 49 class SVMTransform : public Transform
47 { 50 {
openbr/plugins/classification/turk.cpp
@@ -23,9 +23,9 @@ namespace br @@ -23,9 +23,9 @@ namespace br
23 * \ingroup transforms 23 * \ingroup transforms
24 * \brief Convenience class for training turk attribute regressors 24 * \brief Convenience class for training turk attribute regressors
25 * \author Josh Klontz \cite jklontz 25 * \author Josh Klontz \cite jklontz
26 - * \property QString key Metadata key to pass input values to SVM. Actual lookup key is "key_value" where value is each value in the parameter values. Default is "".  
27 - * \property QStringList values Metadata keys to pass input values to SVM. Actual lookup key is "key_value" where key is the parameter key and value is each value in this list. Each passed value trains a new SVM with the input values found in metadata["key_value"]. Default is "".  
28 - * \property bool isMeta If true, "Average+SaveMat(predicted_key_value)" is appended to each classifier. If false, nothing is appended. Default is false. 26 + * \br_property QString key Metadata key to pass input values to SVM. Actual lookup key is "key_value" where value is each value in the parameter values. Default is "".
  27 + * \br_property QStringList values Metadata keys to pass input values to SVM. Actual lookup key is "key_value" where key is the parameter key and value is each value in this list. Each passed value trains a new SVM with the input values found in metadata["key_value"]. Default is "".
  28 + * \br_property bool isMeta If true, "Average+SaveMat(predicted_key_value)" is appended to each classifier. If false, nothing is appended. Default is false.
29 */ 29 */
30 class TurkClassifierTransform : public Transform 30 class TurkClassifierTransform : public Transform
31 { 31 {
openbr/plugins/cluster/collectnn.cpp
@@ -23,7 +23,7 @@ namespace br @@ -23,7 +23,7 @@ namespace br
23 * \ingroup transforms 23 * \ingroup transforms
24 * \brief Collect nearest neighbors and append them to metadata. 24 * \brief Collect nearest neighbors and append them to metadata.
25 * \author Charles Otto \cite caotto 25 * \author Charles Otto \cite caotto
26 - * \property int keep The maximum number of nearest neighbors to keep. Default is 20. 26 + * \br_property int keep The maximum number of nearest neighbors to keep. Default is 20.
27 */ 27 */
28 class CollectNNTransform : public UntrainableMetaTransform 28 class CollectNNTransform : public UntrainableMetaTransform
29 { 29 {
openbr/plugins/cluster/kmeans.cpp
@@ -28,9 +28,9 @@ namespace br @@ -28,9 +28,9 @@ namespace br
28 * \ingroup transforms 28 * \ingroup transforms
29 * \brief Wraps OpenCV kmeans and flann. 29 * \brief Wraps OpenCV kmeans and flann.
30 * \author Josh Klontz \cite jklontz 30 * \author Josh Klontz \cite jklontz
31 - * \property int kTrain The number of random centroids to make at train time. Default is 256.  
32 - * \property int kSearch The number of nearest neighbors to search for at runtime. Default is 1.  
33 - * \see http://docs.opencv.org/modules/flann/doc/flann_fast_approximate_nearest_neighbor_search.html 31 + * \br_property int kTrain The number of random centroids to make at train time. Default is 256.
  32 + * \br_property int kSearch The number of nearest neighbors to search for at runtime. Default is 1.
  33 + * \br_link http://docs.opencv.org/modules/flann/doc/flann_fast_approximate_nearest_neighbor_search.html
34 */ 34 */
35 class KMeansTransform : public Transform 35 class KMeansTransform : public Transform
36 { 36 {
openbr/plugins/cluster/lognn.cpp
@@ -25,7 +25,7 @@ namespace br @@ -25,7 +25,7 @@ namespace br
25 * \ingroup transforms 25 * \ingroup transforms
26 * \brief Log nearest neighbors to specified file. 26 * \brief Log nearest neighbors to specified file.
27 * \author Charles Otto \cite caotto 27 * \author Charles Otto \cite caotto
28 - * \property QString fileName The name of the log file. An empty fileName won't be written to. Default is "". 28 + * \br_property QString fileName The name of the log file. An empty fileName won't be written to. Default is "".
29 */ 29 */
30 class LogNNTransform : public TimeVaryingTransform 30 class LogNNTransform : public TimeVaryingTransform
31 { 31 {
openbr/plugins/cluster/randomcentroids.cpp
@@ -29,9 +29,9 @@ namespace br @@ -29,9 +29,9 @@ namespace br
29 * \ingroup transforms 29 * \ingroup transforms
30 * \brief Chooses k random points to be centroids. 30 * \brief Chooses k random points to be centroids.
31 * \author Austin Blanton \cite imaus10 31 * \author Austin Blanton \cite imaus10
32 - * \property int kTrain The number of random centroids to make at train time. Default is 256.  
33 - * \property int kSearch The number of nearest neighbors to search for at runtime. Default is 1.  
34 - * \see http://docs.opencv.org/modules/flann/doc/flann_fast_approximate_nearest_neighbor_search.html 32 + * \br_property int kTrain The number of random centroids to make at train time. Default is 256.
  33 + * \br_property int kSearch The number of nearest neighbors to search for at runtime. Default is 1.
  34 + * \br_link http://docs.opencv.org/modules/flann/doc/flann_fast_approximate_nearest_neighbor_search.html
35 */ 35 */
36 class RandomCentroidsTransform : public Transform 36 class RandomCentroidsTransform : public Transform
37 { 37 {
openbr/plugins/core/align.cpp
@@ -36,9 +36,10 @@ namespace br @@ -36,9 +36,10 @@ namespace br
36 * \brief Improved procrustes alignment of points, to include a post processing scaling of points 36 * \brief Improved procrustes alignment of points, to include a post processing scaling of points
37 * to faciliate subsequent texture mapping. 37 * to faciliate subsequent texture mapping.
38 * \author Brendan Klare \cite bklare 38 * \author Brendan Klare \cite bklare
39 - * \param width Width of output coordinate space (before padding)  
40 - * \param padding Amount of padding around the coordinate space  
41 - * \param useFirst whether or not to use the first instance as the reference object 39 + *
  40 + * \br_property float width Width of output coordinate space (before padding)
  41 + * \br_property float padding Amount of padding around the coordinate space
  42 + * \br_property bool useFirst Whether or not to use the first instance as the reference object
42 */ 43 */
43 class ProcrustesAlignTransform : public Transform 44 class ProcrustesAlignTransform : public Transform
44 { 45 {
openbr/plugins/core/cache.cpp
@@ -21,7 +21,7 @@ namespace br @@ -21,7 +21,7 @@ namespace br
21 21
22 /*! 22 /*!
23 * \ingroup transforms 23 * \ingroup transforms
24 - * \brief Caches br::Transform::project() results. 24 + * \brief Caches Transform::project() results.
25 * \author Josh Klontz \cite jklontz 25 * \author Josh Klontz \cite jklontz
26 */ 26 */
27 class CacheTransform : public MetaTransform 27 class CacheTransform : public MetaTransform
openbr/plugins/core/contract.cpp
@@ -22,9 +22,10 @@ namespace br @@ -22,9 +22,10 @@ namespace br
22 /*! 22 /*!
23 * \ingroup transforms 23 * \ingroup transforms
24 * \brief It's like the opposite of ExpandTransform, but not really 24 * \brief It's like the opposite of ExpandTransform, but not really
25 - * \author Charles Otto \cite caotto  
26 * 25 *
27 - * Given a set of templatelists as input, concatenate them onto a single Template 26 + * Given a TemplateList as input, concatenate them into a single Template
  27 + *
  28 + * \author Charles Otto \cite caotto
28 */ 29 */
29 class ContractTransform : public UntrainableMetaTransform 30 class ContractTransform : public UntrainableMetaTransform
30 { 31 {
openbr/plugins/core/crossvalidate.cpp
@@ -29,11 +29,13 @@ static void _train(Transform *transform, TemplateList data) // think data has to @@ -29,11 +29,13 @@ static void _train(Transform *transform, TemplateList data) // think data has to
29 29
30 /*! 30 /*!
31 * \ingroup transforms 31 * \ingroup transforms
32 - * \brief Cross validate a trainable transform. 32 + * \brief Cross validate a trainable Transform.
  33 + *
  34 + * To use an extended Gallery, add an allPartitions="true" flag to the gallery sigset for those images that should be compared
  35 + * against for all testing partitions.
  36 + *
33 * \author Josh Klontz \cite jklontz 37 * \author Josh Klontz \cite jklontz
34 * \author Scott Klum \cite sklum 38 * \author Scott Klum \cite sklum
35 - * \note To use an extended gallery, add an allPartitions="true" flag to the gallery sigset for those images that should be compared  
36 - * against for all testing partitions.  
37 */ 39 */
38 class CrossValidateTransform : public MetaTransform 40 class CrossValidateTransform : public MetaTransform
39 { 41 {
openbr/plugins/core/discard.cpp
@@ -21,8 +21,8 @@ namespace br @@ -21,8 +21,8 @@ namespace br
21 21
22 /*! 22 /*!
23 * \ingroup transforms 23 * \ingroup transforms
24 - * \brief Removes all template's matrices.  
25 - * \see IdentityTransform FirstTransform RestTransform RemoveTransform 24 + * \brief Removes all matrices from a Template.
  25 + * \br_related_plugin IdentityTransform FirstTransform RestTransform RemoveTransform
26 * \author Josh Klontz \cite jklontz 26 * \author Josh Klontz \cite jklontz
27 */ 27 */
28 class DiscardTransform : public UntrainableMetaTransform 28 class DiscardTransform : public UntrainableMetaTransform
openbr/plugins/core/discardtemplates.cpp
@@ -19,6 +19,10 @@ @@ -19,6 +19,10 @@
19 namespace br 19 namespace br
20 { 20 {
21 21
  22 +/*!
  23 + * \brief DOCUMENT ME
  24 + * \author Unknown \cite unknown
  25 + */
22 class DiscardTemplatesTransform : public UntrainableMetaTransform 26 class DiscardTemplatesTransform : public UntrainableMetaTransform
23 { 27 {
24 Q_OBJECT 28 Q_OBJECT
openbr/plugins/core/distributetemplate.cpp
@@ -26,6 +26,10 @@ static void _projectList(const Transform *transform, const TemplateList *src, Te @@ -26,6 +26,10 @@ static void _projectList(const Transform *transform, const TemplateList *src, Te
26 transform->project(*src, *dst); 26 transform->project(*src, *dst);
27 } 27 }
28 28
  29 +/*!
  30 + * \brief DOCUMENT ME
  31 + * \author Unknown \cite unknown
  32 + */
29 class DistributeTemplateTransform : public MetaTransform 33 class DistributeTemplateTransform : public MetaTransform
30 { 34 {
31 Q_OBJECT 35 Q_OBJECT
openbr/plugins/core/event.cpp
@@ -19,6 +19,10 @@ @@ -19,6 +19,10 @@
19 namespace br 19 namespace br
20 { 20 {
21 21
  22 +/*!
  23 + * \brief DOCUMENT ME
  24 + * \author Unknown \cite unknown
  25 + */
22 class EventTransform : public UntrainableMetaTransform 26 class EventTransform : public UntrainableMetaTransform
23 { 27 {
24 Q_OBJECT 28 Q_OBJECT
openbr/plugins/core/expand.cpp
@@ -48,12 +48,9 @@ static TemplateList Expanded(const TemplateList &amp;templates) @@ -48,12 +48,9 @@ static TemplateList Expanded(const TemplateList &amp;templates)
48 48
49 /*! 49 /*!
50 * \ingroup transforms 50 * \ingroup transforms
51 - * \brief Performs an expansion step on input templatelists 51 + * \brief Performs an expansion step on an input TemplateList. Each matrix in each input Template is expanded into its own Template.
52 * \author Josh Klontz \cite jklontz 52 * \author Josh Klontz \cite jklontz
53 - *  
54 - * Each matrix in an input Template is expanded into its own template.  
55 - *  
56 - * \see PipeTransform 53 + * \br_related_plugin PipeTransform
57 */ 54 */
58 class ExpandTransform : public UntrainableMetaTransform 55 class ExpandTransform : public UntrainableMetaTransform
59 { 56 {
openbr/plugins/core/first.cpp
@@ -21,8 +21,8 @@ namespace br @@ -21,8 +21,8 @@ namespace br
21 21
22 /*! 22 /*!
23 * \ingroup transforms 23 * \ingroup transforms
24 - * \brief Removes all but the first matrix from the template.  
25 - * \see IdentityTransform DiscardTransform RestTransform RemoveTransform 24 + * \brief Removes all but the first matrix from the Template.
  25 + * \br_related_plugin IdentityTransform DiscardTransform RestTransform RemoveTransform
26 * \author Josh Klontz \cite jklontz 26 * \author Josh Klontz \cite jklontz
27 */ 27 */
28 class FirstTransform : public UntrainableMetaTransform 28 class FirstTransform : public UntrainableMetaTransform
openbr/plugins/core/fork.cpp
@@ -29,11 +29,11 @@ static void _train(Transform *transform, const QList&lt;TemplateList&gt; *data) @@ -29,11 +29,11 @@ static void _train(Transform *transform, const QList&lt;TemplateList&gt; *data)
29 /*! 29 /*!
30 * \ingroup transforms 30 * \ingroup transforms
31 * \brief Transforms in parallel. 31 * \brief Transforms in parallel.
32 - * \author Josh Klontz \cite jklontz  
33 * 32 *
34 - * The source br::Template is seperately given to each transform and the results are appended together. 33 + * The source Template is seperately given to each transform and the results are appended together.
35 * 34 *
36 - * \see PipeTransform 35 + * \author Josh Klontz \cite jklontz
  36 + * \br_related_plugin PipeTransform
37 */ 37 */
38 class ForkTransform : public CompositeTransform 38 class ForkTransform : public CompositeTransform
39 { 39 {
openbr/plugins/core/fte.cpp
@@ -22,7 +22,7 @@ namespace br @@ -22,7 +22,7 @@ namespace br
22 22
23 /*! 23 /*!
24 * \ingroup transforms 24 * \ingroup transforms
25 - * \brief Flags images that failed to enroll based on the specified transform. 25 + * \brief Flags images that failed to enroll based on the specified Transform.
26 * \author Josh Klontz \cite jklontz 26 * \author Josh Klontz \cite jklontz
27 */ 27 */
28 class FTETransform : public Transform 28 class FTETransform : public Transform
openbr/plugins/core/gallerycompare.cpp
@@ -22,7 +22,7 @@ namespace br @@ -22,7 +22,7 @@ namespace br
22 22
23 /*! 23 /*!
24 * \ingroup transforms 24 * \ingroup transforms
25 - * \brief Compare each template to a fixed gallery (with name = galleryName), using the specified distance. 25 + * \brief Compare each Template to a fixed Gallery (with name = galleryName), using the specified distance.
26 * dst will contain a 1 by n vector of scores. 26 * dst will contain a 1 by n vector of scores.
27 * \author Charles Otto \cite caotto 27 * \author Charles Otto \cite caotto
28 */ 28 */
openbr/plugins/core/identity.cpp
@@ -21,8 +21,8 @@ namespace br @@ -21,8 +21,8 @@ namespace br
21 21
22 /*! 22 /*!
23 * \ingroup transforms 23 * \ingroup transforms
24 - * \brief A no-op transform.  
25 - * \see DiscardTransform FirstTransform RestTransform RemoveTransform 24 + * \brief A no-op Transform.
  25 + * \br_related_plugin DiscardTransform FirstTransform RestTransform RemoveTransform
26 * \author Josh Klontz \cite jklontz 26 * \author Josh Klontz \cite jklontz
27 */ 27 */
28 class IdentityTransform : public UntrainableMetaTransform 28 class IdentityTransform : public UntrainableMetaTransform
openbr/plugins/core/independent.cpp
@@ -25,9 +25,11 @@ namespace br @@ -25,9 +25,11 @@ namespace br
25 25
26 /*! 26 /*!
27 * \ingroup transforms 27 * \ingroup transforms
28 - * \brief Clones the transform so that it can be applied independently. 28 + * \brief Clones the Transform so that it can be applied independently.
  29 + *
  30 + * Independent Transforms expect single-matrix Templates.
  31 + *
29 * \author Josh Klontz \cite jklontz 32 * \author Josh Klontz \cite jklontz
30 - * \em Independent transforms expect single-matrix templates.  
31 */ 33 */
32 class IndependentTransform : public MetaTransform 34 class IndependentTransform : public MetaTransform
33 { 35 {
openbr/plugins/core/jni.cpp
@@ -56,7 +56,6 @@ BR_REGISTER(Initializer, JNIInitializer) @@ -56,7 +56,6 @@ BR_REGISTER(Initializer, JNIInitializer)
56 * \brief Execute Java code from OpenBR using the JNI 56 * \brief Execute Java code from OpenBR using the JNI
57 * \author Jordan Cheney \cite jcheney 57 * \author Jordan Cheney \cite jcheney
58 */ 58 */
59 -  
60 class JNITransform : public UntrainableTransform 59 class JNITransform : public UntrainableTransform
61 { 60 {
62 Q_OBJECT 61 Q_OBJECT
openbr/plugins/core/likely.cpp
@@ -7,7 +7,7 @@ namespace br @@ -7,7 +7,7 @@ namespace br
7 * \ingroup transforms 7 * \ingroup transforms
8 * \brief Generic interface to Likely JIT compiler 8 * \brief Generic interface to Likely JIT compiler
9 * 9 *
10 - * www.liblikely.org 10 + * \br_link www.liblikely.org
11 * \author Josh Klontz \cite jklontz 11 * \author Josh Klontz \cite jklontz
12 */ 12 */
13 class LikelyTransform : public UntrainableTransform 13 class LikelyTransform : public UntrainableTransform
openbr/plugins/core/loadstore.cpp
@@ -22,7 +22,7 @@ namespace br @@ -22,7 +22,7 @@ namespace br
22 22
23 /*! 23 /*!
24 * \ingroup transforms 24 * \ingroup transforms
25 - * \brief Caches transform training. 25 + * \brief Caches Transform training.
26 * \author Josh Klontz \cite jklontz 26 * \author Josh Klontz \cite jklontz
27 */ 27 */
28 class LoadStoreTransform : public MetaTransform 28 class LoadStoreTransform : public MetaTransform
openbr/plugins/core/pipe.cpp
@@ -24,12 +24,11 @@ namespace br @@ -24,12 +24,11 @@ namespace br
24 /*! 24 /*!
25 * \ingroup Transforms 25 * \ingroup Transforms
26 * \brief Transforms in series. 26 * \brief Transforms in series.
27 - * \author Josh Klontz \cite jklontz  
28 * 27 *
29 - * The source br::Template is given to the first transform and the resulting br::Template is passed to the next transform, etc. 28 + * The source Template is given to the first transform and the resulting Template is passed to the next transform, etc.
30 * 29 *
31 - * \see ExpandTransform  
32 - * \see ForkTransform 30 + * \author Josh Klontz \cite jklontz
  31 + * \br_related_plugin ExpandTransform ForkTransform
33 */ 32 */
34 class PipeTransform : public CompositeTransform 33 class PipeTransform : public CompositeTransform
35 { 34 {
openbr/plugins/core/progresscounter.cpp
@@ -22,6 +22,11 @@ @@ -22,6 +22,11 @@
22 namespace br 22 namespace br
23 { 23 {
24 24
  25 +/*!
  26 + * \ingroup transforms
  27 + * \brief DOCUMENT ME
  28 + * \author Unknown \cite unknown
  29 + */
25 class ProgressCounterTransform : public TimeVaryingTransform 30 class ProgressCounterTransform : public TimeVaryingTransform
26 { 31 {
27 Q_OBJECT 32 Q_OBJECT
openbr/plugins/core/remove.cpp
@@ -21,11 +21,10 @@ namespace br @@ -21,11 +21,10 @@ namespace br
21 21
22 /*! 22 /*!
23 * \ingroup transforms 23 * \ingroup transforms
24 - * \brief Removes the matrix from the template at the specified index. 24 + * \brief Removes the matrix from the Template at the specified index.
25 * \author Josh Klontz \cite jklontz 25 * \author Josh Klontz \cite jklontz
26 - * \see IdentityTransform DiscardTransform FirstTransform RestTransform 26 + * \br_related_plugin IdentityTransform DiscardTransform FirstTransform RestTransform
27 */ 27 */
28 -//! [example_transform]  
29 class RemoveTransform : public UntrainableMetaTransform 28 class RemoveTransform : public UntrainableMetaTransform
30 { 29 {
31 Q_OBJECT 30 Q_OBJECT
@@ -40,7 +39,6 @@ class RemoveTransform : public UntrainableMetaTransform @@ -40,7 +39,6 @@ class RemoveTransform : public UntrainableMetaTransform
40 }; 39 };
41 40
42 BR_REGISTER(Transform, RemoveTransform) 41 BR_REGISTER(Transform, RemoveTransform)
43 -//! [example_transform]  
44 42
45 } // namespace br 43 } // namespace br
46 44
openbr/plugins/core/rest.cpp
@@ -21,8 +21,8 @@ namespace br @@ -21,8 +21,8 @@ namespace br
21 21
22 /*! 22 /*!
23 * \ingroup transforms 23 * \ingroup transforms
24 - * \brief Removes the first matrix from the template.  
25 - * \see IdentityTransform DiscardTransform FirstTransform RemoveTransform 24 + * \brief Removes the first matrix from the Template.
  25 + * \br_related_plugin IdentityTransform DiscardTransform FirstTransform RemoveTransform
26 * \author Josh Klontz \cite jklontz 26 * \author Josh Klontz \cite jklontz
27 */ 27 */
28 class RestTransform : public UntrainableMetaTransform 28 class RestTransform : public UntrainableMetaTransform
openbr/plugins/core/schrodinger.cpp
@@ -21,8 +21,8 @@ namespace br @@ -21,8 +21,8 @@ namespace br
21 21
22 /*! 22 /*!
23 * \ingroup transforms 23 * \ingroup transforms
24 - * \brief Generates two templates, one of which is passed through a transform and the other  
25 - * is not. No cats were harmed in the making of this transform. 24 + * \brief Generates two Templates, one of which is passed through a Transform and the other
  25 + * is not. No cats were harmed in the making of this Transform.
26 * \author Scott Klum \cite sklum 26 * \author Scott Klum \cite sklum
27 */ 27 */
28 class SchrodingerTransform : public MetaTransform 28 class SchrodingerTransform : public MetaTransform
openbr/plugins/core/singleton.cpp
@@ -21,7 +21,7 @@ namespace br @@ -21,7 +21,7 @@ namespace br
21 21
22 /*! 22 /*!
23 * \ingroup transforms 23 * \ingroup transforms
24 - * \brief A globally shared transform. 24 + * \brief A globally shared Transform.
25 * \author Josh Klontz \cite jklontz 25 * \author Josh Klontz \cite jklontz
26 */ 26 */
27 class SingletonTransform : public MetaTransform 27 class SingletonTransform : public MetaTransform
openbr/plugins/distance/bayesianquantization.cpp
@@ -26,7 +26,7 @@ namespace br @@ -26,7 +26,7 @@ namespace br
26 26
27 /*! 27 /*!
28 * \ingroup distances 28 * \ingroup distances
29 - * \brief Bayesian quantization distance 29 + * \brief Bayesian quantization Distance
30 * \author Josh Klontz \cite jklontz 30 * \author Josh Klontz \cite jklontz
31 */ 31 */
32 class BayesianQuantizationDistance : public Distance 32 class BayesianQuantizationDistance : public Distance
openbr/plugins/distance/crossvalidate.cpp
@@ -21,7 +21,7 @@ namespace br @@ -21,7 +21,7 @@ namespace br
21 21
22 /*! 22 /*!
23 * \ingroup distances 23 * \ingroup distances
24 - * \brief Cross validate a distance metric. 24 + * \brief Cross validate a Distance metric.
25 * \author Josh Klontz \cite jklontz 25 * \author Josh Klontz \cite jklontz
26 */ 26 */
27 class CrossValidateDistance : public UntrainableDistance 27 class CrossValidateDistance : public UntrainableDistance
openbr/plugins/distance/dist.cpp
@@ -24,7 +24,7 @@ namespace br @@ -24,7 +24,7 @@ namespace br
24 24
25 /*! 25 /*!
26 * \ingroup distances 26 * \ingroup distances
27 - * \brief Standard distance metrics 27 + * \brief Standard Distance metrics
28 * \author Josh Klontz \cite jklontz 28 * \author Josh Klontz \cite jklontz
29 */ 29 */
30 class DistDistance : public UntrainableDistance 30 class DistDistance : public UntrainableDistance
openbr/plugins/distance/fuse.cpp
@@ -23,9 +23,9 @@ namespace br @@ -23,9 +23,9 @@ namespace br
23 23
24 /*! 24 /*!
25 * \ingroup distances 25 * \ingroup distances
26 - * \brief Fuses similarity scores across multiple matrices of compared templates 26 + * \brief Fuses similarity scores across multiple matrices of compared Templates
27 * \author Scott Klum \cite sklum 27 * \author Scott Klum \cite sklum
28 - * \note Operation: Mean, sum, min, max are supported. 28 + * \br_property enum Operation Possible values are: [Mean, sum, min, max].
29 */ 29 */
30 class FuseDistance : public Distance 30 class FuseDistance : public Distance
31 { 31 {
openbr/plugins/distance/identical.cpp
@@ -23,7 +23,7 @@ namespace br @@ -23,7 +23,7 @@ namespace br
23 23
24 /*! 24 /*!
25 * \ingroup distances 25 * \ingroup distances
26 - * \brief Returns \c true if the templates are identical, \c false otherwise. 26 + * \brief Returns true if the Templates are identical, false otherwise.
27 * \author Josh Klontz \cite jklontz 27 * \author Josh Klontz \cite jklontz
28 */ 28 */
29 class IdenticalDistance : public UntrainableDistance 29 class IdenticalDistance : public UntrainableDistance
openbr/plugins/distance/keypointmatcher.cpp
@@ -26,6 +26,7 @@ namespace br @@ -26,6 +26,7 @@ namespace br
26 /*! 26 /*!
27 * \ingroup transforms 27 * \ingroup transforms
28 * \brief Wraps OpenCV Key Point Matcher 28 * \brief Wraps OpenCV Key Point Matcher
  29 + * \br_link http://docs.opencv.org/modules/features2d/doc/common_interfaces_of_feature_detectors.html
29 * \author Josh Klontz \cite jklontz 30 * \author Josh Klontz \cite jklontz
30 */ 31 */
31 class KeyPointMatcherDistance : public UntrainableDistance 32 class KeyPointMatcherDistance : public UntrainableDistance
openbr/plugins/distance/matchprobability.cpp
@@ -110,7 +110,7 @@ QDataStream &amp;operator&gt;&gt;(QDataStream &amp;stream, MP &amp;nmp) @@ -110,7 +110,7 @@ QDataStream &amp;operator&gt;&gt;(QDataStream &amp;stream, MP &amp;nmp)
110 110
111 /*! 111 /*!
112 * \ingroup distances 112 * \ingroup distances
113 - * \brief Match Probability \cite klare12 113 + * \brief Match Probability
114 * \author Josh Klontz \cite jklontz 114 * \author Josh Klontz \cite jklontz
115 */ 115 */
116 class MatchProbabilityDistance : public Distance 116 class MatchProbabilityDistance : public Distance
openbr/plugins/distance/online.cpp
@@ -21,7 +21,7 @@ namespace br @@ -21,7 +21,7 @@ namespace br
21 21
22 /*! 22 /*!
23 * \ingroup distances 23 * \ingroup distances
24 - * \brief Online distance metric to attenuate match scores across multiple frames 24 + * \brief Online Distance metric to attenuate match scores across multiple frames
25 * \author Brendan klare \cite bklare 25 * \author Brendan klare \cite bklare
26 */ 26 */
27 class OnlineDistance : public UntrainableDistance 27 class OnlineDistance : public UntrainableDistance
openbr/plugins/distance/pipe.cpp
@@ -24,11 +24,13 @@ namespace br @@ -24,11 +24,13 @@ namespace br
24 /*! 24 /*!
25 * \ingroup distances 25 * \ingroup distances
26 * \brief Distances in series. 26 * \brief Distances in series.
27 - * \author Josh Klontz \cite jklontz  
28 * 27 *
29 - * The templates are compared using each br::Distance in order. 28 + * The Templates are compared using each Distance in order.
30 * If the result of the comparison with any given distance is -FLOAT_MAX then this result is returned early. 29 * If the result of the comparison with any given distance is -FLOAT_MAX then this result is returned early.
31 - * Otherwise the returned result is the value of comparing the templates using the last br::Distance. 30 + * Otherwise the returned result is the value of comparing the Templates using the last Distance.
  31 + *
  32 + * \author Josh Klontz \cite jklontz
  33 + *
32 */ 34 */
33 class PipeDistance : public Distance 35 class PipeDistance : public Distance
34 { 36 {
openbr/plugins/distance/reject.cpp
@@ -21,7 +21,7 @@ namespace br @@ -21,7 +21,7 @@ namespace br
21 21
22 /*! 22 /*!
23 * \ingroup distances 23 * \ingroup distances
24 - * \brief Sets distance to -FLOAT_MAX if a target template has/doesn't have a key. 24 + * \brief Sets Distance to -FLOAT_MAX if a target Template has/doesn't have a key.
25 * \author Scott Klum \cite sklum 25 * \author Scott Klum \cite sklum
26 */ 26 */
27 class RejectDistance : public UntrainableDistance 27 class RejectDistance : public UntrainableDistance
openbr/plugins/distance/sum.cpp
@@ -23,7 +23,7 @@ namespace br @@ -23,7 +23,7 @@ namespace br
23 23
24 /*! 24 /*!
25 * \ingroup distances 25 * \ingroup distances
26 - * \brief Sum match scores across multiple distances 26 + * \brief Sum match scores across multiple Distances
27 * \author Scott Klum \cite sklum 27 * \author Scott Klum \cite sklum
28 */ 28 */
29 class SumDistance : public UntrainableDistance 29 class SumDistance : public UntrainableDistance
openbr/plugins/distance/svm.cpp
@@ -11,8 +11,8 @@ namespace br @@ -11,8 +11,8 @@ namespace br
11 11
12 /*! 12 /*!
13 * \ingroup Distances 13 * \ingroup Distances
14 - * \brief SVM Regression on template absolute differences.  
15 - * \author Josh Klontz 14 + * \brief SVM Regression on Template absolute differences.
  15 + * \author Josh Klontz \cite jklontz
16 */ 16 */
17 class SVMDistance : public Distance 17 class SVMDistance : public Distance
18 { 18 {
openbr/plugins/distance/unit.cpp
@@ -21,7 +21,7 @@ namespace br @@ -21,7 +21,7 @@ namespace br
21 21
22 /*! 22 /*!
23 * \ingroup distances 23 * \ingroup distances
24 - * \brief Linear normalizes of a distance so the mean impostor score is 0 and the mean genuine score is 1. 24 + * \brief Linear normalizes of a Distance so the mean impostor score is 0 and the mean genuine score is 1.
25 * \author Josh Klontz \cite jklontz 25 * \author Josh Klontz \cite jklontz
26 */ 26 */
27 class UnitDistance : public Distance 27 class UnitDistance : public Distance
openbr/plugins/distance/zscore.cpp
@@ -20,6 +20,10 @@ @@ -20,6 +20,10 @@
20 namespace br 20 namespace br
21 { 21 {
22 22
  23 +/*!
  24 + * \brief DOCUMENT ME
  25 + * \author Unknown \cite unknown
  26 + */
23 class ZScoreDistance : public Distance 27 class ZScoreDistance : public Distance
24 { 28 {
25 Q_OBJECT 29 Q_OBJECT
openbr/plugins/format/binary.cpp
@@ -26,7 +26,7 @@ namespace br @@ -26,7 +26,7 @@ namespace br
26 * \ingroup formats 26 * \ingroup formats
27 * \brief A simple binary matrix format. 27 * \brief A simple binary matrix format.
28 * \author Josh Klontz \cite jklontz 28 * \author Josh Klontz \cite jklontz
29 - * First 4 bytes indicate the number of rows. 29 + * \br_format First 4 bytes indicate the number of rows.
30 * Second 4 bytes indicate the number of columns. 30 * Second 4 bytes indicate the number of columns.
31 * The rest of the bytes are 32-bit floating data elements in row-major order. 31 * The rest of the bytes are 32-bit floating data elements in row-major order.
32 */ 32 */