mirror of
https://github.com/wassname/scikit-image.git
synced 2026-06-29 03:37:34 +08:00
106 lines
3.1 KiB
Python
106 lines
3.1 KiB
Python
import numpy as np
|
|
from numpy.testing import assert_array_equal, run_module_suite
|
|
|
|
from skimage.morphology import label
|
|
from warnings import catch_warnings
|
|
from skimage._shared.utils import skimage_deprecation
|
|
|
|
np.random.seed(0)
|
|
|
|
|
|
class TestConnectedComponents:
|
|
def setup(self):
|
|
self.x = np.array([[0, 0, 3, 2, 1, 9],
|
|
[0, 1, 1, 9, 2, 9],
|
|
[0, 0, 1, 9, 9, 9],
|
|
[3, 1, 1, 5, 3, 0]])
|
|
|
|
self.labels = np.array([[0, 0, 1, 2, 3, 4],
|
|
[0, 5, 5, 4, 2, 4],
|
|
[0, 0, 5, 4, 4, 4],
|
|
[6, 5, 5, 7, 8, 9]])
|
|
|
|
def test_basic(self):
|
|
assert_array_equal(label(self.x), self.labels)
|
|
|
|
# Make sure data wasn't modified
|
|
assert self.x[0, 2] == 3
|
|
|
|
def test_random(self):
|
|
x = (np.random.rand(20, 30) * 5).astype(np.int)
|
|
|
|
with catch_warnings():
|
|
labels = label(x)
|
|
|
|
n = labels.max()
|
|
for i in range(n):
|
|
values = x[labels == i]
|
|
assert np.all(values == values[0])
|
|
|
|
def test_diag(self):
|
|
x = np.array([[0, 0, 1],
|
|
[0, 1, 0],
|
|
[1, 0, 0]])
|
|
with catch_warnings():
|
|
assert_array_equal(label(x), x)
|
|
|
|
def test_4_vs_8(self):
|
|
x = np.array([[0, 1],
|
|
[1, 0]], dtype=int)
|
|
with catch_warnings():
|
|
assert_array_equal(label(x, 4),
|
|
[[0, 1],
|
|
[2, 3]])
|
|
assert_array_equal(label(x, 8),
|
|
[[0, 1],
|
|
[1, 0]])
|
|
|
|
def test_background(self):
|
|
x = np.array([[1, 0, 0],
|
|
[1, 1, 5],
|
|
[0, 0, 0]])
|
|
|
|
with catch_warnings():
|
|
assert_array_equal(label(x), [[0, 1, 1],
|
|
[0, 0, 2],
|
|
[3, 3, 3]])
|
|
|
|
assert_array_equal(label(x, background=0),
|
|
[[0, -1, -1],
|
|
[0, 0, 1],
|
|
[-1, -1, -1]])
|
|
|
|
def test_background_two_regions(self):
|
|
x = np.array([[0, 0, 6],
|
|
[0, 0, 6],
|
|
[5, 5, 5]])
|
|
|
|
assert_array_equal(label(x, background=0),
|
|
[[-1, -1, 0],
|
|
[-1, -1, 0],
|
|
[ 1, 1, 1]])
|
|
|
|
def test_background_one_region_center(self):
|
|
x = np.array([[0, 0, 0],
|
|
[0, 1, 0],
|
|
[0, 0, 0]])
|
|
|
|
assert_array_equal(label(x, neighbors=4, background=0),
|
|
[[-1, -1, -1],
|
|
[-1, 0, -1],
|
|
[-1, -1, -1]])
|
|
|
|
def test_return_num(self):
|
|
x = np.array([[1, 0, 6],
|
|
[0, 0, 6],
|
|
[5, 5, 5]])
|
|
|
|
with catch_warnings():
|
|
assert_array_equal(label(x, return_num=True)[1], 4)
|
|
|
|
assert_array_equal(label(x, background=0, return_num=True)[1], 3)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
run_module_suite()
|