OpenCV Лучший способ соответствовать точечным образцам - PullRequest
1 голос
/ 24 марта 2020

Я пытаюсь написать приложение для классификации и сохранения дикого леопарда в Южной Азии. Для этого у меня есть основная задача идентифицировать леопардов по их точечному рисунку на лбу.

В настоящее время я использую следующий подход:

  1. Храните известные изображения лба леопарда как базовый список
  2. Получите предоставленное пользователем изображение леопарда и обрежьте лоб леопарда
  3. Предварительная обработка изображений с помощью двустороннего фильтра для уменьшения шума
  4. Определите ключевые точки с использованием алгоритма SIFT
  5. Использование средства сопоставления FLANN для получения совпадений KNN
  6. Выбор хороших совпадений на основе порогового значения отношения

Пример кода:

# Pre-Process & reduce noise.
img1 = cv.bilateralFilter(baseImg, 9, 75, 75)
img2 = cv.bilateralFilter(userImage, 9, 75, 75)

detector = cv.xfeatures2d_SIFT.create()
keypoints1, descriptors1 = detector.detectAndCompute(img1, None)
keypoints2, descriptors2 = detector.detectAndCompute(img2, None)

# FLANN parameters
FLANN_INDEX_KDTREE = 1
index_params = dict(algorithm=FLANN_INDEX_KDTREE, trees=5)
search_params = dict(checks=50)  # or pass empty dictionary
matcher = cv.FlannBasedMatcher(index_params, search_params)

knn_matches = matcher.knnMatch(descriptors1, descriptors2, 2)

allmatchpointcount = len(knn_matches)
ratio_thresh = 0.7
good_matches = []

for m, n in knn_matches:
    if m.distance < ratio_thresh * n.distance:
        good_matches.append(m)


goodmatchpointcount = len(good_matches)
print("Good match count : ", goodmatchpointcount)
matchsuccesspercentage = goodmatchpointcount/allmatchpointcount*100
print("Match percentage : ", matchsuccesspercentage)

Проблемы, с которыми я сталкиваюсь при таком подходе:

  1. Этот метод имеет средне-низкий уровень успеха и имеет тенденцию к сбою, когда есть новое пользовательское изображение.

  2. Пользовательские изображения иногда снимаются под разными углами, когда некоторые комбинации клавиш не видны или деформированы.

  3. Пользователь качество изображения влияет на значимость результата матча icantly.

Я ценю любые предложения по улучшению этого положения любым способом.

Образцы изображений

Базовое изображение

Base image

Выше приведено соответствие ниже: (Соответствует неверный шаблон)

Target image

Дополнительные образцы изображений по запросу.

...