Tratamiento de Imágenes – Parte 1
Publicado por brunoprog64 en marzo 17, 2009
Esta es una serie de artículos que hablarán un poco de tratamiento de Imágenes, en especial la detección de bordes, por una duda que me ha carcomido siempre.
¿Podemos convertir imágenes en sus bordes, como si fuésemos a colorearlas?
Bueno, para empezar responder a esa duda y empezar esta serie de artículos, imaginemos que tenemos esta imagen:

Imagen original sin modificar
(Para el que le interese, es la serie de Disney: Phineas y Ferb)
Ya está en colores, así que nos sirve perfectamente para nuestros propósitos.
El Reconocimiento de Bordes es una parte importante del proceso de observar. Gracias a los bordes podemos delimitar objetos y saber, por ejemplo, que en la imagen vemos una tabla de surf, a 2 hermanos, a un ornitorrinco, una ola. También nos daremos cuenta de las irregulares formas de los personajes. (Triángulo y Rectángulo).
Veamos, la misma imagen después de procesarla mediante un Algoritmo de Detección de Bordes.

Imagen con bordes detectados
El objetivo de esta serie de artículos es mostrar como convertir una imagen completa como la primera, en una imagen donde solo tenemos los bordes, es decir, lo más básico de toda imagen.
Para los impacientes, vamos a dar una lista de lo que trataremos.
- Cargar imágenes JPG, BMP y demás usando Python Imaging Library.
- El Reconocimiento de Bordes según el método de Prewitt.
- Algo de detalles internos del formato BMP.
Veamos algunas cosas que hay que tener en cuenta antes de comenzar a explicarlo todo.
- Una imagen a color solo aporta ruido en detección de bordes.
- Toda imagen puede ser expresada como una gigantesca matriz de números (O datos), los cuales expresan ciertos valores en la imagen.
- En el mundo de los colores, en lugar de números usamos una estructura de datos que indica R, G, B.
- La detección de bordes es más sencilla si convertimos la imagen a escala de grises primero.
Pero a todo esto, ¿Qué es un borde?, se preguntarán algunos. Las definiciones y modelos matemáticos varían, pero en general podemos decir que son áreas donde hay contraste entre las intensidades de los píxeles. Es decir que donde veamos una intensidad “n” y en el siguiente píxel veamos una intensidad “z”, totalmente diferente a “n”, ahí podremos decir que hay un borde.
¿Y cómo detectamos diferencias entre intensidad? Fácil… mediante Luminancia. En las imágenes en escala de grises, los valores de la matrix de píxeles ya son datos de luminancia. Sin embargo tenemos que convertir el color a datos de Luminancia. Para eso hay funciones en la Python Imaging Library… pero como nos interesa el tema, mencionaremos una forma sencilla:
Y = 0.2126 R + 0.7152 G + 0.0722 B
(Donde ‘Y’ es luminancia y ‘R’, ‘G’, ‘B’ son los valores de Rojo, Verde y Azul de la imagen a colores)
Obtener los valores de R, G, B depende de cada librería que usemos. En nuestro caso la Python Imaging Library tiene funciones para obtener dicha información. Normalmente los datos estan “seguidos” en la estructura de la imagen.
Bueno, eso es todo por este artículo. En el próximo…
- Cargando imágenes con Python Imaging Library.
- Definiciones básicas de Prewitt.
Espero sus comentarios y demás.
admin escribió
Me interesa mucho tu trabajo. me lo podrias pasar ?
BrunoProg64 escribió
Todavía estan en proceso de escribirse estos artículos. Te sugiero esperar.
Tratamiento de Imágenes - Parte 2 « Brunoprog64’s Blog escribió
[...] 2¿Educación Universitaria Gratuita?Contador de Tiempo en PythonLas Competencias de un ProgramadorTratamiento de Imágenes – Parte 1¿127 razones para no consumir azúcar o 127 razones para mentir?Contenido del iPod / Mp3 de una [...]