mirror of
https://github.com/wassname/scikit-image.git
synced 2026-08-17 11:26:12 +08:00
561 lines
11 KiB
Cython
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)
|