Tekkotsu Homepage
Demos
Overview
Downloads
Dev. Resources
Reference
Credits

SegmentedColorGenerator Class Reference

Generates FilterBankEvents indexed color images based on a color threshold file. More...

#include <SegmentedColorGenerator.h>

Inheritance diagram for SegmentedColorGenerator:

Detailed Description

Generates FilterBankEvents indexed color images based on a color threshold file.

Pretty simple idea - use a big mapping of YUV values to lookup index values.

Threshold files are 16x64x64 = 64KB. So each Y component is discretized into 16 levels, U and V into 64 each. Then the appropriate element of the 3D matrix is looked up, which holds the desired index for that color. The threshold files are generated offline. See http://www.tekkotsu.org/CameraSetup.html

The color information is shared for all threshold files in this object.

The row skip is always 0, and the row stride is always width. But it would be better to use the proper accessor functions to be more general.

Should receive FilterBankEvents from any standard format FilterBankGenerator (like RawCameraGenerator) However, images that use an increment!=1 will break.

The events which are produced are SegmentedColorFilterBankEvents, which will allow you to reference the color information later on. Keep in mind that the region and area statistic fields are not filled out at this stage... the RegionGenerator will complete the processing if you want that info as well.

Uses the CMVision library for main processing

The format used for serialization is: (code is in saveBuffer())

  • <FilterBankGenerator: superclass header> (First saves the superclass's info)
  • <string: "SegColorImage"> (remember a 'string' is len+str+0; so this is the literal "\015\0\0\0SegColorImage\0"; also remember "\015" is octal for 13)
  • <char[width*height]: image data> (one byte per sample)
  • <unsigned int: num_cols> (number of different colors available)
  • for each of num_col:
    • <char: red> red color to use for display of this index
    • <char: green> green color to use for display of this index
    • <char: blue> blue color to use for display of this index

For more information on serialization, see FilterBankGenerator

Definition at line 52 of file SegmentedColorGenerator.h.

List of all members.

Classes

class  NoThresholdException
 thrown if no threshold maps are available More...

Public Types

typedef CMVision::uchar cmap_t
 type to use for color indexes
typedef CMVision::color_class_state color_class_state
 use CMVision's color structure
typedef CMVision::color_name_map color_name_map
 shorthand for CMVision's color name lookup data structure

Public Member Functions

 SegmentedColorGenerator (unsigned int mysid, FilterBankGenerator *fbg, EventBase::EventTypeID_t tid)
 constructor
 SegmentedColorGenerator (unsigned int mysid, FilterBankGenerator *fbg, EventBase::EventTypeID_t tid, unsigned int syc, unsigned int suc, unsigned int svc)
 constructor, you can pass which channels to use as Y, U, & V channels
virtual ~SegmentedColorGenerator ()
 destructor
virtual void doEvent ()
 should receive FilterBankEvents from any standard format FilterBankGenerator (like RawCameraGenerator)
virtual unsigned int loadThresholdMap (const std::string &tm_file)
 loads a threshold map into memory from a file, returns -1U if failed, otherwise returns corresponding channel
virtual bool loadColorInfo (const std::string &col_file)
 loads color information from a file, returns false if failed, true otherwise
virtual unsigned int getNumColors () const
 returns the number of different colors available
virtual const color_class_stategetColors () const
 gives direct access to the color information
virtual color_class_stategetColors ()
 gives direct access to the color information
unsigned int getColorIndex (const char *name) const
 returns index of color corresponding to a string (uses a fast hash lookup), or -1U if not found
unsigned int getColorIndex (const std::string &name) const
 returns index of color corresponding to a string (uses a fast hash lookup), or -1U if not found
unsigned int getColorIndex (const rgb color) const
 returns index of color corresponding to a specific rgb color, or -1U if not found
rgb getColorRGB (const unsigned int index) const
 returns rgb struct (from colors.h) corresponding to an int index. Returns black if index is invalid.
rgb getColorRGB (const char *name) const
 returns rgb struct (from colors.h) corresponding to a string. Returns black if index is invalid.
rgb getColorRGB (const std::string &name) const
 returns rgb struct (from colors.h) corresponding to a string. Returns black if index is invalid.
const char * getColorName (const unsigned int index) const
 returns the name of a color given its index
virtual unsigned int getBinSize () const
virtual unsigned int loadBuffer (const char buf[], unsigned int len, const char *filename=NULL)
virtual unsigned int saveBuffer (char buf[], unsigned int len) const
virtual bool encodeColorsInc (char *&buf, unsigned int &len) const
 in case you want to only save the color info but not the image (this is binary - *not* the same format as what's read in loadColorInfo)
virtual bool decodeColorsInc (const char *&buf, unsigned int &len)
 in case you want to only load the color info but not the image (this is binary - *not* the same format as what's read in loadColorInfo)

Static Public Member Functions

static std::string getClassDescription ()
 Gives a short description of what this class of behaviors does... you should override this (but don't have to).

Protected Member Functions

virtual void setNumImages (unsigned int nLayers, unsigned int nChannels)
 ignores nChannels - the number of channels is always the number of loaded threshold maps
virtual void setDimensions ()
virtual unsigned char * createImageCache (unsigned int layer, unsigned int chan) const
 creates the image cache width[layer]*height[layer] + 1 -- why plus one? Because CMVision temporarily scribbles one-past end of each row
virtual void calcImage (unsigned int layer, unsigned int chan)
 should calculate new image data, called by getImage() only when imageValids indicates the image being requested is dirty (and only after getImage() has already called createImageCache())

Protected Attributes

unsigned int srcYChan
 the channel of the source's Y channel
unsigned int srcUChan
 the channel of the source's U channel
unsigned int srcVChan
 the channel of the source's V channel
std::vector< cmap_t * > tmaps
 list of threshold maps so you can segment the same source different ways
std::vector< std::string > tmapNames
 filename of each tmap;
unsigned int numColors
 number of available colors
color_class_state colors [MAX_COLORS]
 array of available colors
color_name_map colorNames
 look up color indexes corresponding to names

Static Protected Attributes

static const unsigned int BITS_Y = 4
 bits of discretization for Y channel in the threshold map
static const unsigned int BITS_U = 6
 bits of discretization for U channel in the threshold map
static const unsigned int BITS_V = 6
 bits of discretization for V channel in the threshold map
static const unsigned int NUM_Y = 1 << BITS_Y
 levels of discretization for Y channel in the threshold map
static const unsigned int NUM_U = 1 << BITS_U
 levels of discretization for U channel in the threshold map
static const unsigned int NUM_V = 1 << BITS_V
 levels of discretization for V channel in the threshold map
static const unsigned int MAX_COLORS = 20
 maximum number of different colors that can be segmented

Private Member Functions

 SegmentedColorGenerator (const SegmentedColorGenerator &fbk)
 don't call
const SegmentedColorGeneratoroperator= (const SegmentedColorGenerator &fbk)
 don't call

Member Typedef Documentation

type to use for color indexes

Definition at line 54 of file SegmentedColorGenerator.h.

use CMVision's color structure

Definition at line 55 of file SegmentedColorGenerator.h.

shorthand for CMVision's color name lookup data structure

Definition at line 56 of file SegmentedColorGenerator.h.


Constructor & Destructor Documentation

SegmentedColorGenerator::SegmentedColorGenerator ( unsigned int  mysid,
FilterBankGenerator fbg,
EventBase::EventTypeID_t  tid 
)

constructor

Definition at line 10 of file SegmentedColorGenerator.cc.

SegmentedColorGenerator::SegmentedColorGenerator ( unsigned int  mysid,
FilterBankGenerator fbg,
EventBase::EventTypeID_t  tid,
unsigned int  syc,
unsigned int  suc,
unsigned int  svc 
)

constructor, you can pass which channels to use as Y, U, & V channels

Definition at line 20 of file SegmentedColorGenerator.cc.

SegmentedColorGenerator::~SegmentedColorGenerator (  )  [virtual]

destructor

Definition at line 29 of file SegmentedColorGenerator.cc.

SegmentedColorGenerator::SegmentedColorGenerator ( const SegmentedColorGenerator fbk  )  [private]

don't call


Member Function Documentation

void SegmentedColorGenerator::calcImage ( unsigned int  layer,
unsigned int  channel 
) [protected, virtual]

should calculate new image data, called by getImage() only when imageValids indicates the image being requested is dirty (and only after getImage() has already called createImageCache())

This is where you'll want to put your user-specific code for calculating the image data

Implements FilterBankGenerator.

Definition at line 211 of file SegmentedColorGenerator.cc.

unsigned char * SegmentedColorGenerator::createImageCache ( unsigned int  layer,
unsigned int  chan 
) const [protected, virtual]

creates the image cache width[layer]*height[layer] + 1 -- why plus one? Because CMVision temporarily scribbles one-past end of each row

Implements FilterBankGenerator.

Definition at line 203 of file SegmentedColorGenerator.cc.

Referenced by loadBuffer().

bool SegmentedColorGenerator::decodeColorsInc ( const char *&  buf,
unsigned int &  len 
) [virtual]

in case you want to only load the color info but not the image (this is binary - *not* the same format as what's read in loadColorInfo)

Definition at line 180 of file SegmentedColorGenerator.cc.

Referenced by loadBuffer().

void SegmentedColorGenerator::doEvent (  )  [virtual]

should receive FilterBankEvents from any standard format FilterBankGenerator (like RawCameraGenerator)

Reimplemented from FilterBankGenerator.

Definition at line 44 of file SegmentedColorGenerator.cc.

bool SegmentedColorGenerator::encodeColorsInc ( char *&  buf,
unsigned int &  len 
) const [virtual]

in case you want to only save the color info but not the image (this is binary - *not* the same format as what's read in loadColorInfo)

Definition at line 169 of file SegmentedColorGenerator.cc.

Referenced by saveBuffer(), RegionCam::writeRegions(), and SegCam::writeRLE().

unsigned int SegmentedColorGenerator::getBinSize (  )  const [virtual]

The loadBuffer() functions of the included subclasses aren't tested, so don't assume they'll work without a little debugging...

Reimplemented from FilterBankGenerator.

Definition at line 103 of file SegmentedColorGenerator.cc.

static std::string SegmentedColorGenerator::getClassDescription (  )  [static]

Gives a short description of what this class of behaviors does... you should override this (but don't have to).

If you do override this, also consider overriding getDescription() to return it

Reimplemented from BehaviorBase.

Definition at line 65 of file SegmentedColorGenerator.h.

unsigned int SegmentedColorGenerator::getColorIndex ( const rgb  color  )  const

returns index of color corresponding to a specific rgb color, or -1U if not found

Definition at line 95 of file SegmentedColorGenerator.h.

unsigned int SegmentedColorGenerator::getColorIndex ( const std::string &  name  )  const

returns index of color corresponding to a string (uses a fast hash lookup), or -1U if not found

Definition at line 92 of file SegmentedColorGenerator.h.

Referenced by getColorIndex().

unsigned int SegmentedColorGenerator::getColorIndex ( const char *  name  )  const

returns index of color corresponding to a string (uses a fast hash lookup), or -1U if not found

Definition at line 86 of file SegmentedColorGenerator.h.

Referenced by ProjectInterface::defLookupColorIndexByRgb(), and getColorRGB().

const char* SegmentedColorGenerator::getColorName ( const unsigned int  index  )  const

returns the name of a color given its index

Definition at line 119 of file SegmentedColorGenerator.h.

Referenced by ProjectInterface::defLookupNumColors().

rgb SegmentedColorGenerator::getColorRGB ( const std::string &  name  )  const

returns rgb struct (from colors.h) corresponding to a string. Returns black if index is invalid.

Definition at line 114 of file SegmentedColorGenerator.h.

rgb SegmentedColorGenerator::getColorRGB ( const char *  name  )  const

returns rgb struct (from colors.h) corresponding to a string. Returns black if index is invalid.

Definition at line 109 of file SegmentedColorGenerator.h.

rgb SegmentedColorGenerator::getColorRGB ( const unsigned int  index  )  const

returns rgb struct (from colors.h) corresponding to an int index. Returns black if index is invalid.

Definition at line 104 of file SegmentedColorGenerator.h.

Referenced by ProjectInterface::defLookupColorName(), getColorIndex(), and getColorRGB().

virtual color_class_state* SegmentedColorGenerator::getColors (  )  [virtual]

gives direct access to the color information

Definition at line 83 of file SegmentedColorGenerator.h.

virtual const color_class_state* SegmentedColorGenerator::getColors (  )  const [virtual]

gives direct access to the color information

Definition at line 80 of file SegmentedColorGenerator.h.

Referenced by doEvent(), getColorName(), and getColorRGB().

virtual unsigned int SegmentedColorGenerator::getNumColors (  )  const [virtual]

returns the number of different colors available

Definition at line 77 of file SegmentedColorGenerator.h.

Referenced by DualCoding::MapBuilderRequest::addAllMinBlobAreas(), DualCoding::MapBuilderRequest::allColors(), doEvent(), and getColorIndex().

unsigned int SegmentedColorGenerator::loadBuffer ( const char  buf[],
unsigned int  len,
const char *  filename = NULL 
) [virtual]

The loadBuffer() functions of the included subclasses aren't tested, so don't assume they'll work without a little debugging...

Reimplemented from FilterBankGenerator.

Definition at line 111 of file SegmentedColorGenerator.cc.

bool SegmentedColorGenerator::loadColorInfo ( const std::string &  col_file  )  [virtual]

loads color information from a file, returns false if failed, true otherwise

Definition at line 78 of file SegmentedColorGenerator.cc.

unsigned int SegmentedColorGenerator::loadThresholdMap ( const std::string &  tm_file  )  [virtual]

loads a threshold map into memory from a file, returns -1U if failed, otherwise returns corresponding channel

Definition at line 56 of file SegmentedColorGenerator.cc.

const SegmentedColorGenerator& SegmentedColorGenerator::operator= ( const SegmentedColorGenerator fbk  )  [private]

don't call

unsigned int SegmentedColorGenerator::saveBuffer ( char  buf[],
unsigned int  len 
) const [virtual]

The loadBuffer() functions of the included subclasses aren't tested, so don't assume they'll work without a little debugging...

Reimplemented from FilterBankGenerator.

Definition at line 139 of file SegmentedColorGenerator.cc.

void SegmentedColorGenerator::setDimensions (  )  [protected, virtual]

sets stride parameter to width (as set by FilterBankGenerator::setDimensions())

Reimplemented from FilterBankGenerator.

Definition at line 191 of file SegmentedColorGenerator.cc.

void SegmentedColorGenerator::setNumImages ( unsigned int  nLayers,
unsigned int  nChannels 
) [protected, virtual]

ignores nChannels - the number of channels is always the number of loaded threshold maps

Reimplemented from FilterBankGenerator.

Definition at line 198 of file SegmentedColorGenerator.cc.

Referenced by loadThresholdMap(), and SegmentedColorGenerator().


Member Data Documentation

const unsigned int SegmentedColorGenerator::BITS_U = 6 [static, protected]

bits of discretization for U channel in the threshold map

Definition at line 139 of file SegmentedColorGenerator.h.

Referenced by calcImage(), and loadThresholdMap().

const unsigned int SegmentedColorGenerator::BITS_V = 6 [static, protected]

bits of discretization for V channel in the threshold map

Definition at line 140 of file SegmentedColorGenerator.h.

Referenced by calcImage(), and loadThresholdMap().

const unsigned int SegmentedColorGenerator::BITS_Y = 4 [static, protected]

bits of discretization for Y channel in the threshold map

Definition at line 138 of file SegmentedColorGenerator.h.

Referenced by calcImage(), and loadThresholdMap().

look up color indexes corresponding to names

Definition at line 162 of file SegmentedColorGenerator.h.

Referenced by doEvent(), getColorIndex(), loadColorInfo(), and ~SegmentedColorGenerator().

array of available colors

Definition at line 161 of file SegmentedColorGenerator.h.

Referenced by decodeColorsInc(), encodeColorsInc(), getColors(), and loadColorInfo().

const unsigned int SegmentedColorGenerator::MAX_COLORS = 20 [static, protected]

maximum number of different colors that can be segmented

Definition at line 144 of file SegmentedColorGenerator.h.

Referenced by loadColorInfo().

const unsigned int SegmentedColorGenerator::NUM_U = 1 << BITS_U [static, protected]

levels of discretization for U channel in the threshold map

Definition at line 142 of file SegmentedColorGenerator.h.

Referenced by loadColorInfo(), and loadThresholdMap().

const unsigned int SegmentedColorGenerator::NUM_V = 1 << BITS_V [static, protected]

levels of discretization for V channel in the threshold map

Definition at line 143 of file SegmentedColorGenerator.h.

Referenced by loadColorInfo(), and loadThresholdMap().

const unsigned int SegmentedColorGenerator::NUM_Y = 1 << BITS_Y [static, protected]

levels of discretization for Y channel in the threshold map

Definition at line 141 of file SegmentedColorGenerator.h.

Referenced by loadColorInfo(), and loadThresholdMap().

unsigned int SegmentedColorGenerator::numColors [protected]
unsigned int SegmentedColorGenerator::srcUChan [protected]

the channel of the source's U channel

Definition at line 154 of file SegmentedColorGenerator.h.

Referenced by calcImage().

unsigned int SegmentedColorGenerator::srcVChan [protected]

the channel of the source's V channel

Definition at line 155 of file SegmentedColorGenerator.h.

Referenced by calcImage().

unsigned int SegmentedColorGenerator::srcYChan [protected]

the channel of the source's Y channel

Definition at line 153 of file SegmentedColorGenerator.h.

Referenced by calcImage().

std::vector<std::string> SegmentedColorGenerator::tmapNames [protected]

filename of each tmap;

Definition at line 158 of file SegmentedColorGenerator.h.

Referenced by loadColorInfo(), and loadThresholdMap().

std::vector<cmap_t*> SegmentedColorGenerator::tmaps [protected]

list of threshold maps so you can segment the same source different ways

Definition at line 157 of file SegmentedColorGenerator.h.

Referenced by calcImage(), loadColorInfo(), loadThresholdMap(), setNumImages(), and ~SegmentedColorGenerator().


The documentation for this class was generated from the following files:

Tekkotsu v5.1CVS
Generated Mon May 9 04:59:16 2016 by Doxygen 1.6.3