mirror of
https://github.com/wassname/scikit-image.git
synced 2026-06-29 03:37:34 +08:00
116 lines
6.1 KiB
Python
116 lines
6.1 KiB
Python
import numpy as np
|
|
from numpy.testing import assert_array_equal, assert_almost_equal
|
|
from skimage.feature import ORB
|
|
from skimage.data import lena
|
|
from skimage.color import rgb2gray
|
|
|
|
|
|
img = rgb2gray(lena())
|
|
|
|
|
|
def test_keypoints_orb_desired_no_of_keypoints():
|
|
detector_extractor = ORB(n_keypoints=10, fast_n=12, fast_threshold=0.20)
|
|
detector_extractor.detect(img)
|
|
|
|
exp_rows = np.array([ 435. , 435.6 , 376. , 455. , 434.88, 269. ,
|
|
375.6 , 310.8 , 413. , 311.04])
|
|
exp_cols = np.array([ 180. , 180. , 156. , 176. , 180. , 111. ,
|
|
156. , 172.8, 70. , 172.8])
|
|
|
|
exp_scales = np.array([ 1. , 1.2 , 1. , 1. , 1.44 , 1. ,
|
|
1.2 , 1.2 , 1. , 1.728])
|
|
|
|
exp_orientations = np.array([-175.64733392, -167.94842949, -148.98350192,
|
|
-142.03599837, -176.08535837, -53.08162354,
|
|
-150.89208271, 97.7693776 , -173.4479964 ,
|
|
38.66312042])
|
|
exp_response = np.array([ 0.96770745, 0.81027306, 0.72376257,
|
|
0.5626413 , 0.5097993 , 0.44351774,
|
|
0.39154173, 0.39084861, 0.39063076,
|
|
0.37602487])
|
|
|
|
assert_almost_equal(exp_rows, detector_extractor.keypoints[:, 0])
|
|
assert_almost_equal(exp_cols, detector_extractor.keypoints[:, 1])
|
|
assert_almost_equal(exp_scales, detector_extractor.scales)
|
|
assert_almost_equal(exp_response, detector_extractor.responses)
|
|
assert_almost_equal(exp_orientations,
|
|
np.rad2deg(detector_extractor.orientations), 5)
|
|
|
|
detector_extractor.detect_and_extract(img)
|
|
assert_almost_equal(exp_rows, detector_extractor.keypoints[:, 0])
|
|
assert_almost_equal(exp_cols, detector_extractor.keypoints[:, 1])
|
|
|
|
|
|
def test_keypoints_orb_less_than_desired_no_of_keypoints():
|
|
img = rgb2gray(lena())
|
|
detector_extractor = ORB(n_keypoints=15, fast_n=12,
|
|
fast_threshold=0.33, downscale=2, n_scales=2)
|
|
detector_extractor.detect(img)
|
|
|
|
exp_rows = np.array([ 67., 247., 269., 413., 435., 230., 264.,
|
|
330., 372.])
|
|
exp_cols = np.array([ 157., 146., 111., 70., 180., 136., 336.,
|
|
148., 156.])
|
|
|
|
exp_scales = np.array([ 1., 1., 1., 1., 1., 2., 2., 2., 2.])
|
|
|
|
exp_orientations = np.array([-105.76503839, -96.28973044, -53.08162354,
|
|
-173.4479964 , -175.64733392, -106.07927215,
|
|
-163.40016243, 75.80865813, -154.73195911])
|
|
|
|
exp_response = np.array([ 0.13197835, 0.24931321, 0.44351774,
|
|
0.39063076, 0.96770745, 0.04935129,
|
|
0.21431068, 0.15826555, 0.42403573])
|
|
|
|
assert_almost_equal(exp_rows, detector_extractor.keypoints[:, 0])
|
|
assert_almost_equal(exp_cols, detector_extractor.keypoints[:, 1])
|
|
assert_almost_equal(exp_scales, detector_extractor.scales)
|
|
assert_almost_equal(exp_response, detector_extractor.responses)
|
|
assert_almost_equal(exp_orientations,
|
|
np.rad2deg(detector_extractor.orientations), 5)
|
|
|
|
detector_extractor.detect_and_extract(img)
|
|
assert_almost_equal(exp_rows, detector_extractor.keypoints[:, 0])
|
|
assert_almost_equal(exp_cols, detector_extractor.keypoints[:, 1])
|
|
|
|
|
|
def test_descriptor_orb():
|
|
detector_extractor = ORB(fast_n=12, fast_threshold=0.20)
|
|
|
|
exp_descriptors = np.array([[ True, False, True, True, False, False, False, False, False, False],
|
|
[False, False, True, True, False, True, True, False, True, True],
|
|
[ True, False, False, False, True, False, True, True, True, False],
|
|
[ True, False, False, True, False, True, True, False, False, False],
|
|
[False, True, True, True, False, False, False, True, True, False],
|
|
[False, False, False, False, False, True, False, True, True, True],
|
|
[False, True, True, True, True, False, False, True, False, True],
|
|
[ True, True, True, False, True, True, True, True, False, False],
|
|
[ True, True, False, True, True, True, True, False, False, False],
|
|
[ True, False, False, False, False, True, False, False, True, True],
|
|
[ True, False, False, False, True, True, True, False, False, False],
|
|
[False, False, True, False, True, False, False, True, False, False],
|
|
[False, False, True, True, False, False, False, False, False, True],
|
|
[ True, True, False, False, False, True, True, True, True, True],
|
|
[ True, True, True, False, False, True, False, True, True, False],
|
|
[False, True, True, False, False, True, True, True, True, True],
|
|
[ True, True, True, False, False, False, False, True, True, True],
|
|
[False, False, False, False, True, False, False, True, True, False],
|
|
[False, True, False, False, True, False, False, False, True, True],
|
|
[ True, False, True, False, False, False, True, True, False, False]], dtype=bool)
|
|
|
|
detector_extractor.detect(img)
|
|
detector_extractor.extract(img, detector_extractor.keypoints,
|
|
detector_extractor.scales,
|
|
detector_extractor.orientations)
|
|
assert_array_equal(exp_descriptors,
|
|
detector_extractor.descriptors[100:120, 10:20])
|
|
|
|
detector_extractor.detect_and_extract(img)
|
|
assert_array_equal(exp_descriptors,
|
|
detector_extractor.descriptors[100:120, 10:20])
|
|
|
|
|
|
if __name__ == '__main__':
|
|
from numpy import testing
|
|
testing.run_module_suite()
|