4 - Algoritmos


4.6.1 - Ecualización de Histograma

    La ecualización de un histograma se hace por parte del objeto bicotiHistogramEqualizator, el que opera sobre un bicotiPropertyHistogram, que a su vez tiene un conjunto de bicotiDexelHistogram, uno para cada campo ( si es una imagen monocromática es uno solo ). Cada uno de estos dexels es una lista de atributos de pixel. La ecualización consiste en recorrer cada Dexel, aplicar a cada nodo de la lista un oprador que transforma un atributo en otro ( bicotiPixelOperatorUnary ) y luego cambiar en la imagen todos los pixeles que tengan dicho atributo de forma que tengan el nuevo atributo calculado.
Se puede pasar un operador distinto para cada Dexel de forma de ecualizar cada campo en forma diferente.

    Un ejemplo de ecualización de histogrma es la segmentación.
    Supongamos que tenemos una imagen 2D de enteros, donde el atributo es el mismo valor del pixel
    ( el histograma más común )

    Primero definimos unos tipos :

        typedef bicotiCoordinate2D< REAL > CooT;   // Coordenadas que guarda el Dexel
        typedef int ColT;  // Tipo del atributo
        typedef int PixT;  // Tipo del Pixel

    Creo el operador de segmentación

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

    Ahora creo un 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 )

    Para correr el algoritmo basta con hacer :

        equ( );

    Todo esto puede hacerse más sencillamente usando la fachada de Property.

Ver detalles sobre la clase en :

bicotiHistogramEqualizator