Medidas de Caracterización

Las operaciones de caracterización de imágenes computan datos a partir de una imagen de entrada, la imagen caracterizada.

Dentro de Cool Imaging, todo dato de caracterización computado a partir de una imagen es conocido como "medida de caracterización". Conceptualmente, una medida de caracterización no es más que una estructura que almacena valores numéricos. Así por ejemplo, una medida de caracterización podría representar la media de los píxeles de cada banda de una imagen. Esta medida de caracterización estaría formada por tantos valores numéricos como bandas tuviera la imagen, cada valor numérico representando la media de los píxeles de cada banda. Otra medida de caracterización podría representar la desviación típica calculada sobre todos los píxeles de todas las bandas de la imagen. En este caso, la medida de caracterización consistiría en un único valor numérico, a saber, la desviación típica.

Una medida de caracterización está representada por la clase abstracta MC. Todas las clases que representan medidas de caracterización heredan de la clase MC.

Como hemos visto, la complejidad de una medida de caracterización puede variar. Volvamos al ejemplo de la medida de caracterización que calculaba la media de los píxeles de cada una de las bandas de la imagen. Supongamos que la imagen sobre la que se calcula dicha medida consta de tres bandas. En ese caso, la medida estaría compuesta por tres valores numéricos, las medias de los valores de los píxeles de cada banda. Dicha medida de caracterización podría representarse como {X, Y, Z}, donde X, Y y Z serían los valores de las medias. Un ejemplo concreto podría ser {32.4, 234.1, 109.47}. Por otro lado, la medida de caracterización que calcula la desviación típica de los píxeles de todas las bandas de la imagen constaría de, simplemente, un valor numérico. Un ejemplo de dicha medida podría ser 10.45.

Se puede apreciar que, en efecto, la estructura de una medida de caracterización puede variar en complejidad. La clase MC da soporte para construir medidas de caracterización tan complejas como se quiera, siempre siguiendo una filosofía vectorial.

La clase MC tiene dos clases hijas principales, a saber, la clase MCNumerica y la clase MCArray.

La clase MCNumerica representa toda medida de caracterización que puede ser representada como un único valor numérico. Por ejemplo, la medida de caracterización que calcula la desviación típica de todas las bandas de la imagen sería una MCNumerica, ya que ésta puede ser representada mediante un único valor numérico. La clase MCNumerica es una clase abstracta. Sus clases hijas son MCByte, MCDouble, MCFloat, MCInteger, MCLong y MCShort. Cada una de estas subclases representa una medida de caracterización numérica cuyo valor numérico consta de un tipo concreto. Por ejemplo, el valor numérico de la clase MCDouble es de tipo Double, mientras que el valor numérico de la clase MCLong es de tipo Long.

La clase MCNumerica es la clase más básica de las que representan medidas de caracterización, pues representa un simple número, un valor numérico.

Es la clase MCArray la que añade complejidad a la estructura de una medida de caracterización. Por ejemplo, la medida de caracterización que contiene las medias de cada una de las bandas de la imagen no puede representarse como una MCNumerica en caso de que la imagen tenga más de una banda. Volviendo al ejemplo anterior, supongamos que tenemos las medias de las tres bandas de la imagen: {32.4, 234.1, 109.47}. Esta medida de caracterización no puede reprentarse como una MCNumerica, ya que consta de tres valores numéricos, en vez de uno sólo. Es aquí donde interviene la clase MCArray. La clase MCArray representa una MC capaz de albergar uno o varios objetos de tipo MC. De este modo, la medida de caracterización anterior podría modelarse fácilmente como una MCArray que contuviera tres objetos MCNumerica, cada uno con las respectivas medias de la imagen.

La potencia de la clase MCArray va más allá. Obsérvese que un objeto de la clase MCArray representa un conjunto con uno o varios objetos de tipo MC. Dado que la clase MCArray hereda de MC, tenemos que una MCArray puede albergar a su vez otras MCArray.

De este modo, la estructura de una MC no tiene por qué quedarse al nivel de un simple array de números. Una MC puede representar una estructura de valores numéricos anidados tan compleja como se quiera.

Por ejemplo, la siguiente estructura de valores numéricos podría ser representada: {3, 5, 7, {4, 5, 6}, 6, {7, {8, 9}, 10}, 13}, y su estructura sería la siguiente:

-- MCArray
   |
   |-- MCNumerica (3)
   |
   |-- MCNumerica (5)
   |
   |-- MCNumerica (7)
   |
   |-- MCArray
   |    |
   |    |-- MCNumerica (4)
   |    |
   |    |-- MCNumerica (5)
   |    |
   |    |-- MCNumerica (6)
   |
   |-- MCNumerica (6)
   |
   |-- MCArray
   |    |
   |    |-- MCNumerica (7)
   |    |
   |    |-- MCArray
   |    |   |
   |    |   |-- MCNumerica (8)
   |    |   |
   |    |   |-- MCNumerica (9)
   |    |
   |    |-- MCNumerica (10)
   |
   |-- MCNumerica (3)

La clase MC, a parte de definir valores numéricos, tiene asociados tanto un nombre como una descripción. Cuando el usuario crea un objeto de tipo MC, tiene la posibilidad de especificar tanto un nombre como una descripción para dicha medida de caracterización. Mediante dichos atributos se le puede asociar una cierta semántica a cada uno de los valores numéricos de los que consta la medida de caracterización. Volviendo al ejemplo de la medida de caracterización que contiene las medias de las tres bandas de la imagen, se le podrían asociar nombres y descripciones como los que siguen:

-- MCArray; nombre: "Media"; descripción: "Medias de cada una de las bandas de la imagen".
    |
    |-- MCNumerica; nombre: "Media 1"; descripción: "Media de la banda 1 de la imagen".
    |
    |-- MCNumerica; nombre: "Media 2"; descripción: "Media de la banda 2 de la imagen".
    |
    |-- MCNumerica; nombre: "Media 3"; descripción: "Media de la banda 3 de la imagen".

De este modo, la MC no tiene solamente valores numéricos, sino que a cada valor numérico se le asocia un significado. Obsérvese, de todos modos, que no es obligatorio asignar un nombre o una descripción a cada MC creada, aunque así se recomienda.

Toda operación de caracterización devuelve un objeto de tipo MC. Dicho objeto representa una serie de datos calculados a partir de la imagen de entrada. La complejidad del objeto MC devuelto depende de la semática de la operación. Unas operaciones podrán devolver MC muy complejas, mientras que la mayoría devolverán MC muy simples.