SURF vs SIFT, ¿es el SURF realmente más rápido?


Estoy probando algo de detección de objetos con SURF y SIFT.

SURF afirma ser más rápido y más robusto que SIFT, pero encontré en mi prueba que esto no es cierto. TAMIZAR con imágenes medianas (600*400) es la misma velocidad de SURF y reconoce los objetos bastante bien (tal vez incluso mejor que el SURF).

Estoy haciendo algo mal?

[Editar]

Tenga en cuenta que hay un artículo explicando cómo el SURF podría ser mucho más rápido con un pequeño cambio en el código opencv.

Si conoces a algún desarrollador activo de opencv, por favor déjale verlo.

Author: Hüseyin Yağlı, 2012-06-23

6 answers

Cuando se diseñó se pretendía que fuera más rápido, pero en realidad las diferencias no son relevantes para aplicaciones en tiempo real con cámaras estándar. Por cierto, el detector rápido es más rápido y en realidad bastante robusto.

Estoy programando para realidad aumentada en tiempo real en teléfonos y usamos una combinación de SIFT (inicialización) y FAST (piramidal FAST para detección de funciones en tiempo real) durante la ejecución de la aplicación. RÁPIDO es realmente más rápido y se implementa en OpenCV, así que si no quiero pegarme al SURF dale una oportunidad. No he visto artículos recientes que usen SURF en tiempo real, pero he visto versiones modificadas de SIFT, con menos píxeles para descriptores y otro tipo de modificaciones, por lo que parece que SURF fue una gran idea que no llegó tan lejos como se pensaba. Esa es sólo mi opinión, de todos modos.

 28
Author: Jav_Rock,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-07-02 21:12:46

OpenCV no tiene la mejor implementación de SURF para velocidad o estabilidad. SURF es fundamentalmente más rápido, por una cantidad mayor, que SIFT si tuviera que contar los FRACASOS de dos implementaciones bien escritas. SIFT calcula una pirámide de imagen enrollando la imagen varias veces con núcleos gaussianos grandes, mientras que SURF logra una aproximación de eso usando imágenes integrales.

Para ver una comparación de varias implementaciones de SURF, echa un vistazo a mi página aquí:

Http://boofcv.org/index.php?title=Performance:SURF

Es lamentable que OpenCV rechazara el parche relacionado con el redondeo debido a problemas multiplataforma. Tal vez el parche se retoque y se vuelva a presentar. En mi propio trabajo noté que general purpose round() era muy lento y lo reemplazé con una función personalizada.

En cuanto al detector RÁPIDO, mencionado por Jav_Rock, solo lo uso como último recurso. Es mucho menos estable de un detector que cualquier otra cosa ahí fuera, pero realmente es rápido.

 16
Author: Peter Abeles,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-12-03 13:25:29

El SURF debe ser más rápido, mientras que el TAMIZADO debe ser más robusto. Astor tiene razón al decir que 600 * 400 es una imagen pequeña para los estándares actuales; sin embargo.

Dicho esto, SURF debería ser muchos órdenes de magnitud más rápido que SIFT.

 5
Author: TonyH,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-06-23 19:52:13

Por favor use la implementación original de SURF para probar. Abrir CV es más lento.

Al comparar las implementaciones originales de SIFT y SURF, obtendrá resultados mucho más rápidos con SURF. Usted puede conseguir aún más rápido por tal vez un orden de magnitud mediante el ajuste de los parámetros. Sin embargo, la robustez podría sufrir. Todo esto depende de su caso de uso.

En general, SURF es tan robusto como SIFT. Dependiendo del conjunto de datos, puede obtener resultados diferentes, pero es gros, son los mismos cuando se trata de robustez.

También hay implementaciones GPU de SURF que son tremendamente más rápidas que mi implementación original.

 2
Author: Herbert Bay,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-04-13 17:05:58

Sin ningún cambio, si aplica SIFT y SURF en OPENCV SIFT parece más rápido que SURF, pero no lo es. Para probar que los he probado en una imagen de 393 * 387 píxeles. Después de ejecutar la misma extracción de características 100 veces y obtener su tiempo promedio, el resultado es

TAMIZ: 0,0983946 (s)

SURF: 0.183372(s)

Pero mira de cerca los puntos clave, encontrarás que dan puntos clave de diferentes tamaños, en mi experimento,

TAMIZ: kpsize = 671 d-row = 671 d-col = 128

SURF: kpsize = 1156 d-row = 1156 d-col = 64

EL SURF da casi el doble de puntos clave de TAMIZADO, por lo que no es muy científico decir TAMIZAR más rápido que el SURF.

Debe usar Rápido como detector y luego aplicar el TAMIZ, SURF, en ese caso:

TAMIZ: 0,199448 (s) SURF: 0.0613682 (s)

TAMIZ: kpsize = 2362 d-row = 2362 d-col = 64

SURF: kpsize = 2362 d-row = 2362 d-col = 64

En ese caso, navegue tres veces más rápido que SIFT.

 2
Author: neouyghur,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-08-12 07:34:20

He aumentado la velocidad de mi detector de características de Surf al no aplicarlo en cada fotograma, pero en cada sexto fotograma, estaba bien para mi aplicación. hacer un contador i, hacer una sentencia if if (i % 6 = = 0), ponga el código ur en esta instrucción if, la velocidad aumentará

 1
Author: Rahul Sood,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-08-14 14:48:46