Google
 

lunes, 13 de abril de 2009

DETECCION DE BORDES: algoritmo de Canny

El operador de detección de bordes de Canny fue desarrollado por un catedrático de la universidad de Berkeley (EEUU) en 1986 y se basa en un algoritmo de múltiples fases para detectar un amplio rango de bordes. Es sin duda el operador más utilizado en la detección de bordes
El objetivo de Canny era descubrir el algoritmo óptimo para la detección de bordes. Un detector óptimo significará una buena detección, el algoritmo debe marcar tantos bordes reales como sea posible, una buena localización, los bordes marcados deben estar lo más cerca posible del borde en la imagen real, y por último una mínima respuesta, es decir, un borde dado debe ser marcado sólo una vez y donde sea posible el ruido presente en la imagen no debería crear falsos bordes.

  1. Operador de Canny:
    Esta técnica, que se caracteriza por estar optimizada para la detección de bordes diferenciales, consta de 3 fases pero algunos autores agregan una ultima fase, siendo en total 4 fases.

  2. Fases de detección de bordes de canny:
    -Obtención del gradiente
    -Supresión no máxima al resultado del gradiente
    -Histéresis de umbral a la supresión no máxima
    -Cierre de contornos abiertos
    Obtención del gradiente:

    ·
    Para obtener el gradiente se tiene que suavizar la imagen
    -Aplicar a la imagen I un suavizado gaussiano G o filtro gaussiano (también se puede aplicar otros filtros ) J = I * G
    - Para calcular el kernel gaussiano G utilizar la siguiente ecuación · En seguida calcular el gradiente:
    - Para cada pixel de la imagen J(i,j)
    ->Calcular las componentes del gradiente Jx y Jy
    ->Calcular la magnitud de los bordes
    ->Estimar la orientación de la normal de los bordes Supresión no máxima al resultado del gradiente
    El objetivo de este paso es Obtener bordes de 1 pixel de grosor al considerar únicamente pixels cuya magnitud es máxima en bordes gruesos y descartar aquellos cuyas magnitudes no alcancen ese máximo.
    a) Para todo punto se obtiene la dirección más cercana dk a 0º, 45º,90º y 135º en Ea(i,j)
    b) Si Em(i,j) es menor que uno de sus dos vecinos en la dirección dk,IN(i,j)=0. Si no IN(i,j)=Em(i,j)
    Histéresis de umbral a la supresión no máxima
    Permite eliminar máximos procedentes de ruido, etc.
    -Entrada IN, Ea, y dos umbrales T1 y T2 (T2>T1)
    -Para todo punto en IN, y explorando en un orden:
    ->Localizar el siguiente punto tal que IN(i,j) > T2
    ->Seguir las cadenas de máximos locales a partir de IN(i,j) en ambas direcciones perpendiculares a la normal al borde siempre que IN>T1. Marcar los puntos explorados.
    -La salida es un conjunto de bordes conectados de contornos de la imagen, así como la magnitud y orientación.
    Cierre de contornos abiertos (Algoritmo de Deriche y Cocquerez)
    a) La imagen de entrada es una imagen de contornos binarizada (1= borde; 0=no borde)
    b) Para cada punto de borde de un extremo abierto se le asigna un código que determina las direcciones de búsqueda para el cierre del contorno
    c) Para los pixels marcados con este código se marca como pixel de borde el de máximo gradiente en las tres direcciones posibles.
    d) Se repiten los pasos hasta que se cierren todos los contornos.


  3. Resultados:
  4. Conclusiones:
    a) Este algoritmo está considerado como uno de los mejores métodos de detección de contornos mediante el empleo de máscaras de convolución.

    b) El algoritmo Canny es adaptable a los varios ambientes. Sus parámetros permiten que sea adaptado al reconocimiento de los bordes de características que diferencian dependiendo de los requisitos particulares de una puesta en práctica dada.

  5. Ejecutable:

    Se implemento en matlab y en el programa se podra selecionar diferentes imagenes de prueba pero bien se puden poner otras imagenes con los mismos nombres. Para ejecutar el programa primero se debe tener instalado el matlab 7.4 si no se tiene intalado ninguna version o otras versiones anteriores se debe instalar el componente (descargar las las 4 partes)
    Descargar Componente parte1
    Descargar Componente parte2
    Descargar Componente parte3
    Descargar Componente parte4

    Descargar Algortimo de Canny

4 comentarios:

Facundo Nicolás dijo...

Hola, me llamo Facundo N. Montero y soy de Argentina. Estoy estudiando Lic. en Sistemas en la universidad. Me gustaría hablar con vos para preguntarte como son los estudios en Perú y demás temas de lo que estas estudiando.

Por lo que veo que has estado subiendo hacen mucho hincapié en programación en Java, y las aplicaciones que has subido a tu blog son muy buenas. Acá también hacemos algunas cosillas en Java, lo ultimo que hice es un cliente de correo en el que puedes ver tu bandeja de entrada y redactar mails.

Bueno, te dejo mi mail por si te interesa contactarte: chess_facundo@hotmail.com

Saludos cordiales :)

Amparo dijo...

hora
soy amparo de españa estoy ahora con las practicas de deteccion de bordes,

Tienes las implementacion del algoritmo de Canny para Matlab, los ficheros del blog al bajarlos estan vacios.

Saludos

j4v19 dijo...

Oye tio! no tendras el codigo en matlab verdad? es que tienes publicado el ejecutable, pero el codigo no? me lo podrías facilitar? un saludo! gracias

emanuel dijo...

oie hermano, necesito implememtar el algoritmo de canny en MATLAB para bordes, ojala pudieras ayudarme poniendo graficamente, el proceso de programacion , o como se escribe, o algo asi, soy nuevo en esto, y ps es de vida o muerte, ojala puedas ayudarme, un saludo desde Mexico!!!