在 OpenCV 中结合 SIFT 和 ORB 描述符的最佳方式
Best way to combine SIFT and ORB descriptors in OpenCV
我需要组合图像的 SIFT
和 ORB
描述符。
如您所知,SIFT
描述符的长度为 128,而 ORB
描述符的长度为 32。
此刻我做的是:
- 重塑
SIFT
描述符为 32 位长度。例如,将 (135, 128) 描述符重塑为 (540, 32) 描述符
- 连接
SIFT
和 ORB
描述符(因为此时两者的长度都是 32)
代码:
sift_kp, sift_desc = sift.detectAndCompute(img,None)
new_sift_desc = sift_desc.reshape((int(128/32) * sift_desc.shape[0], 32))
orb_kp, orb_img_descriptor = orb.detectAndCompute(img,None)
all_descriptors = np.concatenate((new_sift_desc , orb_img_descriptor), axis=0)
我想知道是否有更好的方法来组合这些描述符。
结合描述符后,想法是使用all_descriptors
来对另一幅图像进行特征匹配。
万一有人感兴趣,我最后做的是使用 ORB detect
图像 关键点 并使用 SIFT compute
来自那个关键点的描述符
代码:
def get_orb_sift_image_descriptors(search_img, idx_img):
# Initiate SIFT detector
sift = cv.SIFT_create()
# Initiate ORB detector
orb = cv.ORB_create()
# Find keypoints with ORB
search_kp_orb = orb.detect(search_img, None)
idx_kp_orb = orb.detect(idx_img, None)
# Compute descriptors with SIFT
search_kp_sift, search_des_sift = sift.compute(search_img, search_kp_orb)
idx_kp_sift, idx_des_sift = sift.compute(idx_img, idx_kp_orb)
return search_des_sift, idx_des_sift
我需要组合图像的 SIFT
和 ORB
描述符。
如您所知,SIFT
描述符的长度为 128,而 ORB
描述符的长度为 32。
此刻我做的是:
- 重塑
SIFT
描述符为 32 位长度。例如,将 (135, 128) 描述符重塑为 (540, 32) 描述符 - 连接
SIFT
和ORB
描述符(因为此时两者的长度都是 32)
代码:
sift_kp, sift_desc = sift.detectAndCompute(img,None)
new_sift_desc = sift_desc.reshape((int(128/32) * sift_desc.shape[0], 32))
orb_kp, orb_img_descriptor = orb.detectAndCompute(img,None)
all_descriptors = np.concatenate((new_sift_desc , orb_img_descriptor), axis=0)
我想知道是否有更好的方法来组合这些描述符。
结合描述符后,想法是使用all_descriptors
来对另一幅图像进行特征匹配。
万一有人感兴趣,我最后做的是使用 ORB detect
图像 关键点 并使用 SIFT compute
来自那个关键点的描述符
代码:
def get_orb_sift_image_descriptors(search_img, idx_img):
# Initiate SIFT detector
sift = cv.SIFT_create()
# Initiate ORB detector
orb = cv.ORB_create()
# Find keypoints with ORB
search_kp_orb = orb.detect(search_img, None)
idx_kp_orb = orb.detect(idx_img, None)
# Compute descriptors with SIFT
search_kp_sift, search_des_sift = sift.compute(search_img, search_kp_orb)
idx_kp_sift, idx_des_sift = sift.compute(idx_img, idx_kp_orb)
return search_des_sift, idx_des_sift