mirror of
https://github.com/wassname/scikit-image.git
synced 2026-06-30 15:36:01 +08:00
298 lines
12 KiB
Python
298 lines
12 KiB
Python
import numpy as np
|
|
|
|
from ..util import img_as_float
|
|
from .util import _mask_border_keypoints
|
|
|
|
|
|
def descriptor_orb(image, keypoints, keypoints_angle):
|
|
|
|
image = np.squeeze(image)
|
|
if image.ndim != 2:
|
|
raise ValueError("Only 2-D gray-scale images supported.")
|
|
|
|
image = img_as_float(image)
|
|
|
|
mask = _mask_border_keypoints(image, keypoints, 13)
|
|
keypoints = keypoints[mask]
|
|
keypoints_angle = keypoints_angle[mask]
|
|
|
|
pos1 = binary_tests[:, :2]
|
|
pos2 = binary_tests[:, 2:]
|
|
|
|
descriptors = np.zeros((keypoints.shape[0], 256), dtype=bool)
|
|
|
|
for i in range(keypoints.shape[0]):
|
|
angle = keypoints_angle[i]
|
|
a = np.sin(angle * np.pi / 180.)
|
|
b = np.cos(angle * np.pi / 180.)
|
|
rotation_matrix = [[b, a], [-a, b]]
|
|
steered_pos1 = pos1 * rotation_matrix
|
|
steered_pos2 = pos2 * rotation_matrix
|
|
for j in range(256):
|
|
pr1 = steered_pos1[j][0]
|
|
pc1 = steered_pos1[j][1]
|
|
pr2 = steered_pos2[j][0]
|
|
pc2 = steered_pos2[j][1]
|
|
descriptors[i, j] = (image[pr1, pc1] < image[pr2, pc2])
|
|
|
|
return descriptors
|
|
|
|
|
|
# Learned 256 decision pairs for binary tests in rBRIEF. Taken from OpenCV.
|
|
binary_tests = np.asarray([[8,-3, 9,5],
|
|
[4,2, 7,-12],
|
|
[-11,9, -8,2],
|
|
[7,-12, 12,-13],
|
|
[2,-13, 2,12],
|
|
[1,-7, 1,6],
|
|
[-2,-10, -2,-4],
|
|
[-13,-13, -11,-8],
|
|
[-13,-3, -12,-9],
|
|
[10,4, 11,9],
|
|
[-13,-8, -8,-9],
|
|
[-11,7, -9,12],
|
|
[7,7, 12,6],
|
|
[-4,-5, -3,0],
|
|
[-13,2, -12,-3],
|
|
[-9,0, -7,5],
|
|
[12,-6, 12,-1],
|
|
[-3,6, -2,12],
|
|
[-6,-13, -4,-8],
|
|
[11,-13, 12,-8],
|
|
[4,7, 5,1],
|
|
[5,-3, 10,-3],
|
|
[3,-7, 6,12],
|
|
[-8,-7, -6,-2],
|
|
[-2,11, -1,-10],
|
|
[-13,12, -8,10],
|
|
[-7,3, -5,-3],
|
|
[-4,2, -3,7],
|
|
[-10,-12, -6,11],
|
|
[5,-12, 6,-7],
|
|
[5,-6, 7,-1],
|
|
[1,0, 4,-5],
|
|
[9,11, 11,-13],
|
|
[4,7, 4,12],
|
|
[2,-1, 4,4],
|
|
[-4,-12, -2,7],
|
|
[-8,-5, -7,-10],
|
|
[4,11, 9,12],
|
|
[0,-8, 1,-13],
|
|
[-13,-2, -8,2],
|
|
[-3,-2, -2,3],
|
|
[-6,9, -4,-9],
|
|
[8,12, 10,7],
|
|
[0,9, 1,3],
|
|
[7,-5, 11,-10],
|
|
[-13,-6, -11,0],
|
|
[10,7, 12,1],
|
|
[-6,-3, -6,12],
|
|
[10,-9, 12,-4],
|
|
[-13,8, -8,-12],
|
|
[-13,0, -8,-4],
|
|
[3,3, 7,8],
|
|
[5,7, 10,-7],
|
|
[-1,7, 1,-12],
|
|
[3,-10, 5,6],
|
|
[2,-4, 3,-10],
|
|
[-13,0, -13,5],
|
|
[-13,-7, -12,12],
|
|
[-13,3, -11,8],
|
|
[-7,12, -4,7],
|
|
[6,-10, 12,8],
|
|
[-9,-1, -7,-6],
|
|
[-2,-5, 0,12],
|
|
[-12,5, -7,5],
|
|
[3,-10, 8,-13],
|
|
[-7,-7, -4,5],
|
|
[-3,-2, -1,-7],
|
|
[2,9, 5,-11],
|
|
[-11,-13, -5,-13],
|
|
[-1,6, 0,-1],
|
|
[5,-3, 5,2],
|
|
[-4,-13, -4,12],
|
|
[-9,-6, -9,6],
|
|
[-12,-10, -8,-4],
|
|
[10,2, 12,-3],
|
|
[7,12, 12,12],
|
|
[-7,-13, -6,5],
|
|
[-4,9, -3,4],
|
|
[7,-1, 12,2],
|
|
[-7,6, -5,1],
|
|
[-13,11, -12,5],
|
|
[-3,7, -2,-6],
|
|
[7,-8, 12,-7],
|
|
[-13,-7, -11,-12],
|
|
[1,-3, 12,12],
|
|
[2,-6, 3,0],
|
|
[-4,3, -2,-13],
|
|
[-1,-13, 1,9],
|
|
[7,1, 8,-6],
|
|
[1,-1, 3,12],
|
|
[9,1, 12,6],
|
|
[-1,-9, -1,3],
|
|
[-13,-13, -10,5],
|
|
[7,7, 10,12],
|
|
[12,-5, 12,9],
|
|
[6,3, 7,11],
|
|
[5,-13, 6,10],
|
|
[2,-12, 2,3],
|
|
[3,8, 4,-6],
|
|
[2,6, 12,-13],
|
|
[9,-12, 10,3],
|
|
[-8,4, -7,9],
|
|
[-11,12, -4,-6],
|
|
[1,12, 2,-8],
|
|
[6,-9, 7,-4],
|
|
[2,3, 3,-2],
|
|
[6,3, 11,0],
|
|
[3,-3, 8,-8],
|
|
[7,8, 9,3],
|
|
[-11,-5, -6,-4],
|
|
[-10,11, -5,10],
|
|
[-5,-8, -3,12],
|
|
[-10,5, -9,0],
|
|
[8,-1, 12,-6],
|
|
[4,-6, 6,-11],
|
|
[-10,12, -8,7],
|
|
[4,-2, 6,7],
|
|
[-2,0, -2,12],
|
|
[-5,-8, -5,2],
|
|
[7,-6, 10,12],
|
|
[-9,-13, -8,-8],
|
|
[-5,-13, -5,-2],
|
|
[8,-8, 9,-13],
|
|
[-9,-11, -9,0],
|
|
[1,-8, 1,-2],
|
|
[7,-4, 9,1],
|
|
[-2,1, -1,-4],
|
|
[11,-6, 12,-11],
|
|
[-12,-9, -6,4],
|
|
[3,7, 7,12],
|
|
[5,5, 10,8],
|
|
[0,-4, 2,8],
|
|
[-9,12, -5,-13],
|
|
[0,7, 2,12],
|
|
[-1,2, 1,7],
|
|
[5,11, 7,-9],
|
|
[3,5, 6,-8],
|
|
[-13,-4, -8,9],
|
|
[-5,9, -3,-3],
|
|
[-4,-7, -3,-12],
|
|
[6,5, 8,0],
|
|
[-7,6, -6,12],
|
|
[-13,6, -5,-2],
|
|
[1,-10, 3,10],
|
|
[4,1, 8,-4],
|
|
[-2,-2, 2,-13],
|
|
[2,-12, 12,12],
|
|
[-2,-13, 0,-6],
|
|
[4,1, 9,3],
|
|
[-6,-10, -3,-5],
|
|
[-3,-13, -1,1],
|
|
[7,5, 12,-11],
|
|
[4,-2, 5,-7],
|
|
[-13,9, -9,-5],
|
|
[7,1, 8,6],
|
|
[7,-8, 7,6],
|
|
[-7,-4, -7,1],
|
|
[-8,11, -7,-8],
|
|
[-13,6, -12,-8],
|
|
[2,4, 3,9],
|
|
[10,-5, 12,3],
|
|
[-6,-5, -6,7],
|
|
[8,-3, 9,-8],
|
|
[2,-12, 2,8],
|
|
[-11,-2, -10,3],
|
|
[-12,-13, -7,-9],
|
|
[-11,0, -10,-5],
|
|
[5,-3, 11,8],
|
|
[-2,-13, -1,12],
|
|
[-1,-8, 0,9],
|
|
[-13,-11, -12,-5],
|
|
[-10,-2, -10,11],
|
|
[-3,9, -2,-13],
|
|
[2,-3, 3,2],
|
|
[-9,-13, -4,0],
|
|
[-4,6, -3,-10],
|
|
[-4,12, -2,-7],
|
|
[-6,-11, -4,9],
|
|
[6,-3, 6,11],
|
|
[-13,11, -5,5],
|
|
[11,11, 12,6],
|
|
[7,-5, 12,-2],
|
|
[-1,12, 0,7],
|
|
[-4,-8, -3,-2],
|
|
[-7,1, -6,7],
|
|
[-13,-12, -8,-13],
|
|
[-7,-2, -6,-8],
|
|
[-8,5, -6,-9],
|
|
[-5,-1, -4,5],
|
|
[-13,7, -8,10],
|
|
[1,5, 5,-13],
|
|
[1,0, 10,-13],
|
|
[9,12, 10,-1],
|
|
[5,-8, 10,-9],
|
|
[-1,11, 1,-13],
|
|
[-9,-3, -6,2],
|
|
[-1,-10, 1,12],
|
|
[-13,1, -8,-10],
|
|
[8,-11, 10,-6],
|
|
[2,-13, 3,-6],
|
|
[7,-13, 12,-9],
|
|
[-10,-10, -5,-7],
|
|
[-10,-8, -8,-13],
|
|
[4,-6, 8,5],
|
|
[3,12, 8,-13],
|
|
[-4,2, -3,-3],
|
|
[5,-13, 10,-12],
|
|
[4,-13, 5,-1],
|
|
[-9,9, -4,3],
|
|
[0,3, 3,-9],
|
|
[-12,1, -6,1],
|
|
[3,2, 4,-8],
|
|
[-10,-10, -10,9],
|
|
[8,-13, 12,12],
|
|
[-8,-12, -6,-5],
|
|
[2,2, 3,7],
|
|
[10,6, 11,-8],
|
|
[6,8, 8,-12],
|
|
[-7,10, -6,5],
|
|
[-3,-9, -3,9],
|
|
[-1,-13, -1,5],
|
|
[-3,-7, -3,4],
|
|
[-8,-2, -8,3],
|
|
[4,2, 12,12],
|
|
[2,-5, 3,11],
|
|
[6,-9, 11,-13],
|
|
[3,-1, 7,12],
|
|
[11,-1, 12,4],
|
|
[-3,0, -3,6],
|
|
[4,-11, 4,12],
|
|
[2,-4, 2,1],
|
|
[-10,-6, -8,1],
|
|
[-13,7, -11,1],
|
|
[-13,12, -11,-13],
|
|
[6,0, 11,-13],
|
|
[0,-1, 1,4],
|
|
[-13,3, -9,-2],
|
|
[-9,8, -6,-3],
|
|
[-13,-6, -8,-2],
|
|
[5,-9, 8,10],
|
|
[2,7, 3,-9],
|
|
[-1,-6, -1,-1],
|
|
[9,5, 11,-2],
|
|
[11,-3, 12,-8],
|
|
[3,0, 3,5],
|
|
[-1,4, 0,10],
|
|
[3,-6, 4,5],
|
|
[-13,0, -10,5],
|
|
[5,8, 12,11],
|
|
[8,9, 9,-6],
|
|
[7,-4, 8,-12],
|
|
[-10,4, -10,9],
|
|
[7,3, 12,4],
|
|
[9,-7, 10,-2],
|
|
[7,0, 12,-2],
|
|
[-1,-6, 0,-11]])
|