Imagen & Deep
Sep 5th, 2007 by mr0watts
Me encontré con este pequeño gran PDF sobre el análisis de imágenes . Creo que es interesante leer un poco al respecto y tomar un poco de conocimiento…Recuerden: ” Una mente no es un vaso que se debe llenar, sino que es un fuego que se debe encender .”
El PDF mencionado trata sobre el análisis en imágenesy fue realizado por Neal Krawetz . Desconozco si todos uds. conocen la cantidad de información que posee una simple fotografía digital ¿? Si no lo saben, recomiendo que lean al respecto.
Realmente es un tema más que amplio, de todas formas trataré de dar una explicación adecuada dentro de lo que implica un post y lo suficientemente sencilla como para que pueda ser entendido por la mayoría. Esto me lleva a dividir el tema en 2 post o tal vez más =).
Antes de comenzar les dejo el artículo a través del cual llegué al documento….
*** Una mini introducción: detalles interesantes con respecto a nuestros queridos ojos:
Las imágenes que percibimos están compuestas de ondas electromagnéticas (longitud de onda λ: 250nm - 780nm).Por supuesto, a diferentes longitudes de onda, diferentes “sensaciones” de color. El ojo humano, a su vez, es más sensible a unos colores que a otros. Frente a tres fuentes de luz de la misma intensidad y distinto color (una roja, otra verde y otra azul), se percibe la verde con el doble de intensidad que la roja, y seis veces más intensa que la azul. (como para tener en cuenta al momento de armar algún circuito con leds, no les parece?)
*** Captura y digitalización de imagen
Ahora bien, ¿cúal es el proceso que lleva a cabo una cámara de fotos para obtener la famosa imagen.jpg ?
Una cámara fotográfica digital utiliza un CCD (charge coupled device) para realizar el proceso de adquisición analógica. Este tiene una serie de pequeños diodos sensibles a la luz que convierten luz en cargas eléctricas (o sea, fotones en electrones). Cada diodo del CCD captura un píxel de la imagen a adquirir. A partir de la señal eléctrica generada por cada diodo, se pasa por un conversor AD (Analógico/Digital), quien obtiene la representación digital.
El CCD captura la luz directa que recibe de la lente, sólo tenemos entones intensidad de luz, pero no su color. Para esto se añade un filtro (R=Red, G=Green ó B=Blue…RGB) a cada píxel, de manera que algunos píxels reciben sólo la luz roja, otros la verde y otros la azul. La cantidad de píxels (picture element) que reciben luz verde es el mismo que la suma de los que reciben luz roja y azul.
La información de color que no haya sido obtenida por algunos píxels se obtiene a partir de la interpolación directa de sus vecinos, usando un DSP (Digital Signal Processor// Procesador de Señales Digitales). Este último realiza también el acceso y almacenamiento a memoria, el proceso de compresión y la gestión de los menús entre otras cosas.
*** Nos acercamos a una parte un poco más complicada ahora…dejando ya la Codificación entramos en la recodificación
Sigamos… se realiza entonces después… lo que se conoce como “transformación del espacio de color”. Esto consiste en convertir la imagen desde su modelo de color RGB a otro llamado YUV ó YCbCr. Este espacio de color (YUV) tiene tres componentes: la componente Y, o Luminancia (información de brillo), es decir, la imagen en escala de grises; la componente U o Cb corresponde a la “saturación” (la cantidad de blanco o pureza del color) y V o Cr, corresponde al “tono” (el nombre del color propiamente dicho, o longitud de onda asociada). Ambas señales (Cb,Cr) son conocidas como Crominancia (información de color).
Metiéndonos un poco más a nivel matemático, la conversión de RGB a YCbCr se realiza mediante las siguientes ecuaciones:
- Y = 0.257 * R + 0.504 * G + 0.098 * B + 16 (nivel de brillo, 8bits, rango: 16-235)
- Cb =U= -0.148 * R - 0.291 * G + 0.439 * B + 128
- Cr = V = 0.439 * R - 0.368 * G - 0.071 * B + 128
(Cb y Cr son de 8bits con un rango: 16-240)
El resultado es una imagen en la que la luminancia está separada de la crominancia.
La diferencia del color verde (Cg) es redundante y no se almacena, ya que se puede obtener a partir de Y, Cb y Cr.
Una forma aproximada de cálculo sería:
- Y = 0.3R + 0.6G + 0.1B
- U = B - Y (Diferencia de color azul) (equiv. Cb=U/2+128)
- V = R - Y (Diferencia de color rojo) (equiv. Cr=V/1.6+128)
*** Submuestreo ó Subsampling
Una opción que se puede aplicar al guardar la imagen es reducir la información del color respecto a la de brillo (debido al defecto en el ojo humano que antes comenté).
Si este paso no se aplica, la imagen sigue en su espacio de color YUV (caso: 4:4:4), con lo que la imagen no sufre pérdidas.
Puede reducirse la información cromática a la mitad (caso 4:2:2), el color tiene la mitad de resolución en el eje horizontal y su brillo sigue intacto.
También puede reducirse el color a la cuarta parte (caso 4:2:0), en el que el color se reduce en un factor de 2 en ambas direcciones, horizontal y vertical. El caso 4:1:1 pueden imaginárselo =).
Las técnicas algorítmicas usadas para el submuestreo suelen ser interpolación bilineal, convolución cúbica, Bezier, b-spline y Catmun-Roll.
En la imagen podemos ver lo que comenté anteriormente.
Ahora bien, con esto llegamos a tener una imagen digital y las relaciones entre brillo, saturación y tonalidad. Cuando hablo de relaciones, me refiero a que hemos optimizado cantidad de bits jugando con el margen de error que produce el ojo al visualizar dicha imagen. =)
Pero nos queda otra cosa por hacer para reducir un poco más… en el proceso de compresión…
*** Redundancia Espacial Vs. Técnicas de compresión
Una imagen suele presentar lo que se denomina como redundancia espacial, la misma puede ser reducida o eliminada. Un ejemplo típico es una imagen en la que salga el cielo, suele ser azul y uniforme. El proceso de compresión se encargará de eliminar en lo posible esa clase de redundancia utilizando técnicas de “source encoding” (codificación de la fuente) o más conocidas como técnicas de compresión con pérdida (differential, transform, vector quantization, entre otros). En el próximo post, veremos un poco la transformada discreta del coseno (ó DCT) y de cuantificación.
Existen dos técnicas comunes de compresión con pérdida:
- Por códecs de transformación: los datos originales son transformados de forma tal que se simplifican (sin posibilidad de regreso a los datos originales).
- Por códecs predictivos: los datos originales son analizados para predecir el comportamiento de los mismos. Después se compara esta predicción con la realidad, codificando el error y la información necesaria para la reconstrucción.
(en algunos casos se utilizan ambas, aplicando la transformación al resultado de la codificación predictiva.)
Existen también técnicas de compresión sin pérdidas (“entropy encoding”). Este sistema de compresión se usa en compresores de archivo (RAR, Gzip, Bzip, Zip, 7z, ARJ), también en imágenes (por ejemplo PNG) ¿Quién no odió el mensaje “archivo corrupto” ? por supuesto, si se cambiaron un par de bytes o incluso bits …volver al original en un 100% es prácticamente imposible =)
En la técnica de compresión sin perdidas, se codifica los datos sin necesidad de conocer la naturaleza de los mismos, ejemplos: Statistical (Huffman, aritmética, etc), Run-length.
Por supuesto que si nuestro objetivo es un mayor índice de compresión, deberá ser con la técnica de compresión con perdidas.
Bueno, se hizo largo el post =) espero tener la otra parte pronto, donde les voy a mostrar entre otras cosas algunas herramientas que se nombran en el PDF. Espero que les haya resultado interesante. Si les quedó alguna duda… la consulta es gratis por supuesto.
Salu2.-
Editado: Segunda parte ” Imagen & Deep II”





