2016-01-19 2 views
0

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

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

ответ

0

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

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

r=d1/d2 

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

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

0

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

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); 
Смежные вопросы