PixelizerI.C
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