1 - Componentes Básicos


1.2.2 - Operadores de Pixel en Atributos

Dado un pixel, que puede ser un tipo básico o uno estructurado definido por el usuario definimos un
atributo del pixel como alguna propiedad del mismo.
Es decir , suponemos que existe una función f tal que :

                     Atributo = f ( Pixel )

Por ejemplo el nivel de gris es un caso particular de atributo, cuando el pixel es un int o char es el propio
valor, pero cuando es un flotante habrá que redondearlo y cuando es un RGB deberá tomarse un
promedio ponderado entre los tres campos.
Podría tomarse como atributo de un pixel vectorial, una combinación lineal de sus campos, por ejemplo en
RGB podría tomarse alguno de los colores como atributo.
En principio el atributo de un pixel podría ser cualquier propiedad que a uno se le ocurra.

Obs : El tipo de retorno es un template, AttributeType, que en principio debe ser un tipo básico ( nativo del lenguaje ).

La función que lleva un pixel en un atributo, debe ser invertible, es decir que debe darse alguna manera de modificar el atributo y hallar el pixel que le corresponda. Aunque analíticamente la función no pueda inveritrse. Un ejemplo de esto es cuando tenemos un pixel RGB y tomamos el campo rojo como atributo. Si modificamos el valor del rojo, existen infinitos pixeles RGB con dicho valor, pero en términos prácticos tratamos de no modificar los demás campos.
La función inversa es de la forma :

                     Pixel = g ( Atributo , Pixel )

Retorna un pixel cuyo atributo es el que le paso, pero como me pasan el pixel original tengo información adicional. En el caso del ejemplo tomo el pixel que me pasan, le modifico el rojo al color que me indican y devuelvo el pixel resultante.

La necesidad de esta función surge de los algoritmos que ecualizan el histograma de una imagen, modificando los atributos de los pixeles y no los pixeles mismos. En estos algoritmos para modificar la imagen hay que tener una forma de ir del atributo al pixel.

Ver DexelHistogram.

Los selectores de atributos implementados actualmente son los siguientes, como se indica el la estructura jerárquica de la Figura 1.2.2.

        - bicotiPixelAttributeSelector
            - bicotiPixelAttributeSelectorNone
            - bicotiPixelAttributeSelectorRound
            - bicotiPixelAttributeSelectorColorRed
            - bicotiPixelAttributeSelectorColorGreen
            - bicotiPixelAttributeSelectorColorBlue
            - bicotiPixelAttributeSelectorColorVectorial

Figura 1.2.2

    Todos los selectors de atributos heradan de una clase abstracta llamada bicotiPixelAttributeSelector. Existe un template en estos objetos, donde se pasa como argumento el pixel que se esta usando y el tipo de atributo que se desea seleccionar.La única restricción para estos objetos, es que tengan definida las funciones:

AttributeType operator( ) ( PixelType )

        Esta es la que se invoca en los algoritmos donde hay que pasar un bicotiPixelAttributSelector,
        como parámetro.

PixelType Inverse( PixelType , AttributeType  )
 

  Daremos la descripción de la clase bicotiPixelAttributeSelector.


class bicotiPixelAttributeSelector< class AttributeType,
                                                            class PixelType = AttributeType >



Public Methods

virtual AttributeType operator( ) ( PixelType )=0

virtual PixelType Inverse( PixelType , AttributeType  )=0



Véase la especificación detallada de cada clase en: