00001 #include "Robots/SeaBeeIII/PixelizerI.H" 00002 00003 #include "Component/ModelParam.H" 00004 #include "Component/ModelOptionDef.H" 00005 00006 #define TILE_SIZE 17 // size, in pixels, for each square tile 00007 00008 #ifndef PIXELIZERI_C 00009 #define PIXELIZERI_C 00010 00011 // ###################################################################### 00012 PixelizerI::PixelizerI(int id, OptionManager& mgr, 00013 const std::string& descrName, const std::string& tagName) : 00014 VisionBrainComponentI(mgr, descrName, tagName) 00015 { 00016 } 00017 00018 PixelizerI::~PixelizerI() 00019 { 00020 } 00021 00022 void PixelizerI::registerTopics() 00023 { 00024 00025 } 00026 00027 void PixelizerI::updateFrame(Image<PixRGB<byte> > img, bool isFwdCamera) 00028 { 00029 if(img.initialized()) 00030 { 00031 int cols,rows = 0; 00032 rows = img.getHeight() / TILE_SIZE; 00033 cols = img.getWidth() / TILE_SIZE; 00034 00035 for(int i = 0; i < rows; i++) 00036 { 00037 for(int j = 0; j < cols; j++) 00038 { 00039 PixRGB<byte> avg = getAvgTileColor(j*TILE_SIZE, i*TILE_SIZE, img); 00040 for(int k = 0; k < TILE_SIZE * TILE_SIZE; k++) 00041 { 00042 img.setVal(j*TILE_SIZE+(k % TILE_SIZE), i*TILE_SIZE+(k / TILE_SIZE), avg); 00043 } 00044 } 00045 } 00046 00047 itsOfs->writeRGB(img, "Pixelizer Image", 00048 FrameInfo("Pixelizer", SRC_POS)); 00049 } 00050 else 00051 LINFO("Received uninitialized image."); 00052 } 00053 00054 // ###################################################################### 00055 00056 PixRGB<byte> PixelizerI::getAvgTileColor(int colOffset, 00057 int rowOffset, 00058 const Image<PixRGB<byte> >& img) 00059 { 00060 int avgR = 0; 00061 int avgG = 0; 00062 int avgB = 0; 00063 unsigned char r,g,b; 00064 00065 for(int i = 0; i < TILE_SIZE; i++) 00066 { 00067 for(int j = 0; j < TILE_SIZE; j++) 00068 { 00069 PixRGB<byte> pixel = img.getVal(colOffset + j,rowOffset + i); 00070 pixel.getRGB(r,g,b); 00071 avgR += r; 00072 avgG += g; 00073 avgB += b; 00074 } 00075 } 00076 00077 int totalTileSize = TILE_SIZE * TILE_SIZE; 00078 avgR /= totalTileSize; 00079 avgG /= totalTileSize; 00080 avgB /= totalTileSize; 00081 00082 return PixRGB<byte>(8*(avgR/8), 8*(avgG/8), 8*(avgB/8)); 00083 } 00084 00085 #endif