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. | |
| CBlob & | operator= (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. | |
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.
| CBlob::CBlob | ( | ) |
Constructor est�dard Standard constructor.
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.
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.
| void CBlob::ClearEdges | ( | ) |
Neteja les cantonades del blob Clears the edges of the blob.
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.
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.
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.
Definition at line 460 of file Blob.cpp.
References edges.
| CvBox2D CBlob::GetEllipse | ( | ) | const |
Calcula l'elipse que s'adapta als v�texs del blob Fits an ellipse to the blob edges.
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 }
Operador d'assignaci� Assigment operator.
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 }
1.6.1