1 //////////////////////////////////////////////////////// 2 // Name : defs.h 3 // Purpose : Command/Parameter Definitions 4 // Author : Chris M. Christoudias 5 // Modified by 6 // Created : 03/20/2002 7 // Copyright: (c) Chris M. Christoudias 8 // Version : v0.1 9 //////////////////////////////////////////////////////// 10 11 #ifndef DEFS_H 12 #define DEFS_H 13 14 //define constants 15 #define MAX_TOKEN_NUM 10 16 17 //define counts 18 #define SPEED_NUM 3 19 #define CUST_CURVE_NUM 2 20 #define CURVE_NUM 6 21 #define CMD_NUM 10 22 #define PARAM_NUM 17 23 #define OUTPUTTYPE_NUM 9 24 #define INPUTTYPE_NUM 2 25 #define FILETYPE_NUM 7 26 #define SUPPORT_NUM 4 27 28 //define command types 29 enum { 30 CMD_IO, 31 CMD_EXECUTION, 32 CMD_FLAGS, 33 }; 34 35 //define commands 36 enum { 37 CMD_SAVE, 38 CMD_LOAD, 39 CMD_USE_RESULT, 40 CMD_EDGE_DETECT, 41 CMD_FILTER, 42 CMD_FUSE, 43 CMD_SEGMENT, 44 CMD_SYNERGISTIC, 45 CMD_DISPLAY_PROGRESS, 46 CMD_USE_CUSTOM_WEIGHT_MAP, 47 UNKNOWN_COMMAND 48 }; 49 50 //define parameters 51 enum { 52 PARAM_SPATIAL_BANDWIDTH, 53 PARAM_RANGE_BANDWIDTH, 54 PARAM_MINIMUM_REGION_AREA, 55 PARAM_GRADIENT_WINDOW_RADIUS, 56 PARAM_MIXTURE_PARAMETER, 57 PARAM_EDGE_STRENGTH_THRESHOLD, 58 PARAM_SPEEDUP, 59 PARAM_MINIMUM_LENGTH, 60 PARAM_NMX_RANK, 61 PARAM_NMX_CONF, 62 PARAM_NMX_TYPE, 63 PARAM_HYSTERISIS_HIGH_RANK, 64 PARAM_HYSTERISIS_HIGH_CONF, 65 PARAM_HYSTERISIS_HIGH_TYPE, 66 PARAM_HYSTERISIS_LOW_RANK, 67 PARAM_HYSTERISIS_LOW_CONF, 68 PARAM_HYSTERISIS_LOW_TYPE, 69 UNKNOWN_PARAMETER 70 }; 71 72 //define parameter types 73 enum { 74 PARAM_INTEGER, 75 PARAM_FLOAT, 76 PARAM_SPEEDUP_TYPE, 77 PARAM_CURVE_TYPE 78 }; 79 80 //define file types 81 enum { 82 FILE_PPM, 83 FILE_PGM, 84 FILE_PNG, 85 FILE_PCX, 86 FILE_PNM, 87 FILE_JPG, 88 FILE_MATLAB_ASCII, 89 FILE_UNKNOWN 90 }; 91 92 //define supported file types list 93 const int SUPPORTED_FILETYPE_LIST[SUPPORT_NUM] = { 94 FILE_PPM, 95 FILE_PGM, 96 FILE_PNM, 97 FILE_MATLAB_ASCII 98 }; 99 100 //define input types 101 enum { 102 INPUT_IMAGE, 103 INPUT_MAP, 104 INPUT_UNKNOWN 105 }; 106 107 //define output types 108 enum { 109 OUTPUT_SEGM_BOUNDARIES, 110 OUTPUT_SEGM_IMAGE, 111 OUTPUT_SEGM_IMAGE_BOUNDARIES, 112 OUTPUT_FILT_IMAGE, 113 OUTPUT_FILT_IMAGE_BOUNDARIES, 114 OUTPUT_GRADIENT_MAP, 115 OUTPUT_CONFIDENCE_MAP, 116 OUTPUT_WEIGHT_MAP, 117 OUTPUT_EDGES, 118 OUTPUT_UNKNOWN 119 }; 120 121 //define curve types 122 enum { 123 CURVE_ARC, 124 CURVE_VERTICAL_LINE, 125 CURVE_HORIZONTAL_LINE, 126 CURVE_LINE, 127 CURVE_BOX, 128 CURVE_CUSTOM 129 }; 130 131 //define custum curve parameters 132 enum { 133 CUST_CURVE_HYST_HIGH, 134 CUST_CURVE_HYST_LOW, 135 UNKNOWN_CURVE 136 }; 137 138 //define custom curve list 139 const char CUST_CURVE_LIST[CUST_CURVE_NUM][25] = { 140 "CustomCurveHystHigh", 141 "CustomCurveHystLow" 142 }; 143 144 //define command type list 145 const int CMD_TYPE_LIST[CMD_NUM+1] = { 146 CMD_IO, 147 CMD_IO, 148 CMD_IO, 149 CMD_EXECUTION, 150 CMD_EXECUTION, 151 CMD_EXECUTION, 152 CMD_EXECUTION, 153 CMD_FLAGS, 154 CMD_FLAGS, 155 CMD_FLAGS, 156 UNKNOWN_COMMAND, 157 }; 158 159 //define command list 160 const char CMD_LIST[CMD_NUM][25] = { 161 "Save", 162 "Load", 163 "UseResult", 164 "EdgeDetect", 165 "Filter", 166 "Fuse", 167 "Segment", 168 "Synergistic", 169 "DisplayProgress", 170 "UseCustomWeightMap" 171 }; 172 173 //define parameter list 174 const char PARAM_LIST[PARAM_NUM][25] = { 175 "SpatialBandwidth", 176 "RangeBandwidth", 177 "MinimumRegionArea", 178 "GradientWindowRadius", 179 "MixtureParameter", 180 "EdgeStrengthThreshold", 181 "Speedup", 182 "MinimumLength", 183 "NmxRank", 184 "NmxConf", 185 "NmxType", 186 "HysterisisHighRank", 187 "HysterisisHighConf", 188 "HysterisisHighType", 189 "HysterisisLowRank", 190 "HysterisisLowConf", 191 "HysterisisLowType" 192 }; 193 194 //define parameter type list 195 const int PARAMTYPE_LIST[PARAM_NUM + 2*CUST_CURVE_NUM] = { 196 PARAM_INTEGER, 197 PARAM_FLOAT, 198 PARAM_INTEGER, 199 PARAM_INTEGER, 200 PARAM_FLOAT, 201 PARAM_FLOAT, 202 PARAM_SPEEDUP_TYPE, 203 PARAM_INTEGER, 204 PARAM_FLOAT, 205 PARAM_FLOAT, 206 PARAM_CURVE_TYPE, 207 PARAM_FLOAT, 208 PARAM_FLOAT, 209 PARAM_CURVE_TYPE, 210 PARAM_FLOAT, 211 PARAM_FLOAT, 212 PARAM_CURVE_TYPE, 213 PARAM_FLOAT, 214 PARAM_INTEGER, 215 PARAM_FLOAT, 216 PARAM_INTEGER 217 }; 218 219 //define parameter lower bound list 220 const float LBOUND_LIST[PARAM_NUM] = { 221 0, 0, 1, 1, 0, 222 0, 0, 1, 0, 0, 223 0, 0, 0, 0, 0, 224 0, 0 225 }; 226 227 //define parameter lower bound list 228 const float UBOUND_LIST[PARAM_NUM] = { 229 -1, -1, -1, -1, 1, 230 1, -1, -1, 1, 1, 231 -1, 1, 1, -1, 1, 232 1, -1 233 }; 234 235 //define bounds message constants 236 enum { 237 GREATER_THAN_ZERO, 238 GREATER_THAN_ONE, 239 BETWEEN_ZERO_ONE, 240 NOT_APPLICABLE 241 }; 242 243 //define parameter bounds error table 244 const char boundsTable[4][40] = { 245 "Must take a value > 0.", 246 "Must take a value >= 1.", 247 "Must take a value between 0 and 1.", 248 "" 249 }; 250 251 //define parameter bounds error lookup table 252 const int BOUNDS_TABLE[PARAM_NUM] = { 253 GREATER_THAN_ZERO, 254 GREATER_THAN_ZERO, 255 GREATER_THAN_ONE, 256 GREATER_THAN_ONE, 257 BETWEEN_ZERO_ONE, 258 BETWEEN_ZERO_ONE, 259 NOT_APPLICABLE, 260 GREATER_THAN_ONE, 261 BETWEEN_ZERO_ONE, 262 BETWEEN_ZERO_ONE, 263 NOT_APPLICABLE, 264 BETWEEN_ZERO_ONE, 265 BETWEEN_ZERO_ONE, 266 NOT_APPLICABLE, 267 BETWEEN_ZERO_ONE, 268 BETWEEN_ZERO_ONE, 269 NOT_APPLICABLE 270 }; 271 272 //define file type list 273 const char FILETYPE_LIST[FILETYPE_NUM][15] = { 274 "PPM", 275 "PGM", 276 "PNG", 277 "PCX", 278 "PNM", 279 "JPG", 280 "MATLAB_ASCII" 281 }; 282 283 //define file type header list 284 const char FILETYPE_HEADER_LIST[FILETYPE_NUM-1][3] = { 285 "P6", "P5", "XX", "XX", "XX", "XX" 286 }; 287 288 //define output type list 289 const char OUTPUTTYPE_LIST[OUTPUTTYPE_NUM][25] = { 290 "SEGM_BOUNDARIES", 291 "SEGM_IMAGE", 292 "SEGM_IMAGE_BOUNDARIES", 293 "FILT_IMAGE", 294 "FILT_IMAGE_BOUNDARIES", 295 "GRADIENT_MAP", 296 "CONFIDENCE_MAP", 297 "WEIGHT_MAP", 298 "EDGES" 299 }; 300 301 //define input type list 302 const char INPUTTYPE_LIST[INPUTTYPE_NUM][6] = { 303 "IMAGE", 304 "MAP" 305 }; 306 307 //define speed type list 308 const char SPEEDTYPE_LIST[SPEED_NUM][7] = { 309 "NONE", 310 "MEDIUM", 311 "HIGH" 312 }; 313 314 //define curve type list 315 const char CURVETYPE_LIST[CURVE_NUM][20] = { 316 "ARC", 317 "VERTICAL_LINE", 318 "HORIZONTAL_LINE", 319 "LINE", 320 "BOX", 321 "CUSTOM" 322 }; 323 324 //define syntax and execution error flags 325 enum { 326 NO_ERRORS, 327 SYN_ERROR, 328 SYN_MISSING_SEMICOLON, 329 SYN_MISSING_LEFT_PARENTHESIS, 330 SYN_MISSING_RIGHT_PARENTHESIS, 331 SYN_MISSING_LEFT_CURL, 332 SYN_MISSING_RIGHT_CURL, 333 SYN_MISSING_QUOTATION, 334 SYN_MISSING_COMMA, 335 SYN_MISSING_EQUALS, 336 SYN_INCOMPLETE_LIST, 337 SYN_ARG_BOUNDS_ERROR, 338 SYN_INVALID_FILETYPE, 339 SYN_INVALID_INPUTTYPE, 340 SYN_INVALID_OUTPUTTYPE, 341 SYN_INVALID_FLAG, 342 SYN_INVALID_PARAMCMD, 343 SYN_ASSIGN_INTEGER, 344 SYN_ASSIGN_FLOAT, 345 SYN_ASSIGN_SPEEDUP, 346 SYN_ASSIGN_CURVE_TYPE, 347 SYN_ASSIGN_NMX_CUSTOM, 348 SYN_UNSUPPORTED_FILETYPE, 349 SYN_ASSIGN_INVALID_ARG, 350 EXE_ERROR, 351 EXE_LONG_POINT_LIST, 352 EXE_MISSING_PARAM, 353 EXE_OUTPUT_UNDEFINED, 354 EXE_INPUT_UNDEFINED, 355 EXE_UNSUPPORTED_FILE_FORMAT, 356 EXE_UNKNOWN_FILE_FORMAT, 357 EXE_OUT_OF_MEMORY, 358 EXE_FILE_WRITE_ERROR, 359 EXE_FILE_READ_ERROR, 360 EXE_NULL_PTR, 361 EXE_POINT_LIST_HIGH, 362 EXE_POINT_LIST_LOW, 363 SYN_BOUNDS_ERROR, 364 SYN_INVALID_FILE, 365 }; 366 367 //define syntax error lookup table 368 const char ErrorMsgTable[36][50] = { 369 "Unknown parameter or command format.", 370 "Expected: ;", 371 "Expected: (", 372 "Expected: )", 373 "Expected: {", 374 "Expected: }", 375 "Expected: '", 376 "Expected: ,", 377 "Expected: =", 378 "Incomplete point list.", 379 "Argument must be between 0 and 1.", 380 "Unknown file type.", 381 "Unknown input type.", 382 "Unknown output type.", 383 "Unknown flag.", 384 "Invalid parameter or command.", 385 "Integer data type expected.", 386 "Floating point data type expected.", 387 "Speedup enumeration expected.", 388 "Curve type enumeration expected.", 389 "Nmx suppr. curve may not be of a custom type.", 390 "Unsupported file format.", 391 "Invalid argument to function.", 392 "Aborting Execution.", 393 "Point list too large.", 394 "Needed parameter undefined.", 395 "Output un-defined", 396 "Input image un-defined.", 397 "Unsupported file format.", 398 "Unknown file format.", 399 "Out of memory.", 400 "Un-able to write file.", 401 "Un-able to read file.", 402 "Internal error. (Please contact vendor)", 403 "Hysterisis high custom curve is un-specified.", 404 "Hysterisis low custom curve is un-specified." 405 }; 406 407 //////////////////////////////////////////////////// 408 //define global function prototypes 409 //////////////////////////////////////////////////// 410 411 void CmCPrompt(const char *, ...); 412 unsigned char *CmCConvertToGrayscale(unsigned char *image, int height, int width); 413 int CmCWriteImage(char *filename, unsigned char *image, int height, int width, int dim, int filetype); 414 int CmCWriteMFile(char *filename, float *data, int rows, int cols, int dim); 415 int CmCReadImage(char *filename, unsigned char **image, int& height, int& width, int& dim); 416 int CmCReadMFile(char *filename, float **data, int rows, int cols); 417 418 #endif 419 420 421 422 423 424 425