CofeehousePy/deps/scikit-image/skimage/util/tests/test_montage.py

149 lines
4.6 KiB
Python

from skimage._shared import testing
from skimage._shared.testing import assert_equal, assert_array_equal
from skimage._shared._warnings import expected_warnings
import numpy as np
from skimage.util import montage
def test_montage_simple_gray():
n_images, n_rows, n_cols = 3, 2, 3
arr_in = np.arange(n_images * n_rows * n_cols, dtype=float)
arr_in = arr_in.reshape(n_images, n_rows, n_cols)
arr_out = montage(arr_in)
arr_ref = np.array(
[[ 0. , 1. , 2. , 6. , 7. , 8. ],
[ 3. , 4. , 5. , 9. , 10. , 11. ],
[ 12. , 13. , 14. , 8.5, 8.5, 8.5],
[ 15. , 16. , 17. , 8.5, 8.5, 8.5]]
)
assert_array_equal(arr_out, arr_ref)
def test_montage_simple_rgb():
n_images, n_rows, n_cols, n_channels = 2, 2, 2, 2
arr_in = np.arange(
n_images * n_rows * n_cols * n_channels,
dtype=float,
)
arr_in = arr_in.reshape(n_images, n_rows, n_cols, n_channels)
arr_out = montage(arr_in, multichannel=True)
arr_ref = np.array(
[[[ 0, 1],
[ 2, 3],
[ 8, 9],
[10, 11]],
[[ 4, 5],
[ 6, 7],
[12, 13],
[14, 15]],
[[ 7, 8],
[ 7, 8],
[ 7, 8],
[ 7, 8]],
[[ 7, 8],
[ 7, 8],
[ 7, 8],
[ 7, 8]]]
)
assert_array_equal(arr_out, arr_ref)
def test_montage_fill_gray():
n_images, n_rows, n_cols = 3, 2, 3
arr_in = np.arange(n_images * n_rows * n_cols, dtype=float)
arr_in = arr_in.reshape(n_images, n_rows, n_cols)
arr_out = montage(arr_in, fill=0)
arr_ref = np.array(
[[ 0. , 1. , 2. , 6. , 7. , 8. ],
[ 3. , 4. , 5. , 9. , 10. , 11. ],
[ 12. , 13. , 14. , 0. , 0. , 0. ],
[ 15. , 16. , 17. , 0. , 0. , 0. ]]
)
assert_array_equal(arr_out, arr_ref)
def test_montage_grid_default_gray():
n_images, n_rows, n_cols = 15, 11, 7
arr_in = np.arange(n_images * n_rows * n_cols, dtype=float)
arr_in = arr_in.reshape(n_images, n_rows, n_cols)
n_tiles = int(np.ceil(np.sqrt(n_images)))
arr_out = montage(arr_in)
assert_equal(arr_out.shape, (n_tiles * n_rows, n_tiles * n_cols))
def test_montage_grid_custom_gray():
n_images, n_rows, n_cols = 6, 2, 2
arr_in = np.arange(n_images * n_rows * n_cols, dtype=np.float32)
arr_in = arr_in.reshape(n_images, n_rows, n_cols)
arr_out = montage(arr_in, grid_shape=(3, 2))
arr_ref = np.array(
[[ 0., 1., 4., 5.],
[ 2., 3., 6., 7.],
[ 8., 9., 12., 13.],
[ 10., 11., 14., 15.],
[ 16., 17., 20., 21.],
[ 18., 19., 22., 23.]]
)
assert_array_equal(arr_out, arr_ref)
def test_montage_rescale_intensity_gray():
n_images, n_rows, n_cols = 4, 3, 3
arr_in = np.arange(n_images * n_rows * n_cols, dtype=np.float32)
arr_in = arr_in.reshape(n_images, n_rows, n_cols)
arr_out = montage(arr_in, rescale_intensity=True)
arr_ref = np.array(
[[ 0. , 0.125, 0.25 , 0. , 0.125, 0.25 ],
[ 0.375, 0.5 , 0.625, 0.375, 0.5 , 0.625],
[ 0.75 , 0.875, 1. , 0.75 , 0.875, 1. ],
[ 0. , 0.125, 0.25 , 0. , 0.125, 0.25 ],
[ 0.375, 0.5 , 0.625, 0.375, 0.5 , 0.625],
[ 0.75 , 0.875, 1. , 0.75 , 0.875, 1. ]]
)
assert_equal(arr_out.min(), 0.0)
assert_equal(arr_out.max(), 1.0)
assert_array_equal(arr_out, arr_ref)
def test_montage_simple_padding_gray():
n_images, n_rows, n_cols = 2, 2, 2
arr_in = np.arange(n_images * n_rows * n_cols)
arr_in = arr_in.reshape(n_images, n_rows, n_cols)
arr_out = montage(arr_in, padding_width=1)
arr_ref = np.array(
[[3, 3, 3, 3, 3, 3, 3],
[3, 0, 1, 3, 4, 5, 3],
[3, 2, 3, 3, 6, 7, 3],
[3, 3, 3, 3, 3, 3, 3],
[3, 3, 3, 3, 3, 3, 3],
[3, 3, 3, 3, 3, 3, 3],
[3, 3, 3, 3, 3, 3, 3]]
)
assert_array_equal(arr_out, arr_ref)
def test_error_ndim():
arr_error = np.random.randn(1, 2)
with testing.raises(ValueError):
montage(arr_error)
arr_error = np.random.randn(1, 2, 3, 4)
with testing.raises(ValueError):
montage(arr_error)
arr_error = np.random.randn(1, 2, 3)
with testing.raises(ValueError):
montage(arr_error, multichannel=True)
arr_error = np.random.randn(1, 2, 3, 4, 5)
with testing.raises(ValueError):
montage(arr_error, multichannel=True)