Вычисление порогового расстояния между совпадениями, рассчитанного с помощью ORB

Я использую ORB для сравнения функций на двух изображениях, чтобы найти сходство между ними. bf = cv2.BFMatcher(cv2.NORM_HAMMING, crossCheck=True) matches = bf.match(des1,des2) distance=maches[i].distance

Есть ли способ найти пороговое расстояние, чтобы прокомментировать, насколько похожи функции? Я проверяю, если расстояние ‹ threshold_distance, тогда функции похожи, иначе нет.


person Sonal Goel    schedule 19.01.2016    source источник


Ответы (2)


Использование одного порога для этой цели обычно не так надежно.

Лучший подход состоит в том, чтобы найти кратчайшее расстояние (d1) и второе кратчайшее расстояние (d2) и использовать соотношение.

r=d1/d2

Вы хотите, чтобы это r было меньше порога, соответствующего вашему сценарию.

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

person Photon    schedule 20.01.2016

Может быть, это поможет вам,

double max_dist = 0; double min_dist = 100;
for( int i = 0; i < dest1.rows; i++)
{
    double dist = matches12[i].distance;
    if(dist < min_dist)
        min_dist = dist;
    if(dist > max_dist)
        max_dist = dist;
}
printf("-- Max dist : %f \n", max_dist);
printf("-- Min dist : %f \n", min_dist);
person Sagar Patel    schedule 20.01.2016