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