En primer lugar, no hay tal cosa como 'plantilla' en este documento: la palabra 'plantilla (s)' tiene un significado diferente en Computer Vision.
El método utilizado en este documento es relativamente sencillo. Deja que te lo explique. Hay tres cosas importantes que debe hacer al realizar tareas como el reconocimiento de objetos, la coincidencia de imágenes, la unión de imágenes y otras similares, utilizando Características locales.
Lo primero importante es la detección ; en este paso, desea detectar puntos de interés o puntos clave, y lo que eso significa es que desea elegir puntos locales (básicamente pequeños parches) que considere interesantes en la imagen, hay muchas maneras de hacerlo; Este documento no contribuye en esta área. Sin embargo, parece que usan el detector de funciones SURF y los puntos clave CenSurE (puede buscarlos si desea obtener más información sobre ellos, no hablaré sobre este paso, excepto que usan funciones como gradientes, etc., lo que significa que si tiene una foto, es poco probable que se elija un punto en el medio del cielo como punto de interés, porque los píxeles alrededor de ese punto tienen la misma intensidad, las cosas que están 'ocupadas' tienden a elegirse como puntos de interés (p. ej. mesa / bordes de construcción / esquinas)).
Una vez realizada la detección, Descripción de la característicasigue. Conoces los puntos interesantes de la imagen y ahora quieres describirlos (básicamente quieres describir los puntos / parche alrededor de los puntos interesantes). SIFT es un descriptor de características popular. En este documento, se les ocurre uno nuevo, llamado BREVE. BREVE se basa en comparaciones, así que digamos que tenemos un parche (50 píxeles por 50 píxeles), elegimos dos puntos y comparamos las intensidades de los dos puntos, si el primer punto es más grande que el segundo, asignamos el valor ' 1 ', sino' 0 ', lo hacemos para varios pares y terminamos con una cadena de valores booleanos. Ahora la gran pregunta es "¿cómo elegir el par de puntos?", En el documento explicaron 5 formas, relativamente similares, describiré la primera. Lo que haces es elegir uniformemente (igual probabilidad) un punto de -S / 2 a S / 2, en nuestro ejemplo, dijimos que el tamaño del parche es 50, por lo que elegimos un punto entre -25 y 25. Suponiendo que la coordenada 0,0 se encuentra en el centro del parche. Así que aquí hay un ejemplo;
Queremos seleccionar el primer par, cada punto consta de coordenadas (X, Y), por lo que seleccionamos uniformemente la coordenada X del primer punto, luego la coordenada Y del primer punto, supongamos que es (10, -1) , ahora el segundo punto; seleccionamos uniformemente la coordenada X para el segundo punto y la coordenada Y para el segundo punto, supongamos que es (-2,20), ahora obtenemos los valores de intensidad para cada punto y vemos cuál tiene los valores de intensidad más grandes - si primero es mayor, asignamos el primer valor booleano a '1'; de lo contrario, asignamos '0'. Hacemos eso para muchos pares, y terminamos con un vector de valores booleanos.
* Punto muy importante: supongo que para que esto funcione, tendrá que especificar un valor semilla antes del generador aleatorio. Lo que eso significa es que desea elegir los mismos valores para cada parche; esto es muy importante porque cuando compara / empareja parches, todo el sistema se descompondrá si no se eligen exactamente de la misma manera. - espero que esto tenga sentido cuando leas el paso correspondiente.
Entonces, hacemos eso para cada punto de interés que fue detectado por el detector. Para cada punto de interés, obtendremos un vector de valores booleanos.
Ahora, para hacer coincidir dos imágenes ( tercer paso; coincidencia ), hacemos exactamente lo mismo para la otra imagen, detectamos y luego describimos el uso del BREVE. Por ejemplo, digamos que tenemos 10 puntos de interés en cada imagen (esto siempre puede funcionar si obtenemos los 10 puntos más interesantes en cada imagen), usamos BREVE para describir cada parche utilizando, por ejemplo, 50 pares, por lo que cada imagen se describirá por 10 vectores de 50 valores booleanos.
Para comparar las dos imágenes, encontramos el vecino más cercano de cada vector de la primera imagen al otro vector de la segunda imagen. Usamos la distancia de Hamming que es bastante rápida, ejemplo de distancia de Hamming
hammingDistance ((0, 1, 1), (0, 0, 0)) = 2
hammingDistance ((0, 1, 1), (0, 1, 1)) = 0
hammingDistance ((0, 1, 1), (1, 0, 0)) = 3
hammingDistance ((0, 1, 1), (1, 1, 1)) = 1
Básicamente cuántas correspondencias incorrectas
Espero que ayude