bicotiHistogramEqualizator


 
 

Clases

bicotiHistogramEqualizator

     Templates Clases

CoordType
ColorType
PixelType


class bicotiHistogramEqualizator < class CoordType, class ColorType,
                                                                            class PixelType = ColorType >



 Public Methods

bicotiHistogramEqualizator(  bicotiPropertyHistogramExtended< CoordType, ColorType, PixelType > *,
                                                                                     const vector< bicotiPixelOperatorUnary< ColorType > * >& )
void operator( ) ( )



bicotiHistogramEqualizator (  bicotiPropertyHistogramExtended< CoordType,
                ColorType,  PixelType > *, const vector< bicotiPixelOperatorUnary< ColorType > * >& )

    Constructor, los parámetros que le paso son :
           -- Un puntero a una PropertyHistogram, que es la que se equaliza.
           -- Un vector de punteros a PixelOperatorUnary , cada uno de ellos se aplicará a cada uno de los
               Dexels de la propiedad.

    Es decir si por ejemplo la PropertyHistogram tiene 3 DexelHistogram, el vector debe contener 3 punteros a operadores, cada uno asociado a un dexel. Si las cantidades no coinciden, el constructor tirará una exepción.

Por ejemplo ,si quiero equalizar un histograma de una imagen 2D de enteros, la propiedad tendrá un solo Dexel, en este caso el vector debe tener un solo operador.

        CoordType = bicotiCoordinate2D< INTEGER >
        ColorType = int
        PixelType = int

Primero creo el operador, por ejemplo para equalización uniforme.

        typedef bicotiCoordinate2D< REAL > CooT;
        typedef int ColT;
        typedef int PixT;

        bicotiPixelOperatorUnary< ColT > * ptr_op;
        ptr_op = new  bicotiPixelOperatorUnaryUniform< ColT >;

Ahora creo el vector, con un solo operador :

        vector< bicotiPixelOperatorUnary< ColT > * > vect(1);
        vect[0] = ptr_op;

Ahora puedo crear el equalizador, suponiendo que tengo un puntero a la propiedad :

        bicotiHistogramEqualizator< CooT , ColT >  equ( ptr_prop_hist , vect )

En este caso no es necesario especificar el tercer template, se toma por defecto.
 

Pero si quiero uniformizar el histograma de una imagen 2D a colores ( RGB de enteros por ejemplo ), la Property tendrá tres Dexels, uno para cada color.
En este caso :
        CoordType = bicotiCoordinate2D< INTEGER >
        ColorType = int
        PixelType = bicotiRGB< int >

Primero creo el operador :

        typedef bicotiCoordinate2D< REAL > CooT;
        typedef int ColT;
        typedef bicotiRGB< int > PixT;

        bicotiPixelOperatorUnary< ColT > * ptr_op;
        ptr_op = new  bicotiPixelOperatorUnaryUniform< ColT >;

Ahora creo el vector, con 3 operadores, los mismos en este caso :

        vector< bicotiPixelOperatorUnary< ColT > * > vect(3);
        vect[0] = ptr_op;
        vect[1] = ptr_op;
        vect[2] = ptr_op;

Podría haber tomado arbitrariamente un operador distinto para cada campo.
Ahora puedo crear el equalizador :

        bicotiHistogramEqualizator< CooT , ColT , PixT  >  equ( ptr_prop_hist , vect )
 



  void operator( ) ( )

    Esta función hace correr la equalización.
    Se recorre cada uno de los Dexels, se le aplica el operador correspondiente a cada nodo de la lista ( donde hay un valor de atributo determinado ) por lo que el DexelHistogram quedará con valores nuevos. Luego se actualiza la implementación para que se reflejen los cambios.

Cuando se equaliza el histograma, los cambios se reflejan automáticamente en la imagen.