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

Representations/Perception/ColorClassImage.cpp

Go to the documentation of this file.
00001 /**
00002 * @file ColorClassImage.cpp
00003 *
00004 * Implementation of class ColorClassImage
00005 *
00006 * @author Martin Lötzsch
00007 */
00008 
00009 #include "ColorClassImage.h"
00010 #include <string.h>
00011 
00012 
00013 ColorClassImage::ColorClassImage() : height(144), width(176)
00014 {
00015   memset(image,0,sizeof(image));
00016 }
00017 
00018 void ColorClassImage::convertToImage(Image& image)
00019 {
00020   image.cameraInfo.resolutionHeight = height;
00021   image.cameraInfo.resolutionWidth = width;
00022 
00023   colorClass color;
00024   for (register int y = 0; y < height; y++) 
00025   {
00026     for (register int x = 0; x < width; x++) 
00027     {
00028       color = (colorClass)this->image[y][x];
00029 
00030       image.image[y][3][x] = 128;
00031       image.image[y][4][x] = 128;
00032       image.image[y][5][x] = 128;
00033       switch (color)
00034       {
00035       case white:
00036         image.image[y][0][x] = 255;
00037         image.image[y][1][x] = 127;
00038         image.image[y][2][x] = 127;
00039         break;
00040       case green:
00041         image.image[y][0][x] = 180;
00042         image.image[y][1][x] =   0;
00043         image.image[y][2][x] =   0;
00044         break;
00045       case gray:
00046         image.image[y][0][x] = 127;
00047         image.image[y][1][x] = 127;
00048         image.image[y][2][x] = 127;
00049         break;
00050       case red:
00051         image.image[y][0][x] = 0;
00052         image.image[y][1][x] = 255;
00053         image.image[y][2][x] = 0;
00054         break;
00055       case orange:
00056         image.image[y][0][x] = 100;
00057         image.image[y][1][x] = 255;
00058         image.image[y][2][x] = 0;
00059         break;
00060       case yellow:
00061         image.image[y][0][x] = 255;
00062         image.image[y][1][x] = 255;
00063         image.image[y][2][x] =   0;
00064         break;
00065       case yellowOrange:
00066         image.image[y][0][x] = 170;
00067         image.image[y][1][x] = 255;
00068         image.image[y][2][x] = 0;
00069         break;
00070       case pink:
00071         image.image[y][0][x] = 255;
00072         image.image[y][1][x] = 255;
00073         image.image[y][2][x] = 255;
00074         break;
00075       case skyblue:
00076         image.image[y][0][x] = 180;
00077         image.image[y][1][x] =   0;
00078         image.image[y][2][x] = 255;
00079         break;
00080       case blue:
00081         image.image[y][0][x] =  60;
00082         image.image[y][1][x] =  80;
00083         image.image[y][2][x] = 255;
00084         break;
00085       case black:
00086         image.image[y][0][x] =   0;
00087         image.image[y][1][x] = 127;
00088         image.image[y][2][x] = 127;
00089         break;
00090       default:
00091         image.image[y][0][x] = 70;
00092         image.image[y][1][x] = 127;
00093         image.image[y][2][x] = 127;
00094         break;
00095       }//switch (color)
00096     }
00097   }
00098 }
00099 
00100 Out& operator << (Out& stream, const ColorClassImage& colorClassImage)
00101 {
00102   stream << colorClassImage.height << colorClassImage.width;
00103 
00104   // the current color class in the color table
00105   unsigned char currentColorClass = (unsigned char)colorClassImage.image[0][0];
00106 
00107   // the number of bytes in one sequence that have the same color class
00108   int currentLength = 0;
00109 
00110   for(int y = 0; y < colorClassImage.height; ++y)
00111     for(int x = 0; x < colorClassImage.width; ++x)
00112     {
00113       unsigned char nextColorClass = (unsigned char) colorClassImage.image[y][x];
00114     
00115       if (nextColorClass != currentColorClass)
00116       {
00117         stream << currentLength << currentColorClass;
00118         currentColorClass = nextColorClass;
00119         currentLength = 1;
00120       }
00121       else
00122         ++currentLength;
00123     }
00124   return stream << currentLength << currentColorClass;
00125 }
00126 
00127 In& operator>>(In& stream,ColorClassImage& colorClassImage)
00128 {
00129   // the current color class in the color table
00130   unsigned char currentColorClass;
00131 
00132   // the number of bytes in one sequence that have the same color class
00133   unsigned int currentLength = 0;
00134 
00135   stream >> colorClassImage.height >> colorClassImage.width;
00136 
00137   for(int y = 0; y < colorClassImage.height; ++y)
00138     for(int x = 0; x < colorClassImage.width; ++x)
00139     {
00140       if(!currentLength)
00141         stream >> currentLength >> currentColorClass;
00142       colorClassImage.image[y][x] = currentColorClass;
00143       --currentLength;
00144     }
00145   return stream;
00146 }

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