Показать оживленные ключевые точки с меньшим количеством ключевых точек в Python - PullRequest
0 голосов
/ 23 октября 2018

У меня есть следующий код на python

import cv2
import numpy as np

def save_keypoints(image_path, type_image):
    img = cv2.imread(image_path)
    gray= cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
    kp, descriptors =cv2.BRISK_create(10).detectAndCompute(gray,None)
    mg=cv2.drawKeypoints(gray, kp, None, 
    flags=cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS)
    cv2.imwrite('brisk_keypoints-'+ type_image+'.jpg',mg)

if __name__=="__main__":
    save_keypoints("original.bmp" ,"original")
    save_keypoints("fake600.bmp" ,"fake600")
    save_keypoints("fake1200.bmp" ,"fake1200")
    save_keypoints("fake2400.bmp" ,"fake2400")

По сути, код сохранит изображение с обнаруженными ключевыми точками BRISK.Однако вот результаты применения этого кода на четырех изображениях:

enter image description hereenter image description hereenter image description hereenter image description here

Несмотря на то, что изображения разные (я могу легко различить их, используя эти дескрипторы BRISK в сумке визуального подхода слов), кажется, что ключевые точки, обнаруженные на всех этих четырех изображениях, визуальноТо же самое или, может быть, большое количество концентрических кругов сбивает с толку зрителя.Как я могу уменьшить количество ключевых точек, показанных таким образом, чтобы я мог видеть, как эти изображения отличаются через эти дескрипторы?

1 Ответ

0 голосов
/ 23 октября 2018

Идеальный ответ был бы таким, как @Silencer предложил отфильтровать Keypoints.Есть несколько способов достичь этого.Если вы отлаживаете, вы можете увидеть, какая информация содержится в ndarray Keypoints.Информация должна выглядеть примерно так: this .Таким образом, используя это, вы можете отсортировать Keypoints на основе ответа (я бы предложил начать с этого) или с координатами Keypoints.Ответ, в основном, заключается в том, насколько хороша ключевая точка, грубо говоря, насколько хороша угловая точка конкретной ключевой точки.

Например:

На основе индекса

keypoints = detector.detect(frame) #list of keypoints
x = keypoints[i].pt[0] #i is the index of the Keypoint you want to get the position
y = keypoints[i].pt[1]

Это можно использовать в лямда-выражении (а не в цикле) или в простой функции для быстрой оптимизации.Точно так же для ответа вы можете сделать:

res = keypoints[i].response

Я видел ответы от 31 до 320 для BRISK, но вам нужно найти лучшее значение для вашего изображения.

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...