¿Descripción de SURF más rápida con detección FAST?

para mi tesis de maestría, estoy realizando algunas pruebas en los algoritmos SIFT SURF en FAST para la detección de logotipos en teléfonos inteligentes.

cuando simplemente cronometro la detección, la descripción y la coincidencia de algunos métodos obtengo los siguientes resultados.

Para un detector de SURF y un descriptor de SURF:

180 puntos clave encontrados

Tiempo de cálculo de punto clave de 1,994 segundos (SURF)

4.516 segundos de tiempo de descripción (SURF)

0.282 segundos de tiempo de juego (SURF)

Cuando uso un detector FAST en lugar del detector SURF

319 puntos clave encontrados

Tiempo de cálculo de punto clave de 0,023 segundos (RÁPIDO)

1.295 segundos de tiempo de descripción (SURF)

0.397 segundos de tiempo de juego (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 previsibles.

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

Por lo que sé, la descripción no tiene relación con el algoritmo de detección ... pero estos resultados no son los previstos.

¿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));

Respuestas a la pregunta(1)

Su respuesta a la pregunta