opencv - que - pie de imagen html
¿Qué significa el atributo de distancia en DMatches? (3)
El atributo de distancia en DMatch es una medida de similitud entre los dos descriptores (vectores de características). Si la distancia es menor, entonces las imágenes son más similares y viceversa.
Una lección aprendida de mi experiencia cuando comencé:
No confunda el DMatch.distance con la distancia espacial normal entre dos puntos. Ambos son diferentes. La distancia en el DMatch representa la distancia entre dos descriptores (vectores con 128 valores en caso de SIFT)
En el caso de SIFT (descriptor de característica local):
1) Primero, detecta puntos clave (puntos interesantes) para las dos imágenes que desea comparar.
2) Luego calcula los descriptores de tamizado para un área definida (16 x 16 alrededor de cada punto clave) alrededor de todos los puntos clave. Cada descriptor almacena el histograma de gradientes orientados para el área alrededor de cada punto clave.
3) Finalmente, los descriptores de ambas imágenes se combinan para encontrar puntos clave coincidentes entre las imágenes. Esto se hace usando BFMatcher -> match (), knnMatch () o FlannBasedMatcher -> knnMatch ().
4) Si está utilizando BFMatcher.match (), obtendrá una lista de objetos DMatch. El número de objetos DMatch es igual al número de coincidencias. Cada objeto DMatch contiene los siguientes cuatro atributos para cada par de puntos clave coincidentes.
DMatch.distance - Distance between descriptors. The lower, the better it is.
DMatch.trainIdx - Index of the descriptor in train descriptors(1st image)
DMatch.queryIdx - Index of the descriptor in query descriptors(2nd image)
DMatch.imgIdx - Index of the train image.
5) DMatch. La distancia puede ser una de las muchas medidas de distancia -> Norm_L1, Norm_L2 (distancia euclidiana), distancia de Hamming, distancia de Hamming2, ... que puede mencionarse como un parámetro en BFMatcher. La distancia por defecto es euclidiana.
6) Diferencia entre la distancia euclidiana espacial y la distancia euclidiana DMatch:
Descriptor SIFT 1 -> [a1, a2, .... a128]
Descriptor SIFT 2 -> [b1, b2, .... b128]
(DMatch) -> Distancia euclidiana = sqrt [(a1-b1) ^ 2 + (a2-b2) ^ 2 + ... + (a128-b128) ^ 2]
Punto 1 -> (x1, y1)
Punto 2 -> (x2, y2)
(Espacial) -> Distancia euclidiana = sqrt [(x2-x1) ^ 2 + (y2-y1) ^ 2]
Por lo tanto, esta distancia desde DMatch es la distancia entre descriptores y representa el grado de similitud entre dos descriptores y es diferente de la distancia euclidiana espacial normal entre dos puntos.
Si la distancia entre los descriptores es menor, entonces su similitud es alta. Si la distancia entre los descriptores es mayor, entonces su similitud es baja.
Espero que esto ayude a entender el significado del atributo de distancia en objetos DMatch. Si tiene claro esto, entonces puede trabajar con cualquier descriptor de características como HOG, SIFT, SURF, ORB, BRISK, FREAK, ... Todos ellos son similares cuando se trata de hacer coincidir sus respectivos descriptores de características.
Tengo una pequeña pregunta: cuando hago una comparación de características en OpenCV, ¿qué significa el atributo de distance
de DMatches
en MatOfMatches
?
Sé que tengo que filtrar coincidencias con distancias mayores porque no son tan buenas como ellas con distancias más bajas. Pero ¿cuál es el significado de este atributo? ¿Es una especie de desviación?
En este contexto, una característica es un punto de interés en la imagen. Para comparar las características, puede "describirlas" utilizando un detector de características . Cada característica se asocia a un descriptor . Cuando se combinan las características, en realidad se combinan sus descriptores.
Un descriptor es un vector multidimensional. Puede ser de valor real (por ejemplo, SIFT ) o binario (por ejemplo, BRIEF).
Una coincidencia es un par de descriptores, uno de cada imagen, que son los más similares entre todos los descriptores. Y, por supuesto, para encontrar el descriptor en la imagen B que sea más similar a un descriptor en la imagen A, necesita una medida de esta similitud.
Hay varias formas de calcular una "puntuación de similitud" entre dos vectores. Para los descriptores de valor real, la distancia euclidiana se usa a menudo, cuando la distancia de Hamming es común para los descriptores binarios.
Como conclusión, ahora podemos entender el atributo de distance
: es la puntuación de similitud entre los dos descriptores de una coincidencia.
Generalmente cuando se combinan dos características, en realidad se comparan dos vectores bajo ciertas métricas de distancia. Ahora supongamos que su característica es SIFT con 128 dimensiones, y compara dos características SIFT a
y b
usando la distancia euclidiana, entonces DMatch.distance
es igual a