Deteccion de Bordes

Este es un trabajo académico de IA cuyo objetivo era aplicar técnicas matemáticas para la detección de bordes en una imagen. Los ejecutables permiten procesar culquier imagen RGB en formato jpg, bmp o tiff y encontrar sus bordes mediante dos técnicas básicas:

Primera derivada bidimencional: El algoritmo básicamente

–    Extraer la lumininosidad de cada punto en una imagen rgb con formato r8g8b8 bits (el formato al que se convierte todo en memoria para esta aplicación) . La luminosidad se toma simplemente como la distancia en el cubo RGB al color blanco. Adicionalmente tiene un factor de contraste para “resaltar” un poco mas los bordes.

luminosidad

– Aplicar la mascara de Sobel en sentido X y Y y luego sumar los valores absolutos para el punto. Para obtener GX y GY basta multiplicar cada valor de la máscara con el valor de la luminosidad en la matriz de 3×3 centrada en el pixel de interes y sumar los resultados.

sobel

–   Crear una imagen en falsa escala de grises de acuedo al valor de G.

– La imagen resultado se aplica como resultado a una textura. Debido al tiempo, todas las textura que no sean cuadradas se deforman para que se muestren cudradas en la ventana.

En este ejemplo se muestra el algoritmo en acción sobre una imagen de imageAfter

aplicadosobel

Segunda derivada bidimencional: En este caso se calcula la segunda derivada omnidireccional y se buscan cruces por cero que indiquen minimos locales en el pixel evaluado (lo que indica un borde) El algoritmo es:

–    Extraer la lumininosidad de cada punto de la imagen (igual que con primera derivada)

–    Calcular el valor del operador lapaciano para cada punto de la imagen, esto se puede hacer con una máscara 5×5 o como en este caso con una máscara 3×3 . El cálculo del valor de G es igual que para GX y GY en el caso de Sobel.

laplaciano33

–  Buscar los cruces en cero. Esto se hace revisando los signos de G en los pixeles aledaños al punto a evaluar. Si alguno de ellos tiene signo contrario, entonces se llevo a cabo un cruce por cero en el punto. Por ejemplo un cruce se señala como.

saltocero

–   Convertir los saltos en una imagen de falsa escala de grises

–   Asociar a una textura y mostrar en pantalla.

Hay que notar que si el método se aplicara directamente, el resultado seria monocromático (cruce o no cruce), lo cual resultaría en una imagen de bordes muy marcados. Una posible solución a esto es volver a multiplicar cada cruce por el valor de su luminosidad original o por el valor absoluto normalizado del laplaciano.

A pesar de que este método es mas preciso, es muy sensible al ruido, por lo que las imagenes presentarán los bordes de compresión (especialmente en jpg)  y los defectos de la imagenen. La misma imagen anterior tratada con el borde por segunda derivada:

aplicadolaplaciano

La aplicación utiliza la librería para cargado de texturas de Chris Leathly, basada en el codigo de Ipicture de Jeff Molofee.

download


Descargar:	detecciondebordes.zip
Version:	0.1
Actualizado:	December 22, 2009
Tamaño:		372.28 KB