ORB/BFMatcher - защо norm_hamming distance?

Използвам внедряването на OpenCV на ORB заедно с BFMatcher. OpenCV заявява, че NORM_HAMMING трябва да се използва с ORB.

Защо е това? Какви предимства предлага norm_hamming пред други методи като евклидово разстояние, norm_l1 и др.


person Colin747    schedule 25.04.2017    source източник


Отговори (3)


ORB (ORB: ефективна алтернатива на SIFT или SURF) е двоичен дескриптор.

Би трябвало да е по-ефективно (по отношение на изчисленията) да се използва разстоянието HAMMING, а не разстоянието L1/L2, тъй като разстоянието HAMMING може да се реализира с помощта на XOR, последвано от броене на битове (вижте КРАТКО: Двоични стабилни независими елементарни характеристики):

Освен това, сравняването на низове може да се извърши чрез изчисляване на разстоянието на Хеминг, което може да се направи изключително бързо на модерни процесори, които често предоставят специфична инструкция за извършване на XOR или операция за броене на битове, какъвто е случаят в най-новия набор от инструкции SSE [10] .

Разбира се, с класически дескриптор като SIFT, не можете да използвате разстоянието на ХАМИНГ.

Можете да тествате себе си:

  • D1=01010110
  • D2=10011010
  • L2_dist(D1,D2)=sqrt(4)=2
  • XOR(D1,D2)=11001100 ; bit_count(11001100)=4
person Catree    schedule 25.04.2017

Когато се сравняват дескриптори в компютърното зрение, евклидовото разстояние обикновено се разбира като квадратен корен от сумата на квадратите на разликите между двата елемента на вектора.

ORB дескрипторите са вектори на двоични стойности. Ако се прилага евклидово разстояние към двоични вектори, резултатът на квадрат от едно сравнение винаги ще бъде 1 или 0, което не е информативно, когато става въпрос за оценка на разликата между елементите. Общото евклидово разстояние би било корен квадратен от сумата на тези единици и нули, което отново не е добра оценка на разликата между векторите.

Ето защо се използва разстоянието на Хеминг. Тук разстоянието е броят на елементите, които не са еднакви. Както отбелязва Catree, можете да го изчислите чрез проста булева операция върху векторите, както е показано на фигурата по-долу. Тук D1 е единичен 4-битов дескриптор, който сравняваме с 4 дескриптора, показани в D2. Матрицата H е разстоянията на Хеминг за всеки ред.

Бърза илюстрация на изчисляване на разстоянието на Хеминг в CV.

person GuillaumeL    schedule 02.06.2020

Разстоянието L1/L2 се използва за низови дескриптори, а Разстоянието на Хеминг се използва за двоични дескриптори (AKAZE, ORB, BRIEF и др.).

person Salim Azak    schedule 29.07.2019