2011-08-28 16 views
15

Estoy tratando de encontrar una forma eficaz de complejidad aceptable paraDetección de objetos + segmentación

  • detectar un objeto en una imagen para que pueda aislarse de su entorno
  • segmento que se opone a su sub- partes y etiquetarlos por lo que a continuación pueden alcanzar a voluntad

han pasado 3 semanas desde que entré en el mundo de procesamiento de imágenes y que he leído sobre tantas algoritmos (tamizar, serpientes, más serpientes, relacionados con Fourier, etc.) y heurística que no sé por dónde empezar y cuál es "mejor "por lo que estoy tratando de lograr. Teniendo en cuenta que el conjunto de datos de imágenes de interés es bastante grande, ni siquiera sé si debería usar algún algoritmo implementado en OpenCV o si debería implementar uno propio.

Resumir:

  • Qué metodología debo enfocar? ¿Por qué?
  • ¿Debo usar OpenCV para ese tipo de cosas o hay alguna otra alternativa 'mejor'?

Gracias de antemano.

EDITAR - Más información con respecto a los conjuntos de datos

Cada conjunto de datos se compone de 80K imágenes de los productos que comparten el mismo concepto

  • por ejemplo, camisetas, relojes, zapatos
  • tamaño
  • orientación (90% de ellos)
  • fondo (95% de ellos)

Todas las imágenes de cada conjuntos de datos se ven casi idénticos aparte del propio producto al parecer Para hacer las cosas un poco más claro, vamos a considerar sólo el 'conjunto de datos reloj':

Todas las imágenes del conjunto se ven casi exactamente como esta:

enter image description here

(de nuevo, aparte forman el reloj en sí) Quiero extraer la correa y el dial. El caso es que hay muchos estilos de reloj diferentes y, por lo tanto, formas. Por lo que he leído hasta ahora, creo que necesito un algoritmo de plantilla que permita doblar y estirar para poder hacer coincidir las tiras y diales de diferentes estilos.

En lugar de crear tres plantillas distintas (parte superior de la correa, parte inferior de la correa, esfera), sería razonable crear solo una y segmentarla en 3 partes. De esta forma, tendré la suficiente confianza de que cada parte se detectó entre sí según lo previsto, p. Ej. el dial no se detectaría debajo de la parte inferior de la correa.

De todos los algoritmos/metodologías que he encontrado, el modelo de apariencia de forma activa parece ser el más prometedor. Desafortunadamente, no he logrado encontrar una implementación de descenso y no estoy seguro de que ese sea el mejor enfoque para poder escribir uno yo mismo.

Si alguien pudiera señalar lo que realmente debería estar buscando (algorithm/heuristic/library/etc.), Estaría más que agradecido. Si de nuevo crees que mi descripción fue un poco vaga, no dudes en pedir una más detallada.

+0

¿Te importaría describir el dominio de tus imágenes, o incluso algunas muestras de las imágenes? Para la detección/reconocimiento/segmentación general de objetos, creo o generalmente se cree que un buen límite del dominio le daría un "margen" para diferenciar qué segmentar y qué no. –

+0

@gary - Una de las (muchas) cosas que quiero lograr: tener una imagen de un reloj, p. [link] (http://upload.wikimedia.org/wikipedia/commons/0/06/Seiko_7002-7020_Diver%27s_200_m_on_a_4-ring_NATO_style_strap.JPG), quiero poder procesar independientemente la parte 'superior' y 'inferior' de la correa y el dial. Es por eso que necesito algún tipo de plantilla que admita la segmentación. – sawidis

+0

Puede publicar un par de imágenes de su conjunto de datos para mostrar su diversidad. Si, por ejemplo, todas sus imágenes son como la imagen wiki que vinculó, cara arriba, directamente en la cámara y sin escala, diferencias de iluminación o diferencias en la marca o tipo de reloj, puede simplificar enormemente su algoritmo. – Maurits

Respuesta

8

De lo que has dicho, aquí hay algunas cosas que surgen a primera vista:

  • cosa más simple de hacer que binarización en la imagen y hacen los componentes que utilicen o biblioteca OpenCV CvBlob. Para las imágenes simples con fondo no compleja esto generalmente yeilds objetos
  • Sin embargo, mirando su imagen muestra a, técnicas de segmentación basada en la textura puede funcionar mejor - la esfera del reloj, las correas y el fondo son sabiamente variante en la textura/rugosidad, y esta podría ser una forma ideal de separarlos.

    La rugosidad de una porción se puede encontrar fácilmente mediante la transformación Eigen (explicada un poco en SO, consulte el enlace al documento de investigación proporcionado allí), luego se puede aplicar el filtro Mean Shift en la salida de la transformada Eigen . Esto dará regiones claramente separadas de acuerdo a la textura. Tanto el Mean Shift piramidal como la búsqueda de autovalores por SVD se implementan en OpenCV, de modo que a menos que pueda optimizar su propio código, es mejor (y más fácil) usar funciones incorporadas (si están presentes) en cuanto a velocidad y eficiencia.

+0

¡Gracias!Realmente aprecio tu ayuda =) – sawidis

3

Creo que solucionaría el problema. En lugar de buscar el dial, usaría un conjunto de características robustas del reloj para 'coser' la imagen objetivo en una plantilla. El primer reloj tiene un conjunto de cuadrados en el cuadrante que son blancos, el segundo reloj tiene varios círculos blancos. Lo haría por tipo de reloj:

  • Segmente los cuadrados o círculos en el dial. Los pasos de segmentación pueden ser complicados ya que generalmente dependen tanto de la escala como de la luz
  • Estime los centros o las esquinas de las áreas de características encontradas anteriormente. Estos son los nuevos puntos de característica.
  • Utilice el algoritmo húngaro para hacer coincidir las características entre el reloj de plantilla y el reloj de destino. Alternativamente, se puede tomar el entorno de cada punto de característica en la imagen original y que cumplan estas usando correlación cruzada
  • características utilizar la concordancia entre la plantilla y el objetivo para estimar la escala, rotación y traslación
  • Stitch la imagen
  • Como la imagen ahora está en una forma conocida, uno puede extraer las regiones simplemente a través de las coordenadas preestablecidas