106 lines
3.8 KiB
Python
106 lines
3.8 KiB
Python
import numpy as np
|
|
import pytest
|
|
|
|
from skimage.util.compare import compare_images
|
|
from skimage._shared.testing import assert_stacklevel
|
|
|
|
|
|
def test_compare_images_ValueError_shape():
|
|
img1 = np.zeros((10, 10), dtype=np.uint8)
|
|
img2 = np.zeros((10, 1), dtype=np.uint8)
|
|
with pytest.raises(ValueError):
|
|
compare_images(img1, img2)
|
|
|
|
|
|
def test_compare_images_ValueError_args():
|
|
a = np.ones((10, 10)) * 3
|
|
b = np.zeros((10, 10))
|
|
with pytest.raises(ValueError):
|
|
compare_images(a, b, method="unknown")
|
|
|
|
|
|
def test_compare_images_diff():
|
|
img1 = np.zeros((10, 10), dtype=np.uint8)
|
|
img1[3:8, 3:8] = 255
|
|
img2 = np.zeros_like(img1)
|
|
img2[3:8, 0:8] = 255
|
|
expected_result = np.zeros_like(img1, dtype=np.float64)
|
|
expected_result[3:8, 0:3] = 1
|
|
result = compare_images(img1, img2, method='diff')
|
|
np.testing.assert_array_equal(result, expected_result)
|
|
|
|
|
|
def test_compare_images_replaced_param():
|
|
img1 = np.zeros((10, 10), dtype=np.uint8)
|
|
img1[3:8, 3:8] = 255
|
|
img2 = np.zeros_like(img1)
|
|
img2[3:8, 0:8] = 255
|
|
expected_result = np.zeros_like(img1, dtype=np.float64)
|
|
expected_result[3:8, 0:3] = 1
|
|
|
|
regex = ".*Please use `image0, image1`.*"
|
|
with pytest.warns(FutureWarning, match=regex) as record:
|
|
result = compare_images(image1=img1, image2=img2)
|
|
assert_stacklevel(record)
|
|
np.testing.assert_array_equal(result, expected_result)
|
|
|
|
with pytest.warns(FutureWarning, match=regex) as record:
|
|
result = compare_images(image0=img1, image2=img2)
|
|
assert_stacklevel(record)
|
|
np.testing.assert_array_equal(result, expected_result)
|
|
|
|
with pytest.warns(FutureWarning, match=regex) as record:
|
|
result = compare_images(img1, image2=img2)
|
|
assert_stacklevel(record)
|
|
np.testing.assert_array_equal(result, expected_result)
|
|
|
|
# Test making "method" keyword-only here as well
|
|
# so whole test can be removed in one go
|
|
regex = ".*Please pass `method=`.*"
|
|
with pytest.warns(FutureWarning, match=regex) as record:
|
|
result = compare_images(img1, img2, "diff")
|
|
assert_stacklevel(record)
|
|
np.testing.assert_array_equal(result, expected_result)
|
|
|
|
|
|
def test_compare_images_blend():
|
|
img1 = np.zeros((10, 10), dtype=np.uint8)
|
|
img1[3:8, 3:8] = 255
|
|
img2 = np.zeros_like(img1)
|
|
img2[3:8, 0:8] = 255
|
|
expected_result = np.zeros_like(img1, dtype=np.float64)
|
|
expected_result[3:8, 3:8] = 1
|
|
expected_result[3:8, 0:3] = 0.5
|
|
result = compare_images(img1, img2, method='blend')
|
|
np.testing.assert_array_equal(result, expected_result)
|
|
|
|
|
|
def test_compare_images_checkerboard_default():
|
|
img1 = np.zeros((2**4, 2**4), dtype=np.uint8)
|
|
img2 = np.full(img1.shape, fill_value=255, dtype=np.uint8)
|
|
res = compare_images(img1, img2, method='checkerboard')
|
|
# fmt: off
|
|
exp_row1 = np.array([0., 0., 1., 1., 0., 0., 1., 1., 0., 0., 1., 1., 0., 0., 1., 1.])
|
|
exp_row2 = np.array([1., 1., 0., 0., 1., 1., 0., 0., 1., 1., 0., 0., 1., 1., 0., 0.])
|
|
# fmt: on
|
|
for i in (0, 1, 4, 5, 8, 9, 12, 13):
|
|
np.testing.assert_array_equal(res[i, :], exp_row1)
|
|
for i in (2, 3, 6, 7, 10, 11, 14, 15):
|
|
np.testing.assert_array_equal(res[i, :], exp_row2)
|
|
|
|
|
|
def test_compare_images_checkerboard_tuple():
|
|
img1 = np.zeros((2**4, 2**4), dtype=np.uint8)
|
|
img2 = np.full(img1.shape, fill_value=255, dtype=np.uint8)
|
|
res = compare_images(img1, img2, method='checkerboard', n_tiles=(4, 8))
|
|
exp_row1 = np.array(
|
|
[0.0, 0.0, 1.0, 1.0, 0.0, 0.0, 1.0, 1.0, 0.0, 0.0, 1.0, 1.0, 0.0, 0.0, 1.0, 1.0]
|
|
)
|
|
exp_row2 = np.array(
|
|
[1.0, 1.0, 0.0, 0.0, 1.0, 1.0, 0.0, 0.0, 1.0, 1.0, 0.0, 0.0, 1.0, 1.0, 0.0, 0.0]
|
|
)
|
|
for i in (0, 1, 2, 3, 8, 9, 10, 11):
|
|
np.testing.assert_array_equal(res[i, :], exp_row1)
|
|
for i in (4, 5, 6, 7, 12, 13, 14, 15):
|
|
np.testing.assert_array_equal(res[i, :], exp_row2)
|