mirror of
https://github.com/wassname/scikit-image.git
synced 2026-06-28 01:00:23 +08:00
78 lines
2.9 KiB
Python
78 lines
2.9 KiB
Python
import numpy as np
|
|
from numpy.testing import assert_array_equal, assert_raises
|
|
from skimage.segmentation import join_segmentations, relabel_sequential
|
|
|
|
def test_join_segmentations():
|
|
s1 = np.array([[0, 0, 1, 1],
|
|
[0, 2, 1, 1],
|
|
[2, 2, 2, 1]])
|
|
s2 = np.array([[0, 1, 1, 0],
|
|
[0, 1, 1, 0],
|
|
[0, 1, 1, 1]])
|
|
|
|
# test correct join
|
|
# NOTE: technically, equality to j_ref is not required, only that there
|
|
# is a one-to-one mapping between j and j_ref. I don't know of an easy way
|
|
# to check this (i.e. not as error-prone as the function being tested)
|
|
j = join_segmentations(s1, s2)
|
|
j_ref = np.array([[0, 1, 3, 2],
|
|
[0, 5, 3, 2],
|
|
[4, 5, 5, 3]])
|
|
assert_array_equal(j, j_ref)
|
|
|
|
# test correct exception when arrays are different shapes
|
|
s3 = np.array([[0, 0, 1, 1], [0, 2, 2, 1]])
|
|
assert_raises(ValueError, join_segmentations, s1, s3)
|
|
|
|
|
|
def test_relabel_sequential_offset1():
|
|
ar = np.array([1, 1, 5, 5, 8, 99, 42])
|
|
ar_relab, fw, inv = relabel_sequential(ar)
|
|
ar_relab_ref = np.array([1, 1, 2, 2, 3, 5, 4])
|
|
assert_array_equal(ar_relab, ar_relab_ref)
|
|
fw_ref = np.zeros(100, int)
|
|
fw_ref[1] = 1; fw_ref[5] = 2; fw_ref[8] = 3; fw_ref[42] = 4; fw_ref[99] = 5
|
|
assert_array_equal(fw, fw_ref)
|
|
inv_ref = np.array([0, 1, 5, 8, 42, 99])
|
|
assert_array_equal(inv, inv_ref)
|
|
|
|
|
|
def test_relabel_sequential_offset5():
|
|
ar = np.array([1, 1, 5, 5, 8, 99, 42])
|
|
ar_relab, fw, inv = relabel_sequential(ar, offset=5)
|
|
ar_relab_ref = np.array([5, 5, 6, 6, 7, 9, 8])
|
|
assert_array_equal(ar_relab, ar_relab_ref)
|
|
fw_ref = np.zeros(100, int)
|
|
fw_ref[1] = 5; fw_ref[5] = 6; fw_ref[8] = 7; fw_ref[42] = 8; fw_ref[99] = 9
|
|
assert_array_equal(fw, fw_ref)
|
|
inv_ref = np.array([0, 0, 0, 0, 0, 1, 5, 8, 42, 99])
|
|
assert_array_equal(inv, inv_ref)
|
|
|
|
|
|
def test_relabel_sequential_offset5_with0():
|
|
ar = np.array([1, 1, 5, 5, 8, 99, 42, 0])
|
|
ar_relab, fw, inv = relabel_sequential(ar, offset=5)
|
|
ar_relab_ref = np.array([5, 5, 6, 6, 7, 9, 8, 0])
|
|
assert_array_equal(ar_relab, ar_relab_ref)
|
|
fw_ref = np.zeros(100, int)
|
|
fw_ref[1] = 5; fw_ref[5] = 6; fw_ref[8] = 7; fw_ref[42] = 8; fw_ref[99] = 9
|
|
assert_array_equal(fw, fw_ref)
|
|
inv_ref = np.array([0, 0, 0, 0, 0, 1, 5, 8, 42, 99])
|
|
assert_array_equal(inv, inv_ref)
|
|
|
|
|
|
def test_relabel_sequential_dtype():
|
|
ar = np.array([1, 1, 5, 5, 8, 99, 42, 0], dtype=float)
|
|
ar_relab, fw, inv = relabel_sequential(ar, offset=5)
|
|
ar_relab_ref = np.array([5, 5, 6, 6, 7, 9, 8, 0])
|
|
assert_array_equal(ar_relab, ar_relab_ref)
|
|
fw_ref = np.zeros(100, int)
|
|
fw_ref[1] = 5; fw_ref[5] = 6; fw_ref[8] = 7; fw_ref[42] = 8; fw_ref[99] = 9
|
|
assert_array_equal(fw, fw_ref)
|
|
inv_ref = np.array([0, 0, 0, 0, 0, 1, 5, 8, 42, 99])
|
|
assert_array_equal(inv, inv_ref)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
np.testing.run_module_suite()
|