CBlob Class Reference

Classe que representa un blob, ent� com un conjunt de pixels del mateix color contigus en una imatge binaritzada. More...

#include <Blob.h>

Data Structures

struct  comparaCvPoint
 Helper class to compare two CvPoints (for sorting in FillBlob). More...

Public Types

typedef std::vector< CvPoint > vectorPunts
 Point datatype for plotting (FillBlob).

Public Member Functions

 CBlob ()
 Constructor est�dard Standard constructor.
 CBlob (const CBlob &src)
 Constructor de c�ia Copy constructor.
 CBlob (const CBlob *src)
 ~CBlob ()
 Destructor est�dard Standard Destructor.
CBloboperator= (const CBlob &src)
 Operador d'assignaci� Assigment operator.
bool IsEmpty () const
 Indica si el blob est�buit ( no t�cap info associada ) Shows if the blob has associated information.
void ClearEdges ()
 Neteja les cantonades del blob Clears the edges of the blob.
void CopyEdges (CBlob &destination) const
 Copia les cantonades del blob a un altre (les afegeix al dest� Adds the blob edges to another blob.
bool GetConvexHull (CvSeq **dst) const
 Retorna el poligon convex del blob Calculates the convex hull of the blob.
CvBox2D GetEllipse () const
 Calcula l'elipse que s'adapta als v�texs del blob Fits an ellipse to the blob edges.
void FillBlob (IplImage *imatge, CvScalar color, int offsetX=0, int offsetY=0) const
 Pinta l'interior d'un blob d'un color determinat Paints the blob in an image.
int Label () const
 Funcions GET sobre els valors dels blobs Get functions.
int Parent () const
double Area () const
double Perimeter () const
double ExternPerimeter () const
int Exterior () const
double Mean () const
double StdDev () const
double MinX () const
double MinY () const
double MaxX () const
double MaxY () const
CvSeq * Edges () const
double SumX () const
double SumY () const
double SumXX () const
double SumYY () const
double SumXY () const

Data Fields

int etiqueta
 etiqueta del blob label of the blob
int exterior
 flag per indicar si es exterior o no true for extern blobs
double area
 area del blob Blob area
double perimeter
 perimetre del blob Blob perimeter
double externPerimeter
 quantitat de perimetre del blob extern amount of blob perimeter which is exterior
int parent
 etiqueta del blob pare label of the parent blob
double sumx
 moments
double sumy
double sumxx
double sumyy
double sumxy
double minx
 Bounding rect.
double maxx
double miny
double maxy
double mean
 mitjana mean of the grey scale values of the blob pixels
double stddev
 desviaci�standard standard deviation of the grey scale values of the blob pixels
CvMemStorage * m_storage
 �ea de mem�ia on es desaran els punts de contorn del blob storage which contains the edges of the blob
CvSeq * edges
 Sequ�cia de punts del contorn del blob Sequence with the edges of the blob.

Detailed Description

Classe que representa un blob, ent� com un conjunt de pixels del mateix color contigus en una imatge binaritzada.

Class to represent a blob, a group of connected pixels in a binary image

Definition at line 43 of file Blob.h.


Constructor & Destructor Documentation

CBlob::CBlob (  ) 

Constructor est�dard Standard constructor.

  • FUNCI� CBlob
  • FUNCIONALITAT: Constructor est�dard
  • PAR�ETRES:
  • RESULTAT:
    • inicialitzaci�de totes les variables internes i de l'storage i la sequencia per a les cantonades del blob
  • RESTRICCIONS:
  • AUTOR: Ricard Borr�
  • DATA DE CREACI� 25-05-2005.
  • MODIFICACI� Data. Autor. Descripci�
  • FUNCTION: CBlob
  • FUNCTIONALITY: Standard constructor
  • PARAMETERS:
  • RESULT:
    • memory allocation for the blob edges and initialization of member variables
  • RESTRICTIONS:
  • AUTHOR: Ricard Borr�
  • CREATION DATE: 25-05-2005.
  • MODIFICATION: Date. Author. Description.

Definition at line 45 of file Blob.cpp.

References area, edges, etiqueta, exterior, externPerimeter, m_storage, mean, minx, parent, perimeter, stddev, and sumx.

00046 {
00047         etiqueta = -1;          // Flag indicates null region
00048         exterior = 0;
00049         area = 0.0f;
00050         perimeter = 0.0f;
00051         parent = -1;
00052         minx = LONG_MAX;
00053         maxx = 0;
00054         miny = LONG_MAX;
00055         maxy = 0;
00056         sumx = 0;
00057         sumy = 0;
00058         sumxx = 0;
00059         sumyy = 0;
00060         sumxy = 0;
00061         mean = 0;
00062         stddev = 0;
00063         externPerimeter = 0;
00064 
00065         m_storage = cvCreateMemStorage(0);
00066         edges = cvCreateSeq( CV_SEQ_KIND_GENERIC|CV_32SC2,
00067                                          sizeof(CvContour),
00068                                          sizeof(CvPoint),m_storage);
00069 }

CBlob::CBlob ( const CBlob src  ) 

Constructor de c�ia Copy constructor.

  • FUNCI� CBlob
  • FUNCIONALITAT: Constructor de c�ia
  • PAR�ETRES:
  • RESULTAT:
  • RESTRICCIONS:
  • AUTOR: Ricard Borr�
  • DATA DE CREACI� 25-05-2005.
  • MODIFICACI� Data. Autor. Descripci�
  • FUNCTION: CBlob
  • FUNCTIONALITY: Copy constructor
  • PARAMETERS:
  • RESULT:
  • RESTRICTIONS:
  • AUTHOR: Ricard Borr�
  • CREATION DATE: 25-05-2005.
  • MODIFICATION: Date. Author. Description.

Definition at line 91 of file Blob.cpp.

References area, edges, etiqueta, exterior, externPerimeter, m_storage, mean, minx, parent, perimeter, stddev, and sumx.

00092 {
00093         // copiem les propietats del blob origen a l'actual
00094         etiqueta = src.etiqueta;                
00095         exterior = src.exterior;
00096         area = src.Area();
00097         perimeter = src.Perimeter();
00098         parent = src.parent;
00099         minx = src.minx;
00100         maxx = src.maxx;
00101         miny = src.miny;
00102         maxy = src.maxy;
00103         sumx = src.sumx;
00104         sumy = src.sumy;
00105         sumxx = src.sumxx;
00106         sumyy = src.sumyy;
00107         sumxy = src.sumxy;
00108         mean = src.mean;
00109         stddev = src.stddev;
00110         externPerimeter = src.externPerimeter;
00111 
00112         // copiem els edges del blob origen a l'actual
00113         CvSeqReader reader;
00114         CvSeqWriter writer;
00115         CvPoint edgeactual;
00116         
00117         // creem una sequencia buida per als edges
00118         m_storage = cvCreateMemStorage(0);
00119         edges = cvCreateSeq( CV_SEQ_KIND_GENERIC|CV_32SC2,
00120                                                            sizeof(CvContour),
00121                                                            sizeof(CvPoint),m_storage);
00122 
00123         cvStartReadSeq( src.Edges(), &reader);
00124         cvStartAppendToSeq( edges, &writer );
00125 
00126         for( int i=0; i< src.Edges()->total; i++)
00127         {
00128                 CV_READ_SEQ_ELEM( edgeactual ,reader);
00129                 CV_WRITE_SEQ_ELEM( edgeactual , writer );
00130         }
00131         
00132         cvEndWriteSeq( &writer );
00133 }

CBlob::~CBlob (  ) 

Destructor est�dard Standard Destructor.

  • FUNCI� ~CBlob
  • FUNCIONALITAT: Destructor est�dard
  • PAR�ETRES:
  • RESULTAT:
  • RESTRICCIONS:
  • AUTOR: Ricard Borr�
  • DATA DE CREACI� 25-05-2005.
  • MODIFICACI� Data. Autor. Descripci�
  • FUNCTION: CBlob
  • FUNCTIONALITY: Standard destructor
  • PARAMETERS:
  • RESULT:
  • RESTRICTIONS:
  • AUTHOR: Ricard Borr�
  • CREATION DATE: 25-05-2005.
  • MODIFICATION: Date. Author. Description.

Definition at line 198 of file Blob.cpp.

References edges, and m_storage.

00199 {
00200         // Eliminar v�texs del blob 
00201         cvClearSeq(edges);
00202         // i la zona de mem�ia on s�
00203         cvReleaseMemStorage( &m_storage );
00204 }


Member Function Documentation

void CBlob::ClearEdges (  ) 

Neteja les cantonades del blob Clears the edges of the blob.

  • FUNCI� ClearEdges
  • FUNCIONALITAT: Elimina els v�texs del blob
  • PAR�ETRES:
  • RESULTAT:
  • RESTRICCIONS:
  • AUTOR: Ricard Borr�
  • DATA DE CREACI� 25-05-2005.
  • MODIFICACI� Data. Autor. Descripci�
  • FUNCTION: ClearEdges
  • FUNCTIONALITY: Delete current blob edges
  • PARAMETERS:
  • RESULT:
  • RESTRICTIONS:
  • AUTHOR: Ricard Borr�
  • CREATION DATE: 25-05-2005.
  • MODIFICATION: Date. Author. Description.

Definition at line 430 of file Blob.cpp.

References edges.

00431 {
00432         // Eliminar v�texs del blob eliminat
00433         cvClearSeq( edges );
00434 }

void CBlob::CopyEdges ( CBlob destination  )  const

Copia les cantonades del blob a un altre (les afegeix al dest� Adds the blob edges to another blob.

  • FUNCI� CopyEdges
  • FUNCIONALITAT: Afegeix els v�texs del blob al blob destination
  • PAR�ETRES:
    • destination: blob al que volem afegir els v�texs
  • RESULTAT:
  • RESTRICCIONS:
  • AUTOR: Ricard Borr�
  • DATA DE CREACI� 25-05-2005.
  • MODIFICACI� Data. Autor. Descripci�
  • FUNCTION: CopyEdges
  • FUNCTIONALITY: Adds the blob edges to destination
  • PARAMETERS:
    • destination: where to add the edges
  • RESULT:
  • RESTRICTIONS:
  • AUTHOR: Ricard Borr�
  • CREATION DATE: 25-05-2005.
  • MODIFICATION: Date. Author. Description.

Definition at line 392 of file Blob.cpp.

References edges.

00393 {
00394         CvSeqReader reader;
00395         CvSeqWriter writer;
00396         CvPoint edgeactual;
00397                 
00398         cvStartReadSeq( edges, &reader);
00399         cvStartAppendToSeq( destination.Edges(), &writer );
00400 
00401         for( int i=0; i<edges->total; i++)
00402         {
00403                 CV_READ_SEQ_ELEM( edgeactual ,reader);
00404                 CV_WRITE_SEQ_ELEM( edgeactual , writer );
00405         }
00406         
00407         cvEndWriteSeq( &writer );
00408 }

void CBlob::FillBlob ( IplImage *  imatge,
CvScalar  color,
int  offsetX = 0,
int  offsetY = 0 
) const

Pinta l'interior d'un blob d'un color determinat Paints the blob in an image.

  • FUNCI� FillBlob
  • FUNCIONALITAT: Pinta l'interior d'un blob amb el color especificat
  • PAR�ETRES:
    • imatge: imatge on es vol pintar el el blob
    • color: color amb que es vol pintar el blob
  • RESULTAT:
    • retorna la imatge d'entrada amb el blob pintat
  • RESTRICCIONS:
  • AUTOR:
  • Ricard Borr�
  • DATA DE CREACI� 25-05-2005.
  • MODIFICACI� Data. Autor. Descripci�
  • FUNCTION: FillBlob
  • FUNCTIONALITY:
    • Fills the blob with a specified colour
  • PARAMETERS:
    • imatge: where to paint
    • color: colour to paint the blob
  • RESULT:
    • modifies input image and returns the seed point used to fill the blob
  • RESTRICTIONS:
  • AUTHOR: Ricard Borr�
  • CREATION DATE: 25-05-2005.
  • MODIFICATION: Date. Author. Description.

Definition at line 312 of file Blob.cpp.

References edges.

Referenced by iCub::contrib::ClusterBlob::draw_clusters().

00313 {
00314         
00315         //verifiquem que existeixi el blob i que tingui cantonades
00316         if( edges == NULL || edges->total == 0 ) return;
00317         
00318         CvPoint edgeactual, pt1, pt2;
00319         CvSeqReader reader;
00320         vectorPunts vectorEdges = vectorPunts( edges->total );
00321         vectorPunts::iterator itEdges, itEdgesSeguent;
00322         bool dinsBlob;
00323         int yActual;
00324         
00325         // passem els punts del blob a un vector de punts de les STL
00326         cvStartReadSeq( edges, &reader);
00327         itEdges = vectorEdges.begin();
00328         while( itEdges != vectorEdges.end() )
00329         {
00330                 CV_READ_SEQ_ELEM( edgeactual ,reader);
00331                 *itEdges = edgeactual;
00332                 itEdges++;
00333         }
00334         // ordenem el vector per les Y's i les X's d'esquerra a dreta
00335         std::sort( vectorEdges.begin(), vectorEdges.end(), comparaCvPoint() );
00336 
00337         // recorrem el vector ordenat i fem linies entre punts consecutius
00338         itEdges = vectorEdges.begin();
00339         itEdgesSeguent = vectorEdges.begin() + 1;
00340         dinsBlob = true;
00341         while( itEdges != (vectorEdges.end() - 1))
00342         {
00343                 yActual = (*itEdges).y;
00344 
00345                 if( ( (*itEdges).x != (*itEdgesSeguent).x ) &&
00346                         ( (*itEdgesSeguent).y == yActual )
00347                   )
00348                 {
00349                         if( dinsBlob )
00350                         {
00351                                 pt1 = *itEdges;
00352                                 pt1.x += offsetX;
00353                                 pt1.y += offsetY;
00354 
00355                                 pt2 = *itEdgesSeguent;
00356                                 pt2.x += offsetX;
00357                                 pt2.y += offsetY;
00358 
00359                                 cvLine( imatge, pt1, pt2, color );
00360                         }
00361                         dinsBlob =! dinsBlob;
00362                 }
00363                 itEdges++;
00364                 itEdgesSeguent++;
00365                 if( (*itEdges).y != yActual ) dinsBlob = true;
00366         }
00367         vectorEdges.clear();
00368 }

bool CBlob::GetConvexHull ( CvSeq **  dst  )  const

Retorna el poligon convex del blob Calculates the convex hull of the blob.

  • FUNCI� GetConvexHull
  • FUNCIONALITAT: Retorna el poligon convex del blob
  • PAR�ETRES:
    • dst: sequencia on desarem el resultat (no ha d'estar inicialitzada)
  • RESULTAT:
    • true si tot ha anat b�
  • RESTRICCIONS:
  • AUTOR: Ricard Borr�
  • DATA DE CREACI� 25-05-2005.
  • MODIFICACI� Data. Autor. Descripci�
  • FUNCTION: GetConvexHull
  • FUNCTIONALITY: Calculates the convex hull polygon of the blob
  • PARAMETERS:
    • dst: where to store the result
  • RESULT:
    • true if no error ocurred
  • RESTRICTIONS:
  • AUTHOR: Ricard Borr�
  • CREATION DATE: 25-05-2005.
  • MODIFICATION: Date. Author. Description.

Definition at line 460 of file Blob.cpp.

References edges.

00461 {
00462         if( edges != NULL && edges->total > 0)
00463         {
00464                 *dst = cvConvexHull2( edges, 0, CV_CLOCKWISE, 0 );
00465                 return true;
00466         }
00467         return false;
00468 }

CvBox2D CBlob::GetEllipse (  )  const

Calcula l'elipse que s'adapta als v�texs del blob Fits an ellipse to the blob edges.

  • FUNCI� GetEllipse
  • FUNCIONALITAT: Retorna l'ellipse que s'ajusta millor a les cantonades del blob
  • PAR�ETRES:
  • RESULTAT:
    • estructura amb l'ellipse
  • RESTRICCIONS:
  • AUTOR: Ricard Borr�
  • DATA DE CREACI� 25-05-2005.
  • MODIFICACI� Data. Autor. Descripci�
  • FUNCTION: GetEllipse
  • FUNCTIONALITY: Calculates the ellipse that best fits the edges of the blob
  • PARAMETERS:
  • RESULT:
    • CvBox2D struct with the calculated ellipse
  • RESTRICTIONS:
  • AUTHOR: Ricard Borr�
  • CREATION DATE: 25-05-2005.
  • MODIFICATION: Date. Author. Description.

Definition at line 492 of file Blob.cpp.

References edges.

Referenced by CBlobGetAxisRatio::operator()(), CBlobGetOrientation::operator()(), CBlobGetMinorAxisLength::operator()(), CBlobGetAreaElipseRatio::operator()(), and CBlobGetMajorAxisLength::operator()().

00493 {
00494         CvBox2D elipse;
00495         // necessitem 6 punts per calcular l'elipse
00496         if( edges != NULL && edges->total > 6)
00497         {
00498                 elipse = cvFitEllipse2( edges );
00499         }
00500         else
00501         {
00502                 elipse.center.x = 0.0;
00503                 elipse.center.y = 0.0;
00504                 elipse.size.width = 0.0;
00505                 elipse.size.height = 0.0;
00506                 elipse.angle = 0.0;
00507         }
00508         return elipse;
00509 }

CBlob & CBlob::operator= ( const CBlob src  ) 

Operador d'assignaci� Assigment operator.

  • FUNCI� operator=
  • FUNCIONALITAT: Operador d'assignaci�
  • PAR�ETRES:
    • src: blob a assignar a l'actual
  • RESULTAT:
    • Substitueix el blob actual per el src
  • RESTRICCIONS:
  • AUTOR: Ricard Borr�
  • DATA DE CREACI� 25-05-2005.
  • MODIFICACI� Data. Autor. Descripci�
  • FUNCTION: Assigment operator
  • FUNCTIONALITY: Assigns a blob to the current
  • PARAMETERS:
    • src: blob to assign
  • RESULT:
    • the current blob is replaced by the src blob
  • RESTRICTIONS:
  • AUTHOR: Ricard Borr�
  • CREATION DATE: 25-05-2005.
  • MODIFICATION: Date. Author. Description.

Definition at line 230 of file Blob.cpp.

References area, edges, etiqueta, exterior, externPerimeter, m_storage, mean, minx, parent, perimeter, stddev, and sumx.

00231 {
00232         // si ja s� el mateix, no cal fer res
00233         if (this != &src)
00234         {
00235                 // Eliminar v�texs del blob 
00236                 cvClearSeq(edges);
00237                 // i la zona de mem�ia on s�
00238                 cvReleaseMemStorage( &m_storage );
00239 
00240                 // creem una sequencia buida per als edges
00241                 m_storage = cvCreateMemStorage(0);
00242                 edges = cvCreateSeq( CV_SEQ_KIND_GENERIC|CV_32SC2,
00243                                                                    sizeof(CvContour),
00244                                                                    sizeof(CvPoint),m_storage);
00245 
00246                 // copiem les propietats del blob origen a l'actual
00247                 etiqueta = src.etiqueta;                
00248                 exterior = src.exterior;
00249                 area = src.Area();
00250                 perimeter = src.Perimeter();
00251                 parent = src.parent;
00252                 minx = src.minx;
00253                 maxx = src.maxx;
00254                 miny = src.miny;
00255                 maxy = src.maxy;
00256                 sumx = src.sumx;
00257                 sumy = src.sumy;
00258                 sumxx = src.sumxx;
00259                 sumyy = src.sumyy;
00260                 sumxy = src.sumxy;
00261                 mean = src.mean;
00262                 stddev = src.stddev;
00263                 externPerimeter = src.externPerimeter;
00264 
00265                 // copiem els edges del blob origen a l'actual
00266                 CvSeqReader reader;
00267                 CvSeqWriter writer;
00268                 CvPoint edgeactual;
00269                 
00270                 cvStartReadSeq( src.Edges(), &reader);
00271                 cvStartAppendToSeq( edges, &writer );
00272 
00273                 for( int i=0; i< src.Edges()->total; i++)
00274                 {
00275                         CV_READ_SEQ_ELEM( edgeactual ,reader);
00276                         CV_WRITE_SEQ_ELEM( edgeactual , writer );
00277                 }
00278                 
00279                 cvEndWriteSeq( &writer );
00280         }
00281         return *this;
00282 }


The documentation for this class was generated from the following files:
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Friends Defines

Generated on Mon Mar 15 00:29:15 2010 for iCub by  doxygen 1.6.1