diff --git a/skimage/filter/tests/test_denoise.py b/skimage/filter/tests/test_denoise.py index 63a5a5e0..03c8c58a 100644 --- a/skimage/filter/tests/test_denoise.py +++ b/skimage/filter/tests/test_denoise.py @@ -9,24 +9,17 @@ lena_gray = color.rgb2gray(lena) def test_denoise_tv_2d(): - # lena image img = lena_gray - # add noise to lena + # add some random noise img += 0.5 * img.std() * np.random.random(img.shape) - # clip noise so that it does not exceed allowed range for float images. img = np.clip(img, 0, 1) - # denoise - denoised_lena = filter.denoise_tv(img, weight=60.0) - # which dtype? - assert denoised_lena.dtype in [np.float, np.float32, np.float64] - from scipy import ndimage - grad = ndimage.morphological_gradient(img, size=((3, 3))) - grad_denoised = ndimage.morphological_gradient( - denoised_lena, size=((3, 3))) - # test if the total variation has decreased - assert grad_denoised.dtype == np.float - assert (np.sqrt((grad_denoised**2).sum()) - < np.sqrt((grad**2).sum()) / 2) + + out1 = filter.denoise_tv(img, weight=10) + out2 = filter.denoise_tv(img, weight=5) + + # make sure noise is reduced + assert img.std() > out1.std() + assert out1.std() > out2.std() def test_denoise_tv_float_result_range(): @@ -42,20 +35,17 @@ def test_denoise_tv_float_result_range(): def test_denoise_tv_3d(): - """Apply the TV denoising algorithm on a 3D image representing a sphere.""" - x, y, z = np.ogrid[0:40, 0:40, 0:40] - mask = (x - 22)**2 + (y - 20)**2 + (z - 17)**2 < 8**2 - mask = 100 * mask.astype(np.float) - mask += 60 - mask += 20 * np.random.random(mask.shape) - mask[mask < 0] = 0 - mask[mask > 255] = 255 - res = filter.denoise_tv(mask.astype(np.uint8), weight=100) - assert res.dtype == np.float - assert res.std() * 255 < mask.std() + img = lena + # add some random noise + img += 0.5 * img.std() * np.random.random(img.shape) + img = np.clip(img, 0, 1) - # test wrong number of dimensions - assert_raises(ValueError, filter.denoise_tv, np.random.random((8, 8, 8, 8))) + out1 = filter.denoise_tv(img, weight=10) + out2 = filter.denoise_tv(img, weight=5) + + # make sure noise is reduced + assert img.std() > out1.std() + assert out1.std() > out2.std() def test_denoise_bilateral_2d():