Что представляет собой массив дескрипторов, сгенерированный методом вычисления класса ORB?

Я использую OpenCV в Python, чтобы создать дескриптор функции данного изображения. Для этого я использую класс ORB. Чего я не понимаю, так это того, что содержит массив дескрипторов после использования методов orb.detect и orb.compute.

Ниже мой код.

import cv2
from matplotlib import pyplot as plt
from sklearn.cluster import KMeans

img = cv2.imread('penguins.jpg',0)

# Initiate STAR detector
orb = cv2.ORB_create(nfeatures=1000)

# find the keypoints with ORB
kp = orb.detect(img,None)

# compute the descriptors with ORB
kp, des = orb.compute(img, kp)

# draw only keypoints location,not size and orientation
img2 = cv2.drawKeypoints(img,kp,des, color=(0,255,0), flags=0, )
plt.imshow(img2),plt.show()

print len(kp),len(des),len(des[1]), des[0]

Вывод последней строки ниже:

1000 1000 32 [221  65  79 237   6   2 111 112 116 194 243  70  83  99 177 113 118 228
  62 238 233 181  37  76 244 171 230 128  45 178  96  49]

Почему длина каждого элемента des равна 32? Что это означает? Я знаю, что это должен быть массив дескрипторов, соответствующий каждой ключевой точке, но что именно представляют эти числа?

Я попробовал приведенный выше код по этой ссылке. .


person dc95    schedule 12.06.2015    source источник
comment
Я думаю, вы можете посмотреть на вопрос (stackoverflow.com/questions/23676365/), возможно, вы можете помочь вам   -  person rainy    schedule 07.07.2017


Ответы (1)


По умолчанию длина каждого дескриптора ORB составляет 32 байта. Каждый байт содержит 8 сравнений интенсивности пикселей, как описано в официальном документе: https://www.willowgarage.com/sites/default/files/orb_final.pdf

Также проверьте: Дескриптор OpenCV ORB - как именно он хранится в наборе байтов?

person zedv    schedule 12.06.2015
comment
Не могли бы вы подробнее рассказать о том, что вы подразумеваете под сравнением интенсивности 8 пикселей? Мне кажется, что газету трудно читать. Спасибо. - person dc95; 15.06.2015