algorithm - SURF y SIFT Algoritmo de seguimiento de objetos alternativos para realidad aumentada
augmented-reality (7)
Después de preguntar here y probar tanto SURF como SIFT, ninguno de ellos parece ser lo suficientemente eficiente para generar puntos de interés lo suficientemente rápido como para rastrear un flujo desde la cámara.
SURF, por ejemplo, tarda alrededor de 3 segundos en generar puntos de interés para una imagen, que es demasiado lento para rastrear un video proveniente de una cámara web, y será aún peor cuando lo use en un teléfono móvil.
Solo necesito un algoritmo que rastree un área determinada, su escala, inclinación, etc., y puedo construir sobre eso.
Gracias
¿Sospecho que su uso de SURF puede necesitar alguna alteración?
Aquí hay un enlace a un documento del MIT sobre el uso de SURF para aplicaciones de realidad aumentada en dispositivos móviles.
Extracto:
En esta sección, presentamos nuestra implementación del algoritmo SURF y su adaptación al teléfono móvil. A continuación, analizamos el impacto que tiene la precisión en la velocidad de la búsqueda del vecino más cercano y demostramos que podemos lograr una aceleración de un orden de magnitud con un impacto mínimo en la precisión de coincidencia. Finalmente, discutimos los detalles de la implementación telefónica del canal de coincidencia de imágenes. Estudiamos el rendimiento, el uso de la memoria y el consumo de ancho de banda en el teléfono.
También es posible que desee ver los algoritmos de OpenCV porque se han probado y probado.
Dependiendo de las restricciones de su aplicación, puede reducir el carácter genérico de esos algoritmos para buscar PDI y marcadores conocidos dentro de la imagen.
Parte del seguimiento de un POI es estimar su vector de un punto en la imagen 2D a otro, y luego, opcionalmente, confirmar que todavía existe allí (a través de las características de los píxeles). Se puede utilizar el mismo enfoque para rastrear (no volver a escanear toda la imagen) los cambios de rotación y la perspectiva del grupo y el objeto de POI.
Hay toneladas de documentos en línea para rastrear objetos en una proyección 2D (hasta un sesgo del servidor en muchos casos).
¡Buena suerte!
Como han dicho otros, tres segundos parecen inusualmente largos. Al probar la implementación de SURF en la biblioteca Mahotas , descubrí que en promedio tardaba 0.36 segundos, incluso con algunas imágenes bastante grandes (por ejemplo, 1024x768). Y eso es una mezcla de Python y C, así que me imagino que algunas otras implementaciones de pure-C serían incluso más rápidas.
Debes probar el detector FAST
Encontré esta buena comparación de cada algoritmo de detección de características en http://computer-vision-talks.com/2011/01/comparison-of-the-opencvs-feature-detection-algorithms-2/
Echar un vistazo. ¡Podría ser útil!
De acuerdo con esa comparación, y como mirror2image también ha sugerido, FAST es la mejor opción. Pero depende de lo que realmente quieras lograr.
Estamos utilizando SURF para un proyecto y encontramos que OpenSURF la implementación de SURF de OpenCV en velocidad y rendimiento sin OpenSURF . Todavía no hemos probado la repetibilidad y la precisión, pero es mucho más rápido.
Actualización: solo quería señalar que no es necesario realizar un paso de coincidencia de SURF en cada fotograma, simplemente puede hacerlo en cualquier otro fotograma e interpolar la posición del objeto en el fotograma en el que no ejecuta SURF.
Puede usar un algoritmo más simple si haría restricciones más estrictas en el área que le gustaría ser rastreado. Como seguramente sabrá, ARToolKit es bastante rápido, pero solo rastrea marcadores en blanco y negro con un marco muy distinto.
Si desea un rastreador de propósito general (un tanto), puede marcar PTAM. El sitio ( http://www.robots.ox.ac.uk/~gk/PTAM/ ) está actualmente inactivo, pero aquí hay un video llamativo trabajando en un iPhone ( http://www.youtube.com/watch?v=pBI5HwitBX4 )
Una opción que he usado en sistemas integrados restringidos es usar un detector de puntos de interés más simple: FAST o Shi-Tomasi, por ejemplo. Utilicé Shi-Tomasi, ya que estaba apuntando a un FPGA y podía ejecutarlo fácilmente a una velocidad de píxeles sin necesidad de un almacenamiento intermedio significativo.
Luego use SURF para generar los descriptores para el parche de imagen alrededor de las características identificadas y use aquellos para propósitos de comparación y seguimiento.