2012-02-04 20 views
8

Sé que el problema de detección de bordes se ha publicado anteriormente (en Java: Count the number of objects in an Image, idioma independiente: Image edge detection), pero quiero saber cómo implementarlo en python.Detección de bordes de Python y cálculo de curvatura

Estoy haciendo la detección de bordes y el cálculo de la curvatura alrededor del borde en algunas formas simples (forma binaria con algo de ruido). Sé que hay algunos contenedores para OpenCV, pero no estoy seguro de cuál es mejor: pyopencv, pycv, pycvf?

Como básicamente solo hago estas dos tareas, tampoco estoy seguro de si sería más rápido implementarlo solo en lugar de usar la biblioteca.

+1

Sugeriría descargar OpenCV de su [sitio web] (http://opencv.willowgarage.com/wiki/) - si lo compila usando sus instrucciones automáticamente obtendrá el contenedor de python ('import cv2'). –

+2

Además, eche un vistazo a 'scipy.ndimage' http://docs.scipy.org/doc/scipy/reference/ndimage.html –

Respuesta

11

Tenemos segmentación y algoritmos de detección de bordes en el scikit-image desarrollado activamente que pueden serle de utilidad:

Scikit Images Examples

+0

La detección de bordes es genial. ¿Implementarás cálculos de curvatura? – clwen

+0

@clwen ¿Cómo se define la curvatura? Si me das un papel o un ejemplo, podemos darle una oportunidad. –

+0

¡He estado buscando la detección de bordes astutos en Python para siempre! Te amo... – tylerthemiler

3

Hay una manera muy simple para encontrar los contornos de la imagen pitón scikit con. No deja de ser una línea par de código, así:

from skimage import measure 
    contours = measure.find_contours(gimg, 0.8) 

Esto devuelve la representación vectorial de las curvas de nivel. En una matriz separada para cada línea. Y también es fácil disminuir la cantidad de puntos en una línea calculando una aproximación. Aquí hay una descripción más larga con el código fuente: image vectorization with python

3

Puede lograr fácilmente la detección de bordes con scipy en python.

from scipy import ndimage 
edge_horizont = ndimage.sobel(greyscale, 0) 
edge_vertical = ndimage.sobel(greyscale, 1) 
magnitude = np.hypot(edge_horizont, edge_vertical) 

Y aquí hay un ejemplo de la imagen original y la imagen después de la detección de bordes. enter image description here

En scikit-image, hay un special page with explanations de cómo hacer detección de bordes.

Cuestiones relacionadas