Wat is afstand na het doen van een knnMatch?

In principe heb ik:

BruteForceMatcher>().knnMatch(descriptor1,descriptor2,matches,2);

Om alleen goede overeenkomsten te krijgen, parseer ik alle "overeenkomsten" -vectoren en controleer ik de afstand als volgt:

if( (matches[i][0].distance/matches[i][1].distance) < ratio ){
  //> Good match!
}

Maar wat komt overeen met [i] [0] .afstand ? De afstand tussen komt overeen met [i] [0] en?

Mijn veronderstelling

Voor wat ik zou kunnen raden zou het logischer klinken om de euclische afstand tussen de eerste match met zijn NN te berekenen en het te filteren met een drempelwaarde, iets als:

//> I calculate the distance between 2 nearest neighborhood and filter it based on thresold
foreach( matches : i) {
 if ( euclianDistance( matches[i][0] , matches[i][1] ) < threshold ) {
   //> good match
 }
}
2
Het idee van deze filtering is om onbetrouwbare overeenkomsten te verwijderen - overeenkomsten waarbij we niet kunnen zeggen welke de beste is (alleen naar beschrijvingen kijken). En de oorspronkelijke regel is beter dan je suggestie voor deze taak: stel je voor dat een cirkel - het middelpunt van de cirkel - onze treindescriptor is. En twee beste overeenkomsten - zijn de punten die op de tegenovergestelde uiteinden van de diameter liggen. In dit geval zal de afstand tussen deze wedstrijden groot zijn, maar ze zijn niet te onderscheiden van het punt van de treindescriptor.
toegevoegd de auteur Andrey Kamaev, de bron

1 antwoord

descriptor - is a point of N-dimensional space.

match - is a pair of descriptors - one from the first set and one from the second set (also called train and query sets).

distance - is a L2 metric for 2 descriptors pointed by the match structure. (You are specifying the type of metric as a template parameter for BruteForceMatcher).

match[i][0].distance = L2(descriptor1.row(match[i][0].trainIdx),
                          descriptor2.row(match[i][0].queryIdx))

Dus knnMatch retourneert twee dichtstbijzijnde descriptors uit de query die is ingesteld voor elke descriptor uit de set trein . Vervolgens filter je cases uit wanneer de twee gevonden descriptoren dicht bij elkaar staan.

3
toegevoegd
kun je me vertellen welke afstand wordt berekend binnen de kmmMatch-methode. Is het Euclidische afstand of wat. Bedankt.
toegevoegd de auteur posha, de bron
Ik heb het antwoord bijgewerkt met de exacte formule.
toegevoegd de auteur Andrey Kamaev, de bron
Het kan hetzelfde keypoint zijn. Maar als de beelden enig verschil hebben, zullen de descriptoren van hetzelfde keypoint ook anders zijn en kan een goede kansdescriptor van een ander keypoint dichterbij zijn.
toegevoegd de auteur Andrey Kamaev, de bron