From 6635cf16db1eede5c7dd6e993da91d893c882964 Mon Sep 17 00:00:00 2001 From: Emmanuelle Gouillart Date: Tue, 18 Sep 2012 19:56:52 +0200 Subject: [PATCH] [BUG] Corrected a bug in the random walker that appeared * when returning the full probability instead of the segmentation * for three or more labels (two was OK) --- skimage/segmentation/random_walker_segmentation.py | 3 +-- skimage/segmentation/tests/test_random_walker.py | 9 +++++++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/skimage/segmentation/random_walker_segmentation.py b/skimage/segmentation/random_walker_segmentation.py index 52bf4425..01113f6f 100644 --- a/skimage/segmentation/random_walker_segmentation.py +++ b/skimage/segmentation/random_walker_segmentation.py @@ -401,9 +401,8 @@ def random_walker(data, labels, beta=130, mode='bf', tol=1.e-3, copy=True, copy=True).reshape(dims) for Xline in X]) for i in range(1, int(labels.max()) + 1): mask_i = np.squeeze(labels == i) + X[:, mask_i] = 0 X[i - 1, mask_i] = 1 - X[np.setdiff1d(np.arange(0, labels.max(), dtype=np.int), - [i - 1]), mask_i] = 0 else: X = _clean_labels_ar(X + 1, labels).reshape(dims) return X diff --git a/skimage/segmentation/tests/test_random_walker.py b/skimage/segmentation/tests/test_random_walker.py index ecf59e99..7df0241c 100644 --- a/skimage/segmentation/tests/test_random_walker.py +++ b/skimage/segmentation/tests/test_random_walker.py @@ -58,8 +58,13 @@ def test_2d_bf(): return_full_prob=True) assert (full_prob_bf[1, 25:45, 40:60] >= full_prob_bf[0, 25:45, 40:60]).all() - return data, labels_bf, full_prob_bf - + # Now test with more than two labels + labels[55, 80] = 3 + full_prob_bf = random_walker(data, labels, beta=90, mode='bf', + return_full_prob=True) + assert (full_prob_bf[1, 25:45, 40:60] >= + full_prob_bf[0, 25:45, 40:60]).all() + assert len(full_prob_bf) == 3 def test_2d_cg(): lx = 70