Deteccion de Bordes con Canny en OpenCV y Java

Deteccion de Bordes con Canny en OpenCV y Java

Deteccion de Bordes con Canny en OpenCV y Java
5 (100%) 4 votos

En este Articulo veremos una demostracion de la deteccion de bordes con canny en Opencv y Java, el algoritmo canny fue desarrollado por John Canny en 1986 y detecta una amplia cantidad de tipos de bordes en imagenes. La deteccion de bordes es un proceso en el analisis de imagenes en el que se detectan los cambios en la intensidad de luz, y ayuda a detectar tamaños, orientacion, profundidad y otras caracteristicas de los objetos que se representan en las imagenes. El reconocimiento y deteccion de bordes se utiliza para aplicaciones de medicion de objetos, control de calidad, robotica, etc. asi que veamos como realizar deteccion de bordes con canny en opencv y Java, comencemos…

Requerimientos

Desarrollo

La libreria opencv tiene dentro de sus metodos uno en especial capaz de realizar deteccion de bordes con canny a una imagen, hablamos de el metodo canny. El metodo canny se encuentra dentro de org.opencv.imgproc y es capaz de encontrar bordes utilizando el algoritmo Canny que mencionamos en la introduccion de este articulo, la sintaxis es la siguiente:

Donde:
Imagen -> Imagen de entrada en la cual quieres encontrar los bordes
bordes -> Imagen de salida donde se guardara la imagen procesada con solo bordes, puede ser la misma que la imagen de entrada
threshold1 -> Numero que representa el primer valor de umbral para el procedimiento de histeresis
threshold2 -> Numero que representa el segundo valor de umbral para el procedimiento de histeresis
tamañoApertura -> Tamaño de apertura para el opearador sobel (No sera visto en este Articulo)
L2Gradiente -> Flag para indicar si se calculara el gradiente (No sera visto en este Articulo)

[note]
Los ultimos 2 parametros de Canny son opcionales, es decir, existen dos “versiones” de este metodo, una con los primeros 4 parametros y otra con 6 parametros.
[/note]

  • Como saber que valor darle a Threshold1 y Threshold2?

Las variables threshold1 y threshold2 representan el umbral minimo (threshold1) y maximo(threshold2) con el cual trabajar, pero veamos el funcionamiento primero. El algoritmo canny utiliza un procedimiento llamado Umbralizacion con histeresis, el cual requiere de estos dos valores, minimo y maximo, de umbral para trabajar. La umbralizacion consiste en sobreponer un umbral en la imagen, si los pixeles superan ese umbral entonces seran considerados como bordes. Esta tecnica tiene un problema que talvez ya hayas identificado, si se pone un umbral muy alto se perderian parte de los bordes, y al contrario, si pones un umbral muy bajo aparecera mucho “ruido” en la imagen, es por esto que se utiliza la umbralizacion con 2 valores que se piden, el umbral minimo y el umbral maximo.

En respuesta a la pregunta, los valores de estas variables variaran depende de los resultados que querramos, aunque se sugiere que siempre exista una proporcion entre el minimo valor de umbral y el maximo valor de umbral de 2:1 o 3:1.


Suscríbete!

Suscríbete a nuestra lista de correo y recíbe los últimos contenidos directamente en tu bandeja de correo electrónico, puedes elegir únicamente de que categoria del blog quieres recibir contenido.

Suscríbeme

 

  • Preparaciones

Antes de realizar la deteccion de bordes con canny en opencv es aconsejable que, para tener optimos resultados, la imagen que llega a canny tenga cierto procedimiento recorrido:
-Que sea una Imagen GrayScale
-Aplicar cierto blur o desenfoque a la imagen grayscale
Para convertir una imagen a Grayscale o Blur puedes ver el siguiente articulo.

  • Ejemplo

y como resultado obtendremos una imagen con unicamente los bordes en la imagen canny.

Deteccion de Bordes con Canny en OpenCV y Java 1

Video

Deteccion de Bordes con Canny en OpenCV y Java
5 (100%) 4 votos

2
Dejar un comentario

avatar
3 Comment threads
0 Thread replies
0 Followers
 
Most reacted comment
Hottest comment thread
2 Comment authors
Maritza AlvarezLuisBitacoras.com Recent comment authors
  Subscribe  
Notify of
Maritza Alvarez
Guest
Maritza Alvarez

Hola soy Maritza Alvarez [11:54:49] Maritza Alvarez: Estoy tratando de usar libreria opencv para trabajar la deteccion de borde en mi proyecto y he encontrado esto: [11:56:45] Maritza Alvarez: public void DetectarBordes(){ Mat gris=new Mat(imagen_original_mat.width(),imagen_original_mat.height(),imagen_original_mat.type()); Mat blur=new Mat(imagen_original_mat.width(),imagen_original_mat.height(),imagen_original_mat.type()); Mat canny = new Mat(imagen_original_mat.width(),imagen_original_mat.height(),imagen_original_mat.type()); Imgproc.cvtColor(imagen_original_mat, gris, Imgproc.COLOR_RGB2GRAY); Size s = new Size(3,3); int min_threshold=50; int ratio = 3; Imgproc.blur(gris, blur,s); Imgproc.Canny(blur, canny, min_threshold,min_threshold*ratio); } [12:00:59] Maritza Alvarez: Mi duda aqui es si como( imagen_original_mat) que tipo de imagen debo pasar. si como (BufferedImage) o jpg?

Luis
Guest
Luis

Hola que tal una pregunta como puedo pintar los pixeles blancos de mi imagen filtrada con canny pintar los bordes blancos de un color rojo por ejemplo y gracias por la ayuda

trackback
Bitacoras.com

Información Bitacoras.com

Valora en Bitacoras.com: Deteccion de Bordes con Canny en OpenCV y Java Introduccion En este Articulo veremos una demostracion de la deteccion de bordes con canny en Opencv y Java, el algoritmo canny fue desarrollado por John Canny en 1986 y detecta ..…