2010-08-22 33 views
7

Necesito contar cajas en un almacén utilizando técnicas de detección de bordes; las imágenes se tomarán de un modelo 3D de un almacén y el sistema propuesto se usará 3 imágenes en 3 ángulos diferentes para cubrir toda el área de un almacén.Detección de borde de imagen

Como no tengo experiencia en el procesamiento de imágenes, estoy un poco confundido acerca de qué algoritmo usar.

+1

Trate http://stackoverflow.com/questions/1391212/best-articles-to-start-learning-about-edge -detection-image-recognition – PaulG

+3

¡Es un problema muy, muy complicado de resolver! Dudo que recibas una respuesta exhaustiva sobre SO, tu mejor opción sería buscar en Google algunos documentos de investigación. –

+4

Disculpe por la franqueza: Esto suena a "No tengo experiencia en pilotaje, ¿podría decirme cómo volar un 747 de Londres a Tokio?". Lea un par de libros sobre procesamiento de imágenes y visión por computadora, implemente algoritmos y experimente con ellos. Antes de hacer eso, no creo que puedas abordar un problema como este. – Niki

Respuesta

10

Para un comienzo rápido que sugeriría mirar a los dos:

Estos son los filtros de detección de bordes más utilizados con muy buenos resultados.

Si está empezando a aprender la visión artificial, también debe aprender acerca de typical operations in image processing y convolution.

La OpenCV library es una gran biblioteca que implementa muchos algoritmos de visión artificial, incluidos los dos operadores mencionados anteriormente.

+0

Muchas gracias por tu comentario, he seleccionado canny como mi alogrithm, si utilicé OpenCV o Mathlab, mi profesor no estará muy contento, ¿tienes alguna sugerencia para descubrir detalles o tutoriales de la implementación de canny en C#? – sha123

+0

Hay un buen artículo de CodeProject sobre la implementación de Canny en C#: http://www.codeproject.com/KB/cs/Canny_Edge_Detection.aspx –

1

Echa un vistazo AForge. Tiene una implementación completa de C# de algunos algoritmos de detección de bordes.

+0

k Lo comprobaré, muchas gracias 4 comentario de – sha123

0

Eche un vistazo a Image Processing Library for C++ pregunta. Puede encontrar varios enlaces útiles allí. Las bibliotecas sugeridas no solo tienen una descripción de algoritmo sino también sus implementaciones.

+0

Gracias por tu comentario, pero yo Estoy usando C# como mi lenguaje de programación – sha123

+0

Depende de ti con seguridad. Pero el procesamiento de imágenes de este nivel consume bastante recursos, el rendimiento es importante. Por lo tanto, sería imprudente confiarlo a un tiempo de ejecución administrado. OpenCV tiene algunas optimizaciones de bajo nivel, incluso sugieren procesadores Intel explícitamente. Pero si insistes en C#, puedes crear fácilmente contenedores administrados sobre los archivos DLL no administrados. –

0

Eche un vistazo a mis dos edge detection tutorials - uno se basa en convolución, el otro - simplemente matemática simple. Ah, y tienes que amar a los sombreadores de píxeles para leer esto :)

respecto

0

OpenCV tiene un muy buen algoritmo que detecta contornos cerrados en una imagen y los devuelve como listas de puntos. Luego puede descartar todos los contornos que no tienen 4 puntos, y luego verificar algunas restricciones de los restantes (relación de aspecto de los rectángulos, etc.) para encontrar los lados restantes de su casilla. Esto debería al menos resolver la parte del problema de procesamiento de imágenes, aunque convertir esta lista de contornos en un conteo de cajas en su almacén va a ser difícil.

Marque aquí para la función de OpenCV:

http://opencv.willowgarage.com/documentation/structural_analysis_and_shape_descriptors.html#findcontours

http://opencv.willowgarage.com/documentation/drawing_functions.html#drawcontours

Cuestiones relacionadas