From 3ec1d35065c979ebc6ef4b64e08400d8c0924c06 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Johannes=20Sch=C3=B6nberger?= Date: Thu, 19 Sep 2013 23:45:10 +0200 Subject: [PATCH] Miscellaneous fixes and improvements --- skimage/feature/orb.py | 44 +- skimage/feature/orb_cy.pyx | 539 +------------------ skimage/feature/orb_descriptor_positions.txt | 256 +++++++++ 3 files changed, 296 insertions(+), 543 deletions(-) create mode 100644 skimage/feature/orb_descriptor_positions.txt diff --git a/skimage/feature/orb.py b/skimage/feature/orb.py index 98b3cffc..3de427e2 100644 --- a/skimage/feature/orb.py +++ b/skimage/feature/orb.py @@ -103,30 +103,34 @@ def keypoints_orb(image, n_keypoints=200, fast_n=9, fast_threshold=0.20, keypoints_list = [] orientations_list = [] scales_list = [] - harris_measure_list = [] + harris_response_list = [] - for i in range(n_scales): - harris_response = corner_harris(pyramid[i], method='k', k=harris_k) - corners = corner_peaks(corner_fast(pyramid[i], fast_n, fast_threshold), - min_distance=1) - keypoints_list.append(corners) - orientations_list.append(corner_orientations(pyramid[i], corners, - ofast_mask)) - scales_list.append(i * np.ones(corners.shape[0], dtype=np.intp)) - harris_measure_list.append(harris_response[corners[:, 0], - corners[:, 1]]) + for scale in range(n_scales): - keypoints = np.vstack(keypoints_list) + corners = corner_peaks(corner_fast(pyramid[scale], fast_n, + fast_threshold), min_distance=1) + keypoints_list.append(corners * downscale ** scale) + + orientations_list.append(corner_orientations(pyramid[scale], corners, + OFAST_MASK)) + + scales_list.append(scale * np.ones(corners.shape[0], dtype=np.intp)) + + harris_response = corner_harris(pyramid[scale], method='k', k=harris_k) + harris_response_list.append(harris_response[corners[:, 0], + corners[:, 1]]) + + keypoints = np.round(np.vstack(keypoints_list)).astype(np.intp) orientations = np.hstack(orientations_list) scales = np.hstack(scales_list) - harris_measure = np.hstack(harris_measure_list) + harris_measure = np.hstack(harris_response_list) if keypoints.shape[0] < n_keypoints: return keypoints, orientations, scales else: best_indices = harris_measure.argsort()[::-1][:n_keypoints] return (keypoints[best_indices], orientations[best_indices], - scales[best_indices]) + scales[best_indices]) def descriptor_orb(image, keypoints, orientations, scales, @@ -193,11 +197,12 @@ def descriptor_orb(image, keypoints, orientations, scales, filtered_keypoints_list = [] descriptors = np.empty((0, 256), dtype=np.bool) - for k in range(n_scales): - curr_image = np.ascontiguousarray(pyramid[k]) + for scale in range(n_scales): + curr_image = np.ascontiguousarray(pyramid[scale]) - curr_scale_mask = scales == k - curr_scale_kpts = keypoints[curr_scale_mask] + curr_scale_mask = scales == scale + curr_scale_kpts = keypoints[curr_scale_mask] / (downscale ** scale) + curr_scale_kpts = np.round(curr_scale_kpts).astype(np.intp) curr_scale_orientation = orientations[curr_scale_mask] border_mask = _mask_border_keypoints(curr_image, curr_scale_kpts, @@ -211,8 +216,9 @@ def descriptor_orb(image, keypoints, orientations, scales, curr_scale_orientation) descriptors_list.append(curr_scale_descriptors) - filtered_keypoints_list.append(curr_scale_kpts) + filtered_keypoints_list.append(curr_scale_kpts * downscale ** scale) descriptors = np.vstack(descriptors_list).view(np.bool) filtered_keypoints = np.vstack(filtered_keypoints_list) + filtered_keypoints = np.round(filtered_keypoints).astype(np.intp) return descriptors, filtered_keypoints diff --git a/skimage/feature/orb_cy.pyx b/skimage/feature/orb_cy.pyx index 7e157a41..bb317c7f 100644 --- a/skimage/feature/orb_cy.pyx +++ b/skimage/feature/orb_cy.pyx @@ -9,17 +9,24 @@ import numpy as np from libc.math cimport sin, cos, M_PI, round +pos = np.loadtxt('orb_descriptor_positions.txt', dtype=np.int8) +pos0 = np.ascontiguousarray(pos[:, :2]) +pos1 = np.ascontiguousarray(pos[:, 2:]) + + 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) + cdef char[:, ::1] descriptors = np.zeros((keypoints.shape[0], + pos.shape[0]), dtype=np.uint8) + cdef char[:, ::1] cpos0 = pos0 + cdef char[:, ::1] cpos1 = pos1 - for i in range(keypoints.shape[0]): + for i in range(descriptors.shape[0]): angle = orientations[i] sin_a = sin(angle * M_PI / 180.) cos_a = cos(angle * M_PI / 180.) @@ -27,11 +34,11 @@ def _orb_loop(double[:, ::1] image, Py_ssize_t[:, ::1] keypoints, 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] + for j in range(descriptors.shape[1]): + pr0 = cpos0[j, 0] + pc0 = cpos0[j, 1] + pr1 = cpos1[j, 0] + pc1 = cpos1[j, 1] spr0 = round(sin_a * pr0 + cos_a * pc0) spc0 = round(cos_a * pr0 - sin_a * pc0) @@ -42,519 +49,3 @@ def _orb_loop(double[:, ::1] image, Py_ssize_t[:, ::1] keypoints, 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) diff --git a/skimage/feature/orb_descriptor_positions.txt b/skimage/feature/orb_descriptor_positions.txt new file mode 100644 index 00000000..541f972f --- /dev/null +++ b/skimage/feature/orb_descriptor_positions.txt @@ -0,0 +1,256 @@ +8.000000000000000000e+00 -3.000000000000000000e+00 9.000000000000000000e+00 5.000000000000000000e+00 +4.000000000000000000e+00 2.000000000000000000e+00 7.000000000000000000e+00 -1.200000000000000000e+01 +-1.100000000000000000e+01 9.000000000000000000e+00 -8.000000000000000000e+00 2.000000000000000000e+00 +7.000000000000000000e+00 -1.200000000000000000e+01 1.200000000000000000e+01 -1.300000000000000000e+01 +2.000000000000000000e+00 -1.300000000000000000e+01 2.000000000000000000e+00 1.200000000000000000e+01 +1.000000000000000000e+00 -7.000000000000000000e+00 1.000000000000000000e+00 6.000000000000000000e+00 +-2.000000000000000000e+00 -1.000000000000000000e+01 -2.000000000000000000e+00 -4.000000000000000000e+00 +-1.300000000000000000e+01 -1.300000000000000000e+01 -1.100000000000000000e+01 -8.000000000000000000e+00 +-1.300000000000000000e+01 -3.000000000000000000e+00 -1.200000000000000000e+01 -9.000000000000000000e+00 +1.000000000000000000e+01 4.000000000000000000e+00 1.100000000000000000e+01 9.000000000000000000e+00 +-1.300000000000000000e+01 -8.000000000000000000e+00 -8.000000000000000000e+00 -9.000000000000000000e+00 +-1.100000000000000000e+01 7.000000000000000000e+00 -9.000000000000000000e+00 1.200000000000000000e+01 +7.000000000000000000e+00 7.000000000000000000e+00 1.200000000000000000e+01 6.000000000000000000e+00 +-4.000000000000000000e+00 -5.000000000000000000e+00 -3.000000000000000000e+00 0.000000000000000000e+00 +-1.300000000000000000e+01 2.000000000000000000e+00 -1.200000000000000000e+01 -3.000000000000000000e+00 +-9.000000000000000000e+00 0.000000000000000000e+00 -7.000000000000000000e+00 5.000000000000000000e+00 +1.200000000000000000e+01 -6.000000000000000000e+00 1.200000000000000000e+01 -1.000000000000000000e+00 +-3.000000000000000000e+00 6.000000000000000000e+00 -2.000000000000000000e+00 1.200000000000000000e+01 +-6.000000000000000000e+00 -1.300000000000000000e+01 -4.000000000000000000e+00 -8.000000000000000000e+00 +1.100000000000000000e+01 -1.300000000000000000e+01 1.200000000000000000e+01 -8.000000000000000000e+00 +4.000000000000000000e+00 7.000000000000000000e+00 5.000000000000000000e+00 1.000000000000000000e+00 +5.000000000000000000e+00 -3.000000000000000000e+00 1.000000000000000000e+01 -3.000000000000000000e+00 +3.000000000000000000e+00 -7.000000000000000000e+00 6.000000000000000000e+00 1.200000000000000000e+01 +-8.000000000000000000e+00 -7.000000000000000000e+00 -6.000000000000000000e+00 -2.000000000000000000e+00 +-2.000000000000000000e+00 1.100000000000000000e+01 -1.000000000000000000e+00 -1.000000000000000000e+01 +-1.300000000000000000e+01 1.200000000000000000e+01 -8.000000000000000000e+00 1.000000000000000000e+01 +-7.000000000000000000e+00 3.000000000000000000e+00 -5.000000000000000000e+00 -3.000000000000000000e+00 +-4.000000000000000000e+00 2.000000000000000000e+00 -3.000000000000000000e+00 7.000000000000000000e+00 +-1.000000000000000000e+01 -1.200000000000000000e+01 -6.000000000000000000e+00 1.100000000000000000e+01 +5.000000000000000000e+00 -1.200000000000000000e+01 6.000000000000000000e+00 -7.000000000000000000e+00 +5.000000000000000000e+00 -6.000000000000000000e+00 7.000000000000000000e+00 -1.000000000000000000e+00 +1.000000000000000000e+00 0.000000000000000000e+00 4.000000000000000000e+00 -5.000000000000000000e+00 +9.000000000000000000e+00 1.100000000000000000e+01 1.100000000000000000e+01 -1.300000000000000000e+01 +4.000000000000000000e+00 7.000000000000000000e+00 4.000000000000000000e+00 1.200000000000000000e+01 +2.000000000000000000e+00 -1.000000000000000000e+00 4.000000000000000000e+00 4.000000000000000000e+00 +-4.000000000000000000e+00 -1.200000000000000000e+01 -2.000000000000000000e+00 7.000000000000000000e+00 +-8.000000000000000000e+00 -5.000000000000000000e+00 -7.000000000000000000e+00 -1.000000000000000000e+01 +4.000000000000000000e+00 1.100000000000000000e+01 9.000000000000000000e+00 1.200000000000000000e+01 +0.000000000000000000e+00 -8.000000000000000000e+00 1.000000000000000000e+00 -1.300000000000000000e+01 +-1.300000000000000000e+01 -2.000000000000000000e+00 -8.000000000000000000e+00 2.000000000000000000e+00 +-3.000000000000000000e+00 -2.000000000000000000e+00 -2.000000000000000000e+00 3.000000000000000000e+00 +-6.000000000000000000e+00 9.000000000000000000e+00 -4.000000000000000000e+00 -9.000000000000000000e+00 +8.000000000000000000e+00 1.200000000000000000e+01 1.000000000000000000e+01 7.000000000000000000e+00 +0.000000000000000000e+00 9.000000000000000000e+00 1.000000000000000000e+00 3.000000000000000000e+00 +7.000000000000000000e+00 -5.000000000000000000e+00 1.100000000000000000e+01 -1.000000000000000000e+01 +-1.300000000000000000e+01 -6.000000000000000000e+00 -1.100000000000000000e+01 0.000000000000000000e+00 +1.000000000000000000e+01 7.000000000000000000e+00 1.200000000000000000e+01 1.000000000000000000e+00 +-6.000000000000000000e+00 -3.000000000000000000e+00 -6.000000000000000000e+00 1.200000000000000000e+01 +1.000000000000000000e+01 -9.000000000000000000e+00 1.200000000000000000e+01 -4.000000000000000000e+00 +-1.300000000000000000e+01 8.000000000000000000e+00 -8.000000000000000000e+00 -1.200000000000000000e+01 +-1.300000000000000000e+01 0.000000000000000000e+00 -8.000000000000000000e+00 -4.000000000000000000e+00 +3.000000000000000000e+00 3.000000000000000000e+00 7.000000000000000000e+00 8.000000000000000000e+00 +5.000000000000000000e+00 7.000000000000000000e+00 1.000000000000000000e+01 -7.000000000000000000e+00 +-1.000000000000000000e+00 7.000000000000000000e+00 1.000000000000000000e+00 -1.200000000000000000e+01 +3.000000000000000000e+00 -1.000000000000000000e+01 5.000000000000000000e+00 6.000000000000000000e+00 +2.000000000000000000e+00 -4.000000000000000000e+00 3.000000000000000000e+00 -1.000000000000000000e+01 +-1.300000000000000000e+01 0.000000000000000000e+00 -1.300000000000000000e+01 5.000000000000000000e+00 +-1.300000000000000000e+01 -7.000000000000000000e+00 -1.200000000000000000e+01 1.200000000000000000e+01 +-1.300000000000000000e+01 3.000000000000000000e+00 -1.100000000000000000e+01 8.000000000000000000e+00 +-7.000000000000000000e+00 1.200000000000000000e+01 -4.000000000000000000e+00 7.000000000000000000e+00 +6.000000000000000000e+00 -1.000000000000000000e+01 1.200000000000000000e+01 8.000000000000000000e+00 +-9.000000000000000000e+00 -1.000000000000000000e+00 -7.000000000000000000e+00 -6.000000000000000000e+00 +-2.000000000000000000e+00 -5.000000000000000000e+00 0.000000000000000000e+00 1.200000000000000000e+01 +-1.200000000000000000e+01 5.000000000000000000e+00 -7.000000000000000000e+00 5.000000000000000000e+00 +3.000000000000000000e+00 -1.000000000000000000e+01 8.000000000000000000e+00 -1.300000000000000000e+01 +-7.000000000000000000e+00 -7.000000000000000000e+00 -4.000000000000000000e+00 5.000000000000000000e+00 +-3.000000000000000000e+00 -2.000000000000000000e+00 -1.000000000000000000e+00 -7.000000000000000000e+00 +2.000000000000000000e+00 9.000000000000000000e+00 5.000000000000000000e+00 -1.100000000000000000e+01 +-1.100000000000000000e+01 -1.300000000000000000e+01 -5.000000000000000000e+00 -1.300000000000000000e+01 +-1.000000000000000000e+00 6.000000000000000000e+00 0.000000000000000000e+00 -1.000000000000000000e+00 +5.000000000000000000e+00 -3.000000000000000000e+00 5.000000000000000000e+00 2.000000000000000000e+00 +-4.000000000000000000e+00 -1.300000000000000000e+01 -4.000000000000000000e+00 1.200000000000000000e+01 +-9.000000000000000000e+00 -6.000000000000000000e+00 -9.000000000000000000e+00 6.000000000000000000e+00 +-1.200000000000000000e+01 -1.000000000000000000e+01 -8.000000000000000000e+00 -4.000000000000000000e+00 +1.000000000000000000e+01 2.000000000000000000e+00 1.200000000000000000e+01 -3.000000000000000000e+00 +7.000000000000000000e+00 1.200000000000000000e+01 1.200000000000000000e+01 1.200000000000000000e+01 +-7.000000000000000000e+00 -1.300000000000000000e+01 -6.000000000000000000e+00 5.000000000000000000e+00 +-4.000000000000000000e+00 9.000000000000000000e+00 -3.000000000000000000e+00 4.000000000000000000e+00 +7.000000000000000000e+00 -1.000000000000000000e+00 1.200000000000000000e+01 2.000000000000000000e+00 +-7.000000000000000000e+00 6.000000000000000000e+00 -5.000000000000000000e+00 1.000000000000000000e+00 +-1.300000000000000000e+01 1.100000000000000000e+01 -1.200000000000000000e+01 5.000000000000000000e+00 +-3.000000000000000000e+00 7.000000000000000000e+00 -2.000000000000000000e+00 -6.000000000000000000e+00 +7.000000000000000000e+00 -8.000000000000000000e+00 1.200000000000000000e+01 -7.000000000000000000e+00 +-1.300000000000000000e+01 -7.000000000000000000e+00 -1.100000000000000000e+01 -1.200000000000000000e+01 +1.000000000000000000e+00 -3.000000000000000000e+00 1.200000000000000000e+01 1.200000000000000000e+01 +2.000000000000000000e+00 -6.000000000000000000e+00 3.000000000000000000e+00 0.000000000000000000e+00 +-4.000000000000000000e+00 3.000000000000000000e+00 -2.000000000000000000e+00 -1.300000000000000000e+01 +-1.000000000000000000e+00 -1.300000000000000000e+01 1.000000000000000000e+00 9.000000000000000000e+00 +7.000000000000000000e+00 1.000000000000000000e+00 8.000000000000000000e+00 -6.000000000000000000e+00 +1.000000000000000000e+00 -1.000000000000000000e+00 3.000000000000000000e+00 1.200000000000000000e+01 +9.000000000000000000e+00 1.000000000000000000e+00 1.200000000000000000e+01 6.000000000000000000e+00 +-1.000000000000000000e+00 -9.000000000000000000e+00 -1.000000000000000000e+00 3.000000000000000000e+00 +-1.300000000000000000e+01 -1.300000000000000000e+01 -1.000000000000000000e+01 5.000000000000000000e+00 +7.000000000000000000e+00 7.000000000000000000e+00 1.000000000000000000e+01 1.200000000000000000e+01 +1.200000000000000000e+01 -5.000000000000000000e+00 1.200000000000000000e+01 9.000000000000000000e+00 +6.000000000000000000e+00 3.000000000000000000e+00 7.000000000000000000e+00 1.100000000000000000e+01 +5.000000000000000000e+00 -1.300000000000000000e+01 6.000000000000000000e+00 1.000000000000000000e+01 +2.000000000000000000e+00 -1.200000000000000000e+01 2.000000000000000000e+00 3.000000000000000000e+00 +3.000000000000000000e+00 8.000000000000000000e+00 4.000000000000000000e+00 -6.000000000000000000e+00 +2.000000000000000000e+00 6.000000000000000000e+00 1.200000000000000000e+01 -1.300000000000000000e+01 +9.000000000000000000e+00 -1.200000000000000000e+01 1.000000000000000000e+01 3.000000000000000000e+00 +-8.000000000000000000e+00 4.000000000000000000e+00 -7.000000000000000000e+00 9.000000000000000000e+00 +-1.100000000000000000e+01 1.200000000000000000e+01 -4.000000000000000000e+00 -6.000000000000000000e+00 +1.000000000000000000e+00 1.200000000000000000e+01 2.000000000000000000e+00 -8.000000000000000000e+00 +6.000000000000000000e+00 -9.000000000000000000e+00 7.000000000000000000e+00 -4.000000000000000000e+00 +2.000000000000000000e+00 3.000000000000000000e+00 3.000000000000000000e+00 -2.000000000000000000e+00 +6.000000000000000000e+00 3.000000000000000000e+00 1.100000000000000000e+01 0.000000000000000000e+00 +3.000000000000000000e+00 -3.000000000000000000e+00 8.000000000000000000e+00 -8.000000000000000000e+00 +7.000000000000000000e+00 8.000000000000000000e+00 9.000000000000000000e+00 3.000000000000000000e+00 +-1.100000000000000000e+01 -5.000000000000000000e+00 -6.000000000000000000e+00 -4.000000000000000000e+00 +-1.000000000000000000e+01 1.100000000000000000e+01 -5.000000000000000000e+00 1.000000000000000000e+01 +-5.000000000000000000e+00 -8.000000000000000000e+00 -3.000000000000000000e+00 1.200000000000000000e+01 +-1.000000000000000000e+01 5.000000000000000000e+00 -9.000000000000000000e+00 0.000000000000000000e+00 +8.000000000000000000e+00 -1.000000000000000000e+00 1.200000000000000000e+01 -6.000000000000000000e+00 +4.000000000000000000e+00 -6.000000000000000000e+00 6.000000000000000000e+00 -1.100000000000000000e+01 +-1.000000000000000000e+01 1.200000000000000000e+01 -8.000000000000000000e+00 7.000000000000000000e+00 +4.000000000000000000e+00 -2.000000000000000000e+00 6.000000000000000000e+00 7.000000000000000000e+00 +-2.000000000000000000e+00 0.000000000000000000e+00 -2.000000000000000000e+00 1.200000000000000000e+01 +-5.000000000000000000e+00 -8.000000000000000000e+00 -5.000000000000000000e+00 2.000000000000000000e+00 +7.000000000000000000e+00 -6.000000000000000000e+00 1.000000000000000000e+01 1.200000000000000000e+01 +-9.000000000000000000e+00 -1.300000000000000000e+01 -8.000000000000000000e+00 -8.000000000000000000e+00 +-5.000000000000000000e+00 -1.300000000000000000e+01 -5.000000000000000000e+00 -2.000000000000000000e+00 +8.000000000000000000e+00 -8.000000000000000000e+00 9.000000000000000000e+00 -1.300000000000000000e+01 +-9.000000000000000000e+00 -1.100000000000000000e+01 -9.000000000000000000e+00 0.000000000000000000e+00 +1.000000000000000000e+00 -8.000000000000000000e+00 1.000000000000000000e+00 -2.000000000000000000e+00 +7.000000000000000000e+00 -4.000000000000000000e+00 9.000000000000000000e+00 1.000000000000000000e+00 +-2.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 -4.000000000000000000e+00 +1.100000000000000000e+01 -6.000000000000000000e+00 1.200000000000000000e+01 -1.100000000000000000e+01 +-1.200000000000000000e+01 -9.000000000000000000e+00 -6.000000000000000000e+00 4.000000000000000000e+00 +3.000000000000000000e+00 7.000000000000000000e+00 7.000000000000000000e+00 1.200000000000000000e+01 +5.000000000000000000e+00 5.000000000000000000e+00 1.000000000000000000e+01 8.000000000000000000e+00 +0.000000000000000000e+00 -4.000000000000000000e+00 2.000000000000000000e+00 8.000000000000000000e+00 +-9.000000000000000000e+00 1.200000000000000000e+01 -5.000000000000000000e+00 -1.300000000000000000e+01 +0.000000000000000000e+00 7.000000000000000000e+00 2.000000000000000000e+00 1.200000000000000000e+01 +-1.000000000000000000e+00 2.000000000000000000e+00 1.000000000000000000e+00 7.000000000000000000e+00 +5.000000000000000000e+00 1.100000000000000000e+01 7.000000000000000000e+00 -9.000000000000000000e+00 +3.000000000000000000e+00 5.000000000000000000e+00 6.000000000000000000e+00 -8.000000000000000000e+00 +-1.300000000000000000e+01 -4.000000000000000000e+00 -8.000000000000000000e+00 9.000000000000000000e+00 +-5.000000000000000000e+00 9.000000000000000000e+00 -3.000000000000000000e+00 -3.000000000000000000e+00 +-4.000000000000000000e+00 -7.000000000000000000e+00 -3.000000000000000000e+00 -1.200000000000000000e+01 +6.000000000000000000e+00 5.000000000000000000e+00 8.000000000000000000e+00 0.000000000000000000e+00 +-7.000000000000000000e+00 6.000000000000000000e+00 -6.000000000000000000e+00 1.200000000000000000e+01 +-1.300000000000000000e+01 6.000000000000000000e+00 -5.000000000000000000e+00 -2.000000000000000000e+00 +1.000000000000000000e+00 -1.000000000000000000e+01 3.000000000000000000e+00 1.000000000000000000e+01 +4.000000000000000000e+00 1.000000000000000000e+00 8.000000000000000000e+00 -4.000000000000000000e+00 +-2.000000000000000000e+00 -2.000000000000000000e+00 2.000000000000000000e+00 -1.300000000000000000e+01 +2.000000000000000000e+00 -1.200000000000000000e+01 1.200000000000000000e+01 1.200000000000000000e+01 +-2.000000000000000000e+00 -1.300000000000000000e+01 0.000000000000000000e+00 -6.000000000000000000e+00 +4.000000000000000000e+00 1.000000000000000000e+00 9.000000000000000000e+00 3.000000000000000000e+00 +-6.000000000000000000e+00 -1.000000000000000000e+01 -3.000000000000000000e+00 -5.000000000000000000e+00 +-3.000000000000000000e+00 -1.300000000000000000e+01 -1.000000000000000000e+00 1.000000000000000000e+00 +7.000000000000000000e+00 5.000000000000000000e+00 1.200000000000000000e+01 -1.100000000000000000e+01 +4.000000000000000000e+00 -2.000000000000000000e+00 5.000000000000000000e+00 -7.000000000000000000e+00 +-1.300000000000000000e+01 9.000000000000000000e+00 -9.000000000000000000e+00 -5.000000000000000000e+00 +7.000000000000000000e+00 1.000000000000000000e+00 8.000000000000000000e+00 6.000000000000000000e+00 +7.000000000000000000e+00 -8.000000000000000000e+00 7.000000000000000000e+00 6.000000000000000000e+00 +-7.000000000000000000e+00 -4.000000000000000000e+00 -7.000000000000000000e+00 1.000000000000000000e+00 +-8.000000000000000000e+00 1.100000000000000000e+01 -7.000000000000000000e+00 -8.000000000000000000e+00 +-1.300000000000000000e+01 6.000000000000000000e+00 -1.200000000000000000e+01 -8.000000000000000000e+00 +2.000000000000000000e+00 4.000000000000000000e+00 3.000000000000000000e+00 9.000000000000000000e+00 +1.000000000000000000e+01 -5.000000000000000000e+00 1.200000000000000000e+01 3.000000000000000000e+00 +-6.000000000000000000e+00 -5.000000000000000000e+00 -6.000000000000000000e+00 7.000000000000000000e+00 +8.000000000000000000e+00 -3.000000000000000000e+00 9.000000000000000000e+00 -8.000000000000000000e+00 +2.000000000000000000e+00 -1.200000000000000000e+01 2.000000000000000000e+00 8.000000000000000000e+00 +-1.100000000000000000e+01 -2.000000000000000000e+00 -1.000000000000000000e+01 3.000000000000000000e+00 +-1.200000000000000000e+01 -1.300000000000000000e+01 -7.000000000000000000e+00 -9.000000000000000000e+00 +-1.100000000000000000e+01 0.000000000000000000e+00 -1.000000000000000000e+01 -5.000000000000000000e+00 +5.000000000000000000e+00 -3.000000000000000000e+00 1.100000000000000000e+01 8.000000000000000000e+00 +-2.000000000000000000e+00 -1.300000000000000000e+01 -1.000000000000000000e+00 1.200000000000000000e+01 +-1.000000000000000000e+00 -8.000000000000000000e+00 0.000000000000000000e+00 9.000000000000000000e+00 +-1.300000000000000000e+01 -1.100000000000000000e+01 -1.200000000000000000e+01 -5.000000000000000000e+00 +-1.000000000000000000e+01 -2.000000000000000000e+00 -1.000000000000000000e+01 1.100000000000000000e+01 +-3.000000000000000000e+00 9.000000000000000000e+00 -2.000000000000000000e+00 -1.300000000000000000e+01 +2.000000000000000000e+00 -3.000000000000000000e+00 3.000000000000000000e+00 2.000000000000000000e+00 +-9.000000000000000000e+00 -1.300000000000000000e+01 -4.000000000000000000e+00 0.000000000000000000e+00 +-4.000000000000000000e+00 6.000000000000000000e+00 -3.000000000000000000e+00 -1.000000000000000000e+01 +-4.000000000000000000e+00 1.200000000000000000e+01 -2.000000000000000000e+00 -7.000000000000000000e+00 +-6.000000000000000000e+00 -1.100000000000000000e+01 -4.000000000000000000e+00 9.000000000000000000e+00 +6.000000000000000000e+00 -3.000000000000000000e+00 6.000000000000000000e+00 1.100000000000000000e+01 +-1.300000000000000000e+01 1.100000000000000000e+01 -5.000000000000000000e+00 5.000000000000000000e+00 +1.100000000000000000e+01 1.100000000000000000e+01 1.200000000000000000e+01 6.000000000000000000e+00 +7.000000000000000000e+00 -5.000000000000000000e+00 1.200000000000000000e+01 -2.000000000000000000e+00 +-1.000000000000000000e+00 1.200000000000000000e+01 0.000000000000000000e+00 7.000000000000000000e+00 +-4.000000000000000000e+00 -8.000000000000000000e+00 -3.000000000000000000e+00 -2.000000000000000000e+00 +-7.000000000000000000e+00 1.000000000000000000e+00 -6.000000000000000000e+00 7.000000000000000000e+00 +-1.300000000000000000e+01 -1.200000000000000000e+01 -8.000000000000000000e+00 -1.300000000000000000e+01 +-7.000000000000000000e+00 -2.000000000000000000e+00 -6.000000000000000000e+00 -8.000000000000000000e+00 +-8.000000000000000000e+00 5.000000000000000000e+00 -6.000000000000000000e+00 -9.000000000000000000e+00 +-5.000000000000000000e+00 -1.000000000000000000e+00 -4.000000000000000000e+00 5.000000000000000000e+00 +-1.300000000000000000e+01 7.000000000000000000e+00 -8.000000000000000000e+00 1.000000000000000000e+01 +1.000000000000000000e+00 5.000000000000000000e+00 5.000000000000000000e+00 -1.300000000000000000e+01 +1.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+01 -1.300000000000000000e+01 +9.000000000000000000e+00 1.200000000000000000e+01 1.000000000000000000e+01 -1.000000000000000000e+00 +5.000000000000000000e+00 -8.000000000000000000e+00 1.000000000000000000e+01 -9.000000000000000000e+00 +-1.000000000000000000e+00 1.100000000000000000e+01 1.000000000000000000e+00 -1.300000000000000000e+01 +-9.000000000000000000e+00 -3.000000000000000000e+00 -6.000000000000000000e+00 2.000000000000000000e+00 +-1.000000000000000000e+00 -1.000000000000000000e+01 1.000000000000000000e+00 1.200000000000000000e+01 +-1.300000000000000000e+01 1.000000000000000000e+00 -8.000000000000000000e+00 -1.000000000000000000e+01 +8.000000000000000000e+00 -1.100000000000000000e+01 1.000000000000000000e+01 -6.000000000000000000e+00 +2.000000000000000000e+00 -1.300000000000000000e+01 3.000000000000000000e+00 -6.000000000000000000e+00 +7.000000000000000000e+00 -1.300000000000000000e+01 1.200000000000000000e+01 -9.000000000000000000e+00 +-1.000000000000000000e+01 -1.000000000000000000e+01 -5.000000000000000000e+00 -7.000000000000000000e+00 +-1.000000000000000000e+01 -8.000000000000000000e+00 -8.000000000000000000e+00 -1.300000000000000000e+01 +4.000000000000000000e+00 -6.000000000000000000e+00 8.000000000000000000e+00 5.000000000000000000e+00 +3.000000000000000000e+00 1.200000000000000000e+01 8.000000000000000000e+00 -1.300000000000000000e+01 +-4.000000000000000000e+00 2.000000000000000000e+00 -3.000000000000000000e+00 -3.000000000000000000e+00 +5.000000000000000000e+00 -1.300000000000000000e+01 1.000000000000000000e+01 -1.200000000000000000e+01 +4.000000000000000000e+00 -1.300000000000000000e+01 5.000000000000000000e+00 -1.000000000000000000e+00 +-9.000000000000000000e+00 9.000000000000000000e+00 -4.000000000000000000e+00 3.000000000000000000e+00 +0.000000000000000000e+00 3.000000000000000000e+00 3.000000000000000000e+00 -9.000000000000000000e+00 +-1.200000000000000000e+01 1.000000000000000000e+00 -6.000000000000000000e+00 1.000000000000000000e+00 +3.000000000000000000e+00 2.000000000000000000e+00 4.000000000000000000e+00 -8.000000000000000000e+00 +-1.000000000000000000e+01 -1.000000000000000000e+01 -1.000000000000000000e+01 9.000000000000000000e+00 +8.000000000000000000e+00 -1.300000000000000000e+01 1.200000000000000000e+01 1.200000000000000000e+01 +-8.000000000000000000e+00 -1.200000000000000000e+01 -6.000000000000000000e+00 -5.000000000000000000e+00 +2.000000000000000000e+00 2.000000000000000000e+00 3.000000000000000000e+00 7.000000000000000000e+00 +1.000000000000000000e+01 6.000000000000000000e+00 1.100000000000000000e+01 -8.000000000000000000e+00 +6.000000000000000000e+00 8.000000000000000000e+00 8.000000000000000000e+00 -1.200000000000000000e+01 +-7.000000000000000000e+00 1.000000000000000000e+01 -6.000000000000000000e+00 5.000000000000000000e+00 +-3.000000000000000000e+00 -9.000000000000000000e+00 -3.000000000000000000e+00 9.000000000000000000e+00 +-1.000000000000000000e+00 -1.300000000000000000e+01 -1.000000000000000000e+00 5.000000000000000000e+00 +-3.000000000000000000e+00 -7.000000000000000000e+00 -3.000000000000000000e+00 4.000000000000000000e+00 +-8.000000000000000000e+00 -2.000000000000000000e+00 -8.000000000000000000e+00 3.000000000000000000e+00 +4.000000000000000000e+00 2.000000000000000000e+00 1.200000000000000000e+01 1.200000000000000000e+01 +2.000000000000000000e+00 -5.000000000000000000e+00 3.000000000000000000e+00 1.100000000000000000e+01 +6.000000000000000000e+00 -9.000000000000000000e+00 1.100000000000000000e+01 -1.300000000000000000e+01 +3.000000000000000000e+00 -1.000000000000000000e+00 7.000000000000000000e+00 1.200000000000000000e+01 +1.100000000000000000e+01 -1.000000000000000000e+00 1.200000000000000000e+01 4.000000000000000000e+00 +-3.000000000000000000e+00 0.000000000000000000e+00 -3.000000000000000000e+00 6.000000000000000000e+00 +4.000000000000000000e+00 -1.100000000000000000e+01 4.000000000000000000e+00 1.200000000000000000e+01 +2.000000000000000000e+00 -4.000000000000000000e+00 2.000000000000000000e+00 1.000000000000000000e+00 +-1.000000000000000000e+01 -6.000000000000000000e+00 -8.000000000000000000e+00 1.000000000000000000e+00 +-1.300000000000000000e+01 7.000000000000000000e+00 -1.100000000000000000e+01 1.000000000000000000e+00 +-1.300000000000000000e+01 1.200000000000000000e+01 -1.100000000000000000e+01 -1.300000000000000000e+01 +6.000000000000000000e+00 0.000000000000000000e+00 1.100000000000000000e+01 -1.300000000000000000e+01 +0.000000000000000000e+00 -1.000000000000000000e+00 1.000000000000000000e+00 4.000000000000000000e+00 +-1.300000000000000000e+01 3.000000000000000000e+00 -9.000000000000000000e+00 -2.000000000000000000e+00 +-9.000000000000000000e+00 8.000000000000000000e+00 -6.000000000000000000e+00 -3.000000000000000000e+00 +-1.300000000000000000e+01 -6.000000000000000000e+00 -8.000000000000000000e+00 -2.000000000000000000e+00 +5.000000000000000000e+00 -9.000000000000000000e+00 8.000000000000000000e+00 1.000000000000000000e+01 +2.000000000000000000e+00 7.000000000000000000e+00 3.000000000000000000e+00 -9.000000000000000000e+00 +-1.000000000000000000e+00 -6.000000000000000000e+00 -1.000000000000000000e+00 -1.000000000000000000e+00 +9.000000000000000000e+00 5.000000000000000000e+00 1.100000000000000000e+01 -2.000000000000000000e+00 +1.100000000000000000e+01 -3.000000000000000000e+00 1.200000000000000000e+01 -8.000000000000000000e+00 +3.000000000000000000e+00 0.000000000000000000e+00 3.000000000000000000e+00 5.000000000000000000e+00 +-1.000000000000000000e+00 4.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+01 +3.000000000000000000e+00 -6.000000000000000000e+00 4.000000000000000000e+00 5.000000000000000000e+00 +-1.300000000000000000e+01 0.000000000000000000e+00 -1.000000000000000000e+01 5.000000000000000000e+00 +5.000000000000000000e+00 8.000000000000000000e+00 1.200000000000000000e+01 1.100000000000000000e+01 +8.000000000000000000e+00 9.000000000000000000e+00 9.000000000000000000e+00 -6.000000000000000000e+00 +7.000000000000000000e+00 -4.000000000000000000e+00 8.000000000000000000e+00 -1.200000000000000000e+01 +-1.000000000000000000e+01 4.000000000000000000e+00 -1.000000000000000000e+01 9.000000000000000000e+00 +7.000000000000000000e+00 3.000000000000000000e+00 1.200000000000000000e+01 4.000000000000000000e+00 +9.000000000000000000e+00 -7.000000000000000000e+00 1.000000000000000000e+01 -2.000000000000000000e+00 +7.000000000000000000e+00 0.000000000000000000e+00 1.200000000000000000e+01 -2.000000000000000000e+00 +-1.000000000000000000e+00 -6.000000000000000000e+00 0.000000000000000000e+00 -1.100000000000000000e+01