Използвам внедряването на OpenCV на ORB заедно с BFMatcher. OpenCV заявява, че NORM_HAMMING
трябва да се използва с ORB.
Защо е това? Какви предимства предлага norm_hamming
пред други методи като евклидово разстояние, norm_l1 и др.
Използвам внедряването на OpenCV на ORB заедно с BFMatcher. OpenCV заявява, че NORM_HAMMING
трябва да се използва с ORB.
Защо е това? Какви предимства предлага norm_hamming
пред други методи като евклидово разстояние, norm_l1 и др.
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
Когато се сравняват дескриптори в компютърното зрение, евклидовото разстояние обикновено се разбира като квадратен корен от сумата на квадратите на разликите между двата елемента на вектора.
ORB дескрипторите са вектори на двоични стойности. Ако се прилага евклидово разстояние към двоични вектори, резултатът на квадрат от едно сравнение винаги ще бъде 1 или 0, което не е информативно, когато става въпрос за оценка на разликата между елементите. Общото евклидово разстояние би било корен квадратен от сумата на тези единици и нули, което отново не е добра оценка на разликата между векторите.
Ето защо се използва разстоянието на Хеминг. Тук разстоянието е броят на елементите, които не са еднакви. Както отбелязва Catree, можете да го изчислите чрез проста булева операция върху векторите, както е показано на фигурата по-долу. Тук D1 е единичен 4-битов дескриптор, който сравняваме с 4 дескриптора, показани в D2. Матрицата H е разстоянията на Хеминг за всеки ред.
Разстоянието L1/L2 се използва за низови дескриптори, а Разстоянието на Хеминг се използва за двоични дескриптори (AKAZE, ORB, BRIEF и др.).