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 :