Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | File List | Namespace Members | Class Members | File Members | Related Pages

Tools/Debugging/DebugImages.h

Go to the documentation of this file.
00001 /**
00002 * @file Tools/Debugging/DebugImages.h
00003 *
00004 * Macros to manipulate and send debug images
00005 * 
00006 * @author <a href="mailto:juengel@informatik.hu-berlin.de">Matthias Jüngel</a>
00007 */ 
00008 #ifdef NEWDEBUGGING
00009 #include "DebugImages2.h"
00010 #else
00011 #ifndef __DebugImages_h_
00012 #define __DebugImages_h_
00013 
00014 #include "Tools/Debugging/Debugging.h"
00015 
00016 #ifdef NDEBUG
00017 #define NODEBUGDRAWINGS
00018 #endif
00019 #ifdef NO_DEBUG_DRAWING
00020 #define NODEBUGDRAWINGS
00021 #endif
00022 
00023 #ifdef NODEBUGDRAWINGS
00024 #define DECLARE_DEBUG_COLOR_CLASS_IMAGE(id) /**/
00025 #define SEND_DEBUG_COLOR_CLASS_IMAGE(id) /**/
00026 #else //NODEBUGDRAWINGS
00027 /**
00028 * Declares a debug image
00029 * @param id An image id (Images::ImageID)
00030 */
00031 #define DECLARE_DEBUG_COLOR_CLASS_IMAGE(id) ColorClassImage id##ColorClassImage
00032 
00033 /**Sends the debug image with the specified id (Images::ImageID) */
00034 #define SEND_DEBUG_COLOR_CLASS_IMAGE(id) INFO(send_##id##_image, idDebugColorClassImage, bin, Images::id << id##ColorClassImage)
00035 
00036 #endif //NODEBUGDRAWINGS
00037 
00038 
00039 #if defined(_WIN32)
00040 
00041 /**
00042 * Declares a debug image
00043 * @param id An image id (Images::ImageID)
00044 */
00045 #define DECLARE_DEBUG_IMAGE(id) Image id##Image
00046 
00047 /**
00048 * Initializes a debug image with an image
00049 * @param id An image id (Images::ImageID)
00050 * @param image The Image.
00051 */
00052 #define INIT_DEBUG_IMAGE(id, image) id##Image = image
00053 
00054 /** 
00055 * If an debug image is not created with macros the source code for
00056 * image generation should be encapsuled by this macro.
00057 */
00058 #define GENERATE_DEBUG_IMAGE(id,expression) \
00059   if (getDebugKeyTable().isActive(DebugKeyTable::send_##id##_image)) {\
00060   expression;\
00061   }
00062 
00063 /**Sends the debug image with the specified id (Images::ImageID) */
00064 #define SEND_DEBUG_IMAGE(id) INFO(send_##id##_image, idDebugImage, bin, Images::id << id##Image)
00065 
00066 /**Changes the y channel of the specified pixel in the specified debug image */
00067 #define DEBUG_IMAGE_SET_PIXEL_Y(id, xx, yy, y) \
00068   { \
00069     if(xx >= 0 && xx < id##Image.cameraInfo.resolutionWidth && \
00070       yy >= 0 && yy < id##Image.cameraInfo.resolutionHeight) \
00071     id##Image.image[yy][0][xx] = y; \
00072   }
00073 
00074 /**Sets the y, u and v values of the specified pixel in the specified debug image */
00075 #define DEBUG_IMAGE_SET_PIXEL_YUV(id, xx, yy, y, u, v) \
00076   { \
00077     if(xx >= 0 && xx < id##Image.cameraInfo.resolutionWidth && \
00078       yy >= 0 && yy < id##Image.cameraInfo.resolutionHeight) \
00079     { \
00080       id##Image.image[yy][0][xx] = y; \
00081       id##Image.image[yy][1][xx] = u; \
00082       id##Image.image[yy][2][xx] = v; \
00083     } \
00084   }
00085 
00086 #define DEBUG_IMAGE_GET_PIXEL_Y(id, xx, yy) id##Image.image[yy][0][xx]
00087 #define DEBUG_IMAGE_GET_PIXEL_U(id, xx, yy) id##Image.image[yy][1][xx]
00088 #define DEBUG_IMAGE_GET_PIXEL_V(id, xx, yy) id##Image.image[yy][2][xx]
00089 
00090 
00091 #define DEBUG_IMAGE_SET_PIXEL_BLACK(id, xx, yy)\
00092   DEBUG_IMAGE_SET_PIXEL_YUV(id, xx, yy, 0, 127, 127)
00093 
00094 #define DEBUG_IMAGE_SET_PIXEL_WHITE(id, xx, yy)\
00095   DEBUG_IMAGE_SET_PIXEL_YUV(id, xx, yy, 255, 127, 127)
00096 
00097 #define DEBUG_IMAGE_SET_PIXEL_GREEN(id, xx, yy)\
00098   DEBUG_IMAGE_SET_PIXEL_YUV(id, xx, yy, 180, 0, 0)
00099 
00100 #define DEBUG_IMAGE_SET_PIXEL_LIGHT_GRAY(id, xx, yy)\
00101   DEBUG_IMAGE_SET_PIXEL_YUV(id, xx, yy, 192, 127, 127)
00102 
00103 #define DEBUG_IMAGE_SET_PIXEL_GRAY(id, xx, yy)\
00104   DEBUG_IMAGE_SET_PIXEL_YUV(id, xx, yy, 127, 127, 127)
00105 
00106 #define DEBUG_IMAGE_SET_PIXEL_DARK_GRAY(id, xx, yy)\
00107   DEBUG_IMAGE_SET_PIXEL_YUV(id, xx, yy, 64, 127, 127)
00108 
00109 #define DEBUG_IMAGE_SET_PIXEL_DARK_GREEN(id, xx, yy)\
00110   DEBUG_IMAGE_SET_PIXEL_YUV(id, xx, yy, 0, 0, 0)
00111 
00112 #define DEBUG_IMAGE_SET_PIXEL_ORANGE(id, xx, yy)\
00113   DEBUG_IMAGE_SET_PIXEL_YUV(id, xx, yy, 100, 255, 0)
00114 
00115 #define DEBUG_IMAGE_SET_PIXEL_YELLOW(id, xx, yy)\
00116   DEBUG_IMAGE_SET_PIXEL_YUV(id, xx, yy, 180, 255, 0)
00117 
00118 #define DEBUG_IMAGE_SET_PIXEL_RED(id, xx, yy)\
00119   DEBUG_IMAGE_SET_PIXEL_YUV(id, xx, yy, 0, 255, 0)
00120 
00121 #define DEBUG_IMAGE_SET_PIXEL_MAUVE(id, xx, yy)\
00122   DEBUG_IMAGE_SET_PIXEL_YUV(id, xx, yy, 0, 180, 255)
00123 
00124 #define DEBUG_IMAGE_SET_PIXEL_BLUE(id, xx, yy)\
00125   DEBUG_IMAGE_SET_PIXEL_YUV(id, xx, yy, 180, 0, 255)
00126 
00127 #define DEBUG_IMAGE_SET_PIXEL_PINK(id, xx, yy)\
00128   DEBUG_IMAGE_SET_PIXEL_YUV(id, xx, yy, 255, 255, 255)
00129 
00130 #define DEBUG_IMAGE_SET_PIXEL_DARK_BLUE(id, xx, yy)\
00131   DEBUG_IMAGE_SET_PIXEL_YUV(id, xx, yy, 100, 0, 255)
00132 
00133 #else //_WIN32
00134 
00135 #ifdef __GNUC__
00136 #define DECLARE_DEBUG_IMAGE(id) /**/
00137 #else
00138 #define DECLARE_DEBUG_IMAGE(id) static bool id##Dummy
00139 #endif
00140 #define INIT_DEBUG_IMAGE(id, image) /**/
00141 #define GENERATE_DEBUG_IMAGE(id,expression) /**/
00142 #define SEND_DEBUG_IMAGE(id) /**/
00143 #define DEBUG_IMAGE_SET_PIXEL_Y(id, xx, yy, y) /**/
00144 #define DEBUG_IMAGE_SET_PIXEL_YUV(id, xx, yy, y, u, v) /**/
00145 #define DEBUG_IMAGE_SET_PIXEL_BLACK(id, xx, yy) /**/
00146 #define DEBUG_IMAGE_SET_PIXEL_WHITE(id, xx, yy) /**/
00147 #define DEBUG_IMAGE_SET_PIXEL_GREEN(id, xx, yy) /**/
00148 #define DEBUG_IMAGE_SET_PIXEL_GRAY(id, xx, yy) /**/
00149 #define DEBUG_IMAGE_SET_PIXEL_LIGHT_GRAY(id, xx, yy) /**/
00150 #define DEBUG_IMAGE_SET_PIXEL_DARK_GRAY(id, xx, yy) /**/
00151 #define DEBUG_IMAGE_SET_PIXEL_DARK_GREEN(id, xx, yy) /**/
00152 #define DEBUG_IMAGE_SET_PIXEL_ORANGE(id, xx, yy) /**/
00153 #define DEBUG_IMAGE_SET_PIXEL_YELLOW(id, xx, yy) /**/
00154 #define DEBUG_IMAGE_SET_PIXEL_RED(id, xx, yy) /**/
00155 #define DEBUG_IMAGE_SET_PIXEL_MAUVE(id, xx, yy) /**/
00156 #define DEBUG_IMAGE_SET_PIXEL_BLUE(id, xx, yy) /**/
00157 #define DEBUG_IMAGE_SET_PIXEL_PINK(id, xx, yy) /**/
00158 #define DEBUG_IMAGE_SET_PIXEL_DARK_BLUE(id, xx, yy) /**/
00159 #define DEBUG_IMAGE_GET_PIXEL_Y(id, xx, yy) 0
00160 #define DEBUG_IMAGE_GET_PIXEL_U(id, xx, yy) 0
00161 #define DEBUG_IMAGE_GET_PIXEL_V(id, xx, yy) 0
00162 
00163 #endif //_WIN32
00164 
00165 /**
00166 * Contains IDs for different (debug) image types
00167 * as well as a method to output their names.
00168 */
00169 class Images
00170 {
00171 public:
00172 /**
00173 * IDs for images.
00174 * enter new image IDs here and add the corresponding string in getImageIDName.
00175   */
00176   enum ImageID
00177   {
00178     noImage,
00179     rawImage,
00180     segmentedImage1,
00181     segmentedImage2,
00182     segmentedImage3,
00183     classificationY,
00184     classificationU,
00185     classificationV,
00186     colorFrequency,
00187     imageProcessorGeneral,
00188     imageProcessorScanLines,
00189     imageProcessorBall,
00190     imageProcessorGoal1,
00191     imageProcessorGoal2,
00192     imageProcessorFlags,
00193     imageProcessorPlayers,
00194     imageProcessorGradients,
00195     imageMotionRecognition,
00196     imageProcessorRobotDetection,
00197     numberOfImageIDs,
00198     image = numberOfImageIDs, // dummy entry, never use it when constructing a DebugDrawing
00199     segmentedImage, // dummy entry, never use it when constructing a DebugDrawing
00200     correctedImage, // dummy entry, never use it when constructing a DebugDrawing
00201     correctedSegmentedImage, // dummy entry, never use it when constructing a DebugDrawing
00202 
00203     imageProcessorGoals = imageProcessorGoal1
00204   };
00205 
00206   /**
00207   * Returns a description for an indexed image id.
00208   * Add descriptions for new image ids here.
00209   */
00210   static char* getImageIDName(ImageID imageID)
00211   {
00212     switch (imageID) 
00213     {
00214     case noImage: return "no image";
00215     case rawImage: return "raw image";
00216     case segmentedImage1: return "segmented image 1";
00217     case segmentedImage2: return "segmented image 2";
00218     case segmentedImage3: return "segmented image 3";
00219     case classificationY: return "classificationY";
00220     case classificationU: return "classificationU";
00221     case classificationV: return "classificationV";
00222     case colorFrequency: return "colorFrequency";
00223     case imageProcessorGeneral: return "imageProcessorGeneral";
00224     case imageProcessorScanLines: return "imageProcessorScanLines";
00225     case imageProcessorBall: return "imageProcessorBall";
00226     case imageProcessorFlags: return "imageProcessorFlags";
00227     case imageProcessorGoal1: return "imageProcessorGoal1";
00228   case imageProcessorGoal2: return "imageProcessorGoal2";
00229     case imageProcessorPlayers: return "imageProcessorPlayers";
00230     case imageProcessorGradients: return "imageProcessorGradients";
00231     case imageMotionRecognition: return "imageMotionRecognition";
00232     case imageProcessorRobotDetection: return "imageProcessorRobotDetection";
00233     default: return "check available drawings";
00234     }
00235   }
00236 
00237   static bool getDebugKeyID(enum ImageID imageID, DebugKeyTable::debugKeyID& debugKeyID)
00238   {
00239     switch (imageID) 
00240     {
00241     case segmentedImage1: debugKeyID = DebugKeyTable::send_segmentedImage1_image; return true;
00242     case segmentedImage2: debugKeyID = DebugKeyTable::send_segmentedImage2_image; return true;
00243     case segmentedImage3: debugKeyID = DebugKeyTable::send_segmentedImage3_image; return true;
00244     case classificationY: debugKeyID = DebugKeyTable::send_classificationY_image; return true;
00245     case classificationU: debugKeyID = DebugKeyTable::send_classificationU_image; return true;
00246     case classificationV: debugKeyID = DebugKeyTable::send_classificationV_image; return true;
00247     case colorFrequency: debugKeyID = DebugKeyTable::send_colorFrequency_image; return true;
00248     case imageProcessorGeneral: debugKeyID = DebugKeyTable::send_imageProcessorGeneral_image; return true;
00249     case imageProcessorScanLines: debugKeyID = DebugKeyTable::send_imageProcessorScanLines_image; return true;
00250     case imageProcessorBall: debugKeyID = DebugKeyTable::send_imageProcessorBall_image; return true;
00251     case imageProcessorFlags: debugKeyID = DebugKeyTable::send_imageProcessorFlags_image; return true;
00252     case imageProcessorGoal1: debugKeyID = DebugKeyTable::send_imageProcessorGoal1_image; return true;
00253     case imageProcessorGoal2: debugKeyID = DebugKeyTable::send_imageProcessorGoal2_image; return true;
00254     case imageProcessorPlayers: debugKeyID = DebugKeyTable::send_imageProcessorPlayers_image; return true;
00255     case imageProcessorGradients: debugKeyID = DebugKeyTable::send_imageProcessorGradients_image; return true;
00256     case imageMotionRecognition: debugKeyID = DebugKeyTable::send_imageMotionRecognition_image; return true;
00257     case imageProcessorRobotDetection: debugKeyID = DebugKeyTable::send_imageProcessorRobotDetection_image; return true;
00258     
00259     default: return false;
00260     }
00261   }
00262 };
00263 
00264 /// no new mechanisms
00265 // yuv
00266 #define N_DECLARE_DEBUG_IMAGE(id) /**/
00267 #define N_INIT_DEBUG_IMAGE(id, image) /**/
00268 #define N_INIT_DEBUG_IMAGE_BLACK(id, image) /**/
00269 #define N_SEND_DEBUG_IMAGE(id) /**/
00270 #define N_SEND_DEBUG_IMAGE_AS_JPEG(id) /**/ 
00271 #define N_SEND_DEBUG_IMAGE_AS_JPEG2(id) /**/
00272 #define N_DEBUG_IMAGE_SET_PIXEL_YUV(id, xx, yy, y, u, v) /**/
00273 #define N_DEBUG_IMAGE_GET_PIXEL_Y(id, xx, yy) /**/
00274 #define N_DEBUG_IMAGE_GET_PIXEL_U(id, xx, yy) /**/
00275 #define N_DEBUG_IMAGE_GET_PIXEL_V(id, xx, yy) /**/
00276 #define N_DEBUG_IMAGE_SET_PIXEL_BLACK(id, xx, yy)/**/
00277 #define N_DEBUG_IMAGE_SET_PIXEL_WHITE(id, xx, yy)/**/
00278 #define N_DEBUG_IMAGE_SET_PIXEL_GREEN(id, xx, yy)/**/
00279 #define N_DEBUG_IMAGE_SET_PIXEL_LIGHT_GRAY(id, xx, yy)/**/
00280 #define N_DEBUG_IMAGE_SET_PIXEL_GRAY(id, xx, yy)/**/
00281 #define N_DEBUG_IMAGE_SET_PIXEL_DARK_GRAY(id, xx, yy)/**/
00282 #define N_DEBUG_IMAGE_SET_PIXEL_DARK_GREEN(id, xx, yy)/**/
00283 #define N_DEBUG_IMAGE_SET_PIXEL_ORANGE(id, xx, yy)/**/
00284 #define N_DEBUG_IMAGE_SET_PIXEL_YELLOW(id, xx, yy)/**/
00285 #define N_DEBUG_IMAGE_SET_PIXEL_RED(id, xx, yy)/**/
00286 #define N_DEBUG_IMAGE_SET_PIXEL_MAUVE(id, xx, yy)/**/
00287 #define N_DEBUG_IMAGE_SET_PIXEL_BLUE(id, xx, yy)/**/
00288 #define N_DEBUG_IMAGE_SET_PIXEL_PINK(id, xx, yy)/**/
00289 #define N_DEBUG_IMAGE_SET_PIXEL_DARK_BLUE(id, xx, yy)/**/
00290 
00291 // gray scale ( + color class)
00292 #define N_DECLARE_DEBUG_GRAY_SCALE_IMAGE(id) /**/
00293 #define N_INIT_DEBUG_GRAY_SCALE_IMAGE(id, image) /**/
00294 #define N_SET_COLORED_PIXEL_IN_GRAY_SCALE_IMAGE(id, x, y, color) /**/
00295 #define N_SEND_DEBUG_GRAY_SCALE_IMAGE(id) /**/
00296 
00297 // color class
00298 #define N_DECLARE_DEBUG_COLOR_CLASS_IMAGE(id) /**/
00299 #define N_SEND_DEBUG_COLOR_CLASS_IMAGE(id) /**/
00300 
00301 // all
00302 #define N_GENERATE_DEBUG_IMAGE(id,expression) /**/
00303 
00304 #endif //__DebugImages_h_
00305 #endif //NEWDEBUGGING

Generated on Mon Mar 20 22:00:04 2006 for GT2005 by doxygen 1.3.6