bicotiDexelLabeling

bicotiDexel
             bicotiDexelRegion
             bicotiDexelLabeling
             bicotiDexelHistogram
             bicotiDexelStatistical
             bicotiDexelCurve
                         bicotiDexelCurveOpen
                         bicotiDexelCurveClosed
 


Para ver una descripción de cada clase ir a:
 


class bicotiDexelLabeling< CoordType, PixelType >



Comentarios Generales:

    Uno pensaría que en CoordType se podría poner cualquier Coordinate, no es así el algoritmo esta pensado para que se trabaje con coordenadas enteras, o sea, para bicotiCoordiante2D< INTEGER > o bicotiCoordinate3D< INTEGER >, esto es porque las coordenadas hacen referencia a ubicaciones en la implementación de la imagen.



Public Methods

bicotiDexelLabeling( bicotiImageImplementation< PixelType > *,
                                           bicotiPixelLabelingCriterion< PixelType > * = NULL,
                                           bicotiConnectivityLabelingStrategy * = NULL )

void UpdateImageImplementation( )
void ModifyPixels( vector< bicotiPixelOperatorUnary< PixelType > * > )

void UpdateDexel( )
void SetConnectivityStrategy( bicotiConnectivityLabelingStrategy * )
void SetPixelCriterion( bicotiPixelLabelingCriterion< PixelType > * )

unsigned GetRegionsNumber( )
bicotiDexelRegion< CoordType, PixelType >& GetRegion( unsigned )



bicotiDexelLabeling( bicotiImageImplementation< PixelType > *,
                                           bicotiPixelLabelingCriterion< PixelType > * = NULL,
                                           bicotiConnectivityLabelingStrategy * = NULL )

    Constructor del dexel, como parámetros recibe:

Esto requiere de un poco de explicación, supongamos que quiero hacer un labeling de una imagen 2D, de 256 niveles de grises y con conectividad 4 vecinos. Para que funcione el algoritmo y obtenga una region por etiqueta, hay que hacer:

1.    CoordType = bicotiCoordinate2D< INTEGER >
2.    bicotiImageImplementation< PixelType > * = bicotiImageImplementation2D< PixelType >*
3.    bicotiPixelLabelingCriterion< PixelType >* = bicotiPixelLabelingCriterionSingleRange< PixelType >*
4.    bicotiConnectivityLabelingStrategy* = bicotiConnectivityLabelingStrategy2D4N*

    Esto quiere decir que hay que saber combinar bien los objetos, y con estas combinaciones se logran diferentes comportamientos, por ejmplo si la imagen fuera de RGB y no de grises, alcanza con cambiar el objeto bicotiPixelLabelingCriterionSingleRange< PixelType >* por
bicotiPixelLabeligCriterionVectorialRange< PixelType>* .



void UpdateImageImplementation( )

    Con la función ModifyPixels, se puede modificar los valores de pixel de los pixels etiquetados, con esta función se actualiza los cambios en la implementación.



void ModifyPixels( vector< bicotiPixelOperatorUnary< PixelType > * > )

    Mediante un vector de bicotiPixelOperatorUnary< PixelType >*, modifico cada una de las "regiones" con diferentes etiquetas, hay que tener en cuenta que la dimensión del vector debe ser igual a cantidad de etiquetas. Luego se actualiza la implemetación llamando a UpdateImageImplementation( ).



void UpdateDexel( )

   Supongamos que queremos etiquetar los pixel con nivel de gris entre [ 0, 35], [ 100, 150] y [ 212, 245]. Bastaría con cambiar el criterio de pixel y recalcular el dexel, esta función es la que recalcula el dexel.



void SetConnectivityStrategy( bicotiConnectivityLabelingStrategy * )

    Cargo una nueva estrategia de conectividad( bicotiConnectivityLabelingStrategy ), por ejemplo cambio
    de 4N a 8N.



void SetPixelCriterion( bicotiPixelLabelingCriterion< PixelType > * )

    Cargo un nuevo criterio de etiquetado de pixel( bicotiPixelLabelingCriterion ).



unsigned GetRegionsNumber( )

    Retorna el numero de etiquetas distintas encontradas.



bicotiDexelRegion< CoordType, PixelType >& GetRegion( unsigned )

    Acceso a las regiones encontradas, se retorna como bicotiDexelRegion, el indice tiene sentido
   entre 0 ... GetRegionsNumber( ).