2011-06-03 22 views
6

que estoy haciendo la detección de bordes de Sobel en OPENCV utilizando el con los parámetros siguientes:OPENCV vs GIMP, detección de bordes falla en OPENCV

cv.Sobel(mat, edgemat, 1, 1) 
# mat -> source image 
# edgemat -> taget output image 
# 1 -> xorder (int) – Order of the derivative x 
# 1 -> yorder (int) – Order of the derivative y 
# apertureSize (int) – Size of the extended Sobel kernel -> its by default set to 3 

También hice la detección de bordes de Sobel en la imagen usando GIMP.

La imagen original es: Source image La salida de OpenCV es openCV output La salida de GIMP es GIMP output

Por qué una diferencia tan grande entre las salidas de OpenCV y GIMP. La calidad de salida de GIMP supera openCV en años luz.

+0

openCV se describe como visión artificial en tiempo real. ¿Cómo se compara el tiempo de ejecución de openCV con GIMP? –

Respuesta

9

Respuesta simple: Lo estás haciendo mal. Consulte the documentation: lo que está haciendo es calcular la derivada d^2/(dx dy) de la imagen, lo que significa "cómo cambian verticalmente los bordes horizontales" (o, de forma equivalente, "cómo cambian horizontalmente los bordes verticales"), es decir, para una vertical o borde horizontal espera una salida de cero (porque no cambia en la dirección perpendicular a ella). Entonces, lo que estás haciendo con tu línea opencv no es detección de bordes en absoluto. Probablemente desee algo como Sobel con 1, 0 como parámetros y 0, 1, luego cuadre esos resultados y agréguelos, luego tome la raíz cuadrada del resultado. Eso podría resultar en algo como lo que GIMP está haciendo.

+1

Gracias por señalarlo. :) – Xolve