Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Descripción de SURF más rápido con la detección de FAST?

Para mi tesis de maestro, estoy realizando una prueba en los algoritmos SIFT SURF en FAST para la detección de logotipos en teléfonos inteligentes.

Cuando simplemente el tiempo de la detección, descripción y coincidencia para algunos métodos obtengo los siguientes resultados.

Para un detector SURF y un descriptor SURF:

180 puntos clave encontrados

  • 1,994 segundos de tiempo de cálculo del punto clave (SURF)

  • Tiempo de descripción de 4.516 segundos (SURF)

  • 0.282 segundos de tiempo de coincidencia (SURF)

Cuando uso un detector FAST en lugar del detector SURF

319 puntos clave encontrados

  • 0.023 segundos tiempo de cálculo del punto clave (FAST)

  • Tiempo de descripción de 1.295 segundos (SURF)

  • 0.397 segundos de tiempo de coincidencia (SURF)

El detector FAST es mucho más rápido que el detector SURF, e incluso detecta casi el doble de puntos clave 100 veces más rápido. Estos resultados son predecibles.

Sin embargo, el siguiente paso no es un resultado previsto. ¿Cómo es posible que el descriptor de SURF sea más rápido con los 319 puntos FAST y luego con los 180 puntos de SURF?

Por lo que sé, la descripción no tiene relación con el algoritmo de detección … pero estos resultados no son como se predice.

¿Alguien sabe cómo esto es posible?

Aquí está el código:

FeatureDetector detector = FeatureDetector.create(FeatureDetector.SURF); //FeatureDetector detector = FeatureDetector.create(FeatureDetector.FAST); Imgproc.cvtColor(image1, image1, Imgproc.COLOR_RGBA2RGB); Imgproc.cvtColor(image2, image2, Imgproc.COLOR_RGBA2RGB); DescriptorExtractor SurfExtractor = DescriptorExtractor .create(DescriptorExtractor.SURF); //extract keypoints long time= System.currentTimeMillis(); detector.detect(image1, keypoints); Log.d("LOG!", "number of query Keypoints= " + keypoints.size()); detector.detect(image2, logoKeypoints); Log.d("LOG!", "number of logo Keypoints= " + logoKeypoints.size()); Log.d("LOG!", "keypoint calculation time elapsed" + (System.currentTimeMillis() -time)); //Descript keypoints long time2 = System.currentTimeMillis(); Mat descriptors = new Mat(); Mat logoDescriptors = new Mat(); Log.d("LOG!", "logo type" + image2.type() + " intype" + image1.type()); SurfExtractor.compute(image1, keypoints, descriptors); SurfExtractor.compute(image2, logoKeypoints, logoDescriptors); Log.d("LOG!", "Description time elapsed" + (System.currentTimeMillis()- time2)); 

  • Comparación de imágenes de OpenCV en Android
  • One Solution collect form web for “Descripción de SURF más rápido con la detección de FAST?”

    AFAIK la parte más lenta de la extracción de descriptor de SURF es la extracción de subpíxel del parche que tiene (2.8 * keypoint.size x 2.8 * keypoint.size) tamaño alrededor de cada punto clave.

    Así que aquí está mi conjetura: los puntos clave encontrados por el detector FAST siempre tienen su size igual a 7, pero el detector SURF puede encontrar puntos clave de mucho mayor tamaño. Así que 180 puntos "grandes" se procesan más de 319 "pequeños".

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.