1 /*M/////////////////////////////////////////////////////////////////////////////////////// 2 // 3 // IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. 4 // 5 // By downloading, copying, installing or using the software you agree to this license. 6 // If you do not agree to this license, do not download, install, 7 // copy or use the software. 8 // 9 // 10 // Intel License Agreement 11 // For Open Source Computer Vision Library 12 // 13 // Copyright (C) 2000, Intel Corporation, all rights reserved. 14 // Third party copyrights are property of their respective owners. 15 // 16 // Redistribution and use in source and binary forms, with or without modification, 17 // are permitted provided that the following conditions are met: 18 // 19 // * Redistribution's of source code must retain the above copyright notice, 20 // this list of conditions and the following disclaimer. 21 // 22 // * Redistribution's in binary form must reproduce the above copyright notice, 23 // this list of conditions and the following disclaimer in the documentation 24 // and/or other materials provided with the distribution. 25 // 26 // * The name of Intel Corporation may not be used to endorse or promote products 27 // derived from this software without specific prior written permission. 28 // 29 // This software is provided by the copyright holders and contributors "as is" and 30 // any express or implied warranties, including, but not limited to, the implied 31 // warranties of merchantability and fitness for a particular purpose are disclaimed. 32 // In no event shall the Intel Corporation or contributors be liable for any direct, 33 // indirect, incidental, special, exemplary, or consequential damages 34 // (including, but not limited to, procurement of substitute goods or services; 35 // loss of use, data, or profits; or business interruption) however caused 36 // and on any theory of liability, whether in contract, strict liability, 37 // or tort (including negligence or otherwise) arising in any way out of 38 // the use of this software, even if advised of the possibility of such damage. 39 // 40 //M*/ 41 42 /* 43 * createsamples.cpp 44 * 45 * Create test/training samples 46 */ 47 48 #include <cstdio> 49 #include <cstring> 50 #include <cstdlib> 51 #include <cmath> 52 #include <ctime> 53 54 using namespace std; 55 56 #include "utility.hpp" 57 58 int main( int argc, char* argv[] ) 59 { 60 int i = 0; 61 char* nullname = (char*)"(NULL)"; 62 char* vecname = NULL; /* .vec file name */ 63 char* infoname = NULL; /* file name with marked up image descriptions */ 64 char* imagename = NULL; /* single sample image */ 65 char* bgfilename = NULL; /* background */ 66 int num = 1000; 67 int bgcolor = 0; 68 int bgthreshold = 80; 69 int invert = 0; 70 int maxintensitydev = 40; 71 double maxxangle = 1.1; 72 double maxyangle = 1.1; 73 double maxzangle = 0.5; 74 int showsamples = 0; 75 /* the samples are adjusted to this scale in the sample preview window */ 76 double scale = 4.0; 77 int width = 24; 78 int height = 24; 79 80 srand((unsigned int)time(0)); 81 82 if( argc == 1 ) 83 { 84 printf( "Usage: %s\n [-info <collection_file_name>]\n" 85 " [-img <image_file_name>]\n" 86 " [-vec <vec_file_name>]\n" 87 " [-bg <background_file_name>]\n [-num <number_of_samples = %d>]\n" 88 " [-bgcolor <background_color = %d>]\n" 89 " [-inv] [-randinv] [-bgthresh <background_color_threshold = %d>]\n" 90 " [-maxidev <max_intensity_deviation = %d>]\n" 91 " [-maxxangle <max_x_rotation_angle = %f>]\n" 92 " [-maxyangle <max_y_rotation_angle = %f>]\n" 93 " [-maxzangle <max_z_rotation_angle = %f>]\n" 94 " [-show [<scale = %f>]]\n" 95 " [-w <sample_width = %d>]\n [-h <sample_height = %d>]\n", 96 argv[0], num, bgcolor, bgthreshold, maxintensitydev, 97 maxxangle, maxyangle, maxzangle, scale, width, height ); 98 99 return 0; 100 } 101 102 for( i = 1; i < argc; ++i ) 103 { 104 if( !strcmp( argv[i], "-info" ) ) 105 { 106 infoname = argv[++i]; 107 } 108 else if( !strcmp( argv[i], "-img" ) ) 109 { 110 imagename = argv[++i]; 111 } 112 else if( !strcmp( argv[i], "-vec" ) ) 113 { 114 vecname = argv[++i]; 115 } 116 else if( !strcmp( argv[i], "-bg" ) ) 117 { 118 bgfilename = argv[++i]; 119 } 120 else if( !strcmp( argv[i], "-num" ) ) 121 { 122 num = atoi( argv[++i] ); 123 } 124 else if( !strcmp( argv[i], "-bgcolor" ) ) 125 { 126 bgcolor = atoi( argv[++i] ); 127 } 128 else if( !strcmp( argv[i], "-bgthresh" ) ) 129 { 130 bgthreshold = atoi( argv[++i] ); 131 } 132 else if( !strcmp( argv[i], "-inv" ) ) 133 { 134 invert = 1; 135 } 136 else if( !strcmp( argv[i], "-randinv" ) ) 137 { 138 invert = CV_RANDOM_INVERT; 139 } 140 else if( !strcmp( argv[i], "-maxidev" ) ) 141 { 142 maxintensitydev = atoi( argv[++i] ); 143 } 144 else if( !strcmp( argv[i], "-maxxangle" ) ) 145 { 146 maxxangle = atof( argv[++i] ); 147 } 148 else if( !strcmp( argv[i], "-maxyangle" ) ) 149 { 150 maxyangle = atof( argv[++i] ); 151 } 152 else if( !strcmp( argv[i], "-maxzangle" ) ) 153 { 154 maxzangle = atof( argv[++i] ); 155 } 156 else if( !strcmp( argv[i], "-show" ) ) 157 { 158 showsamples = 1; 159 if( i+1 < argc && strlen( argv[i+1] ) > 0 && argv[i+1][0] != '-' ) 160 { 161 double d; 162 d = strtod( argv[i+1], 0 ); 163 if( d != -HUGE_VAL && d != HUGE_VAL && d > 0 ) scale = d; 164 ++i; 165 } 166 } 167 else if( !strcmp( argv[i], "-w" ) ) 168 { 169 width = atoi( argv[++i] ); 170 } 171 else if( !strcmp( argv[i], "-h" ) ) 172 { 173 height = atoi( argv[++i] ); 174 } 175 } 176 177 printf( "Info file name: %s\n", ((infoname == NULL) ? nullname : infoname ) ); 178 printf( "Img file name: %s\n", ((imagename == NULL) ? nullname : imagename ) ); 179 printf( "Vec file name: %s\n", ((vecname == NULL) ? nullname : vecname ) ); 180 printf( "BG file name: %s\n", ((bgfilename == NULL) ? nullname : bgfilename ) ); 181 printf( "Num: %d\n", num ); 182 printf( "BG color: %d\n", bgcolor ); 183 printf( "BG threshold: %d\n", bgthreshold ); 184 printf( "Invert: %s\n", (invert == CV_RANDOM_INVERT) ? "RANDOM" 185 : ( (invert) ? "TRUE" : "FALSE" ) ); 186 printf( "Max intensity deviation: %d\n", maxintensitydev ); 187 printf( "Max x angle: %g\n", maxxangle ); 188 printf( "Max y angle: %g\n", maxyangle ); 189 printf( "Max z angle: %g\n", maxzangle ); 190 printf( "Show samples: %s\n", (showsamples) ? "TRUE" : "FALSE" ); 191 if( showsamples ) 192 { 193 printf( "Scale: %g\n", scale ); 194 } 195 printf( "Width: %d\n", width ); 196 printf( "Height: %d\n", height ); 197 198 /* determine action */ 199 if( imagename && vecname ) 200 { 201 printf( "Create training samples from single image applying distortions...\n" ); 202 203 cvCreateTrainingSamples( vecname, imagename, bgcolor, bgthreshold, bgfilename, 204 num, invert, maxintensitydev, 205 maxxangle, maxyangle, maxzangle, 206 showsamples, width, height ); 207 208 printf( "Done\n" ); 209 } 210 else if( imagename && bgfilename && infoname ) 211 { 212 printf( "Create test samples from single image applying distortions...\n" ); 213 214 cvCreateTestSamples( infoname, imagename, bgcolor, bgthreshold, bgfilename, num, 215 invert, maxintensitydev, 216 maxxangle, maxyangle, maxzangle, showsamples, width, height ); 217 218 printf( "Done\n" ); 219 } 220 else if( infoname && vecname ) 221 { 222 int total; 223 224 printf( "Create training samples from images collection...\n" ); 225 226 total = cvCreateTrainingSamplesFromInfo( infoname, vecname, num, showsamples, 227 width, height ); 228 229 printf( "Done. Created %d samples\n", total ); 230 } 231 else if( vecname ) 232 { 233 printf( "View samples from vec file (press ESC to exit)...\n" ); 234 235 cvShowVecSamples( vecname, width, height, scale ); 236 237 printf( "Done\n" ); 238 } 239 else 240 { 241 printf( "Nothing to do\n" ); 242 } 243 244 return 0; 245 } 246