2015-06-12 2 views
0

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

Ниже приведен мой код.

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? Что он представляет? Я знаю, что он должен быть массивом дескрипторов, соответствующим каждой ключевой точке, но что именно представляют эти цифры?

Я пробовал вышеуказанный код link.

+0

Я думаю, вы можете посмотреть на вопрос (https://stackoverflow.com/questions/23676365/opencv-orb -descriptor-how-exact-is-it-stored-in-a-set-of-bytes), возможно, вы можете помочь вам – rainy

ответ

0

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

Также проверьте: OpenCV ORB descriptor - how exactly is it stored in a set of bytes?

+0

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