Files
scikit-image/skimage/feature/orb_cy.pyx
T

561 lines
11 KiB
Cython

#cython: cdivision=True
#cython: boundscheck=False
#cython: nonecheck=False
#cython: wraparound=False
cimport numpy as cnp
import numpy as np
from libc.math cimport sin, cos, M_PI, round
def _orb_loop(double[:, ::1] image, Py_ssize_t[:, ::1] keypoints,
double[:] orientations):
cdef Py_ssize_t i, d, kr, kc, pr0, pr1, pc0, pc1, spr0, spc0, spr1, spc1
cdef int[:, ::1] steered_pos0, steered_pos1
cdef double angle
cdef char[:, ::1] descriptors = np.zeros((keypoints.shape[0], 256),
dtype=np.uint8)
for i in range(keypoints.shape[0]):
angle = orientations[i]
sin_a = sin(angle * M_PI / 180.)
cos_a = cos(angle * M_PI / 180.)
kr = keypoints[i, 0]
kc = keypoints[i, 1]
for j in range(256):
pr0 = pos0[j, 0]
pc0 = pos0[j, 1]
pr1 = pos1[j, 0]
pc1 = pos1[j, 1]
spr0 = <Py_ssize_t>round(sin_a * pr0 + cos_a * pc0)
spc0 = <Py_ssize_t>round(cos_a * pr0 - sin_a * pc0)
spr1 = <Py_ssize_t>round(sin_a * pr1 + cos_a * pc1)
spc1 = <Py_ssize_t>round(cos_a * pr1 - sin_a * pc1)
if image[kr + spr0, kc + spc0] < image[kr + spr1, kc + spc1]:
descriptors[i, j] = True
return np.asarray(descriptors)
cdef char[:, ::1] pos0 = np.array([[ 8, -3],
[ 4, 2],
[-11, 9],
[ 7, -12],
[ 2, -13],
[ 1, -7],
[ -2, -10],
[-13, -13],
[-13, -3],
[ 10, 4],
[-13, -8],
[-11, 7],
[ 7, 7],
[ -4, -5],
[-13, 2],
[ -9, 0],
[ 12, -6],
[ -3, 6],
[ -6, -13],
[ 11, -13],
[ 4, 7],
[ 5, -3],
[ 3, -7],
[ -8, -7],
[ -2, 11],
[-13, 12],
[ -7, 3],
[ -4, 2],
[-10, -12],
[ 5, -12],
[ 5, -6],
[ 1, 0],
[ 9, 11],
[ 4, 7],
[ 2, -1],
[ -4, -12],
[ -8, -5],
[ 4, 11],
[ 0, -8],
[-13, -2],
[ -3, -2],
[ -6, 9],
[ 8, 12],
[ 0, 9],
[ 7, -5],
[-13, -6],
[ 10, 7],
[ -6, -3],
[ 10, -9],
[-13, 8],
[-13, 0],
[ 3, 3],
[ 5, 7],
[ -1, 7],
[ 3, -10],
[ 2, -4],
[-13, 0],
[-13, -7],
[-13, 3],
[ -7, 12],
[ 6, -10],
[ -9, -1],
[ -2, -5],
[-12, 5],
[ 3, -10],
[ -7, -7],
[ -3, -2],
[ 2, 9],
[-11, -13],
[ -1, 6],
[ 5, -3],
[ -4, -13],
[ -9, -6],
[-12, -10],
[ 10, 2],
[ 7, 12],
[ -7, -13],
[ -4, 9],
[ 7, -1],
[ -7, 6],
[-13, 11],
[ -3, 7],
[ 7, -8],
[-13, -7],
[ 1, -3],
[ 2, -6],
[ -4, 3],
[ -1, -13],
[ 7, 1],
[ 1, -1],
[ 9, 1],
[ -1, -9],
[-13, -13],
[ 7, 7],
[ 12, -5],
[ 6, 3],
[ 5, -13],
[ 2, -12],
[ 3, 8],
[ 2, 6],
[ 9, -12],
[ -8, 4],
[-11, 12],
[ 1, 12],
[ 6, -9],
[ 2, 3],
[ 6, 3],
[ 3, -3],
[ 7, 8],
[-11, -5],
[-10, 11],
[ -5, -8],
[-10, 5],
[ 8, -1],
[ 4, -6],
[-10, 12],
[ 4, -2],
[ -2, 0],
[ -5, -8],
[ 7, -6],
[ -9, -13],
[ -5, -13],
[ 8, -8],
[ -9, -11],
[ 1, -8],
[ 7, -4],
[ -2, 1],
[ 11, -6],
[-12, -9],
[ 3, 7],
[ 5, 5],
[ 0, -4],
[ -9, 12],
[ 0, 7],
[ -1, 2],
[ 5, 11],
[ 3, 5],
[-13, -4],
[ -5, 9],
[ -4, -7],
[ 6, 5],
[ -7, 6],
[-13, 6],
[ 1, -10],
[ 4, 1],
[ -2, -2],
[ 2, -12],
[ -2, -13],
[ 4, 1],
[ -6, -10],
[ -3, -13],
[ 7, 5],
[ 4, -2],
[-13, 9],
[ 7, 1],
[ 7, -8],
[ -7, -4],
[ -8, 11],
[-13, 6],
[ 2, 4],
[ 10, -5],
[ -6, -5],
[ 8, -3],
[ 2, -12],
[-11, -2],
[-12, -13],
[-11, 0],
[ 5, -3],
[ -2, -13],
[ -1, -8],
[-13, -11],
[-10, -2],
[ -3, 9],
[ 2, -3],
[ -9, -13],
[ -4, 6],
[ -4, 12],
[ -6, -11],
[ 6, -3],
[-13, 11],
[ 11, 11],
[ 7, -5],
[ -1, 12],
[ -4, -8],
[ -7, 1],
[-13, -12],
[ -7, -2],
[ -8, 5],
[ -5, -1],
[-13, 7],
[ 1, 5],
[ 1, 0],
[ 9, 12],
[ 5, -8],
[ -1, 11],
[ -9, -3],
[ -1, -10],
[-13, 1],
[ 8, -11],
[ 2, -13],
[ 7, -13],
[-10, -10],
[-10, -8],
[ 4, -6],
[ 3, 12],
[ -4, 2],
[ 5, -13],
[ 4, -13],
[ -9, 9],
[ 0, 3],
[-12, 1],
[ 3, 2],
[-10, -10],
[ 8, -13],
[ -8, -12],
[ 2, 2],
[ 10, 6],
[ 6, 8],
[ -7, 10],
[ -3, -9],
[ -1, -13],
[ -3, -7],
[ -8, -2],
[ 4, 2],
[ 2, -5],
[ 6, -9],
[ 3, -1],
[ 11, -1],
[ -3, 0],
[ 4, -11],
[ 2, -4],
[-10, -6],
[-13, 7],
[-13, 12],
[ 6, 0],
[ 0, -1],
[-13, 3],
[ -9, 8],
[-13, -6],
[ 5, -9],
[ 2, 7],
[ -1, -6],
[ 9, 5],
[ 11, -3],
[ 3, 0],
[ -1, 4],
[ 3, -6],
[-13, 0],
[ 5, 8],
[ 8, 9],
[ 7, -4],
[-10, 4],
[ 7, 3],
[ 9, -7],
[ 7, 0],
[ -1, -6]], dtype=np.int8)
cdef char[:, ::1] pos1 = np.array([[ 9, 5],
[ 7, -12],
[ -8, 2],
[ 12, -13],
[ 2, 12],
[ 1, 6],
[ -2, -4],
[-11, -8],
[-12, -9],
[ 11, 9],
[ -8, -9],
[ -9, 12],
[ 12, 6],
[ -3, 0],
[-12, -3],
[ -7, 5],
[ 12, -1],
[ -2, 12],
[ -4, -8],
[ 12, -8],
[ 5, 1],
[ 10, -3],
[ 6, 12],
[ -6, -2],
[ -1, -10],
[ -8, 10],
[ -5, -3],
[ -3, 7],
[ -6, 11],
[ 6, -7],
[ 7, -1],
[ 4, -5],
[ 11, -13],
[ 4, 12],
[ 4, 4],
[ -2, 7],
[ -7, -10],
[ 9, 12],
[ 1, -13],
[ -8, 2],
[ -2, 3],
[ -4, -9],
[ 10, 7],
[ 1, 3],
[ 11, -10],
[-11, 0],
[ 12, 1],
[ -6, 12],
[ 12, -4],
[ -8, -12],
[ -8, -4],
[ 7, 8],
[ 10, -7],
[ 1, -12],
[ 5, 6],
[ 3, -10],
[-13, 5],
[-12, 12],
[-11, 8],
[ -4, 7],
[ 12, 8],
[ -7, -6],
[ 0, 12],
[ -7, 5],
[ 8, -13],
[ -4, 5],
[ -1, -7],
[ 5, -11],
[ -5, -13],
[ 0, -1],
[ 5, 2],
[ -4, 12],
[ -9, 6],
[ -8, -4],
[ 12, -3],
[ 12, 12],
[ -6, 5],
[ -3, 4],
[ 12, 2],
[ -5, 1],
[-12, 5],
[ -2, -6],
[ 12, -7],
[-11, -12],
[ 12, 12],
[ 3, 0],
[ -2, -13],
[ 1, 9],
[ 8, -6],
[ 3, 12],
[ 12, 6],
[ -1, 3],
[-10, 5],
[ 10, 12],
[ 12, 9],
[ 7, 11],
[ 6, 10],
[ 2, 3],
[ 4, -6],
[ 12, -13],
[ 10, 3],
[ -7, 9],
[ -4, -6],
[ 2, -8],
[ 7, -4],
[ 3, -2],
[ 11, 0],
[ 8, -8],
[ 9, 3],
[ -6, -4],
[ -5, 10],
[ -3, 12],
[ -9, 0],
[ 12, -6],
[ 6, -11],
[ -8, 7],
[ 6, 7],
[ -2, 12],
[ -5, 2],
[ 10, 12],
[ -8, -8],
[ -5, -2],
[ 9, -13],
[ -9, 0],
[ 1, -2],
[ 9, 1],
[ -1, -4],
[ 12, -11],
[ -6, 4],
[ 7, 12],
[ 10, 8],
[ 2, 8],
[ -5, -13],
[ 2, 12],
[ 1, 7],
[ 7, -9],
[ 6, -8],
[ -8, 9],
[ -3, -3],
[ -3, -12],
[ 8, 0],
[ -6, 12],
[ -5, -2],
[ 3, 10],
[ 8, -4],
[ 2, -13],
[ 12, 12],
[ 0, -6],
[ 9, 3],
[ -3, -5],
[ -1, 1],
[ 12, -11],
[ 5, -7],
[ -9, -5],
[ 8, 6],
[ 7, 6],
[ -7, 1],
[ -7, -8],
[-12, -8],
[ 3, 9],
[ 12, 3],
[ -6, 7],
[ 9, -8],
[ 2, 8],
[-10, 3],
[ -7, -9],
[-10, -5],
[ 11, 8],
[ -1, 12],
[ 0, 9],
[-12, -5],
[-10, 11],
[ -2, -13],
[ 3, 2],
[ -4, 0],
[ -3, -10],
[ -2, -7],
[ -4, 9],
[ 6, 11],
[ -5, 5],
[ 12, 6],
[ 12, -2],
[ 0, 7],
[ -3, -2],
[ -6, 7],
[ -8, -13],
[ -6, -8],
[ -6, -9],
[ -4, 5],
[ -8, 10],
[ 5, -13],
[ 10, -13],
[ 10, -1],
[ 10, -9],
[ 1, -13],
[ -6, 2],
[ 1, 12],
[ -8, -10],
[ 10, -6],
[ 3, -6],
[ 12, -9],
[ -5, -7],
[ -8, -13],
[ 8, 5],
[ 8, -13],
[ -3, -3],
[ 10, -12],
[ 5, -1],
[ -4, 3],
[ 3, -9],
[ -6, 1],
[ 4, -8],
[-10, 9],
[ 12, 12],
[ -6, -5],
[ 3, 7],
[ 11, -8],
[ 8, -12],
[ -6, 5],
[ -3, 9],
[ -1, 5],
[ -3, 4],
[ -8, 3],
[ 12, 12],
[ 3, 11],
[ 11, -13],
[ 7, 12],
[ 12, 4],
[ -3, 6],
[ 4, 12],
[ 2, 1],
[ -8, 1],
[-11, 1],
[-11, -13],
[ 11, -13],
[ 1, 4],
[ -9, -2],
[ -6, -3],
[ -8, -2],
[ 8, 10],
[ 3, -9],
[ -1, -1],
[ 11, -2],
[ 12, -8],
[ 3, 5],
[ 0, 10],
[ 4, 5],
[-10, 5],
[ 12, 11],
[ 9, -6],
[ 8, -12],
[-10, 9],
[ 12, 4],
[ 10, -2],
[ 12, -2],
[ 0, -11]], dtype=np.int8)