From 57e37352cb3b3a49ee1c2ace6223136b8679c47c Mon Sep 17 00:00:00 2001 From: Andreas Mueller Date: Sun, 20 Oct 2013 15:15:36 -0700 Subject: [PATCH] FIX add missing min_size parameter, add regression test. --- skimage/segmentation/_felzenszwalb.py | 3 +-- .../segmentation/tests/test_felzenszwalb.py | 20 +++++++++++++++++++ 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/skimage/segmentation/_felzenszwalb.py b/skimage/segmentation/_felzenszwalb.py index 67971a96..56642f8d 100644 --- a/skimage/segmentation/_felzenszwalb.py +++ b/skimage/segmentation/_felzenszwalb.py @@ -43,10 +43,9 @@ def felzenszwalb(image, scale=1, sigma=0.8, min_size=20): Huttenlocher, D.P. International Journal of Computer Vision, 2004 """ - #image = img_as_float(image) if image.ndim == 2: # assume single channel image - return _felzenszwalb_grey(image, scale=scale, sigma=sigma) + return _felzenszwalb_grey(image, scale=scale, sigma=sigma, min_size=min_size) elif image.ndim != 3: raise ValueError("Felzenswalb segmentation can only operate on RGB and" diff --git a/skimage/segmentation/tests/test_felzenszwalb.py b/skimage/segmentation/tests/test_felzenszwalb.py index 9fd0b018..5324995d 100644 --- a/skimage/segmentation/tests/test_felzenszwalb.py +++ b/skimage/segmentation/tests/test_felzenszwalb.py @@ -1,7 +1,9 @@ import numpy as np from numpy.testing import assert_equal, assert_array_equal + from skimage._shared.testing import assert_greater from skimage.segmentation import felzenszwalb +from skimage import data def test_grey(): @@ -18,6 +20,24 @@ def test_grey(): hist = np.histogram(img[seg == i], bins=[0, 0.1, 0.3, 0.5, 1])[0] assert_greater(hist[i], 40) +def test_minsize(): + # single-channel: + img = data.coins()[20:168,0:128] + for min_size in np.arange(10, 100, 10): + segments = felzenszwalb(img, min_size=min_size, sigma=3) + counts = np.bincount(segments.ravel()) + # actually want to test greater or equal. + assert_greater(counts.min() + 1, min_size) + # multi-channel: + coffee = data.coffee()[::4, ::4] + for min_size in np.arange(10, 100, 10): + segments = felzenszwalb(coffee, min_size=min_size, sigma=3) + counts = np.bincount(segments.ravel()) + # actually want to test greater or equal. + # the construction doesn't guarantee min_size is respected + # after intersecting the sementations for the colors + assert_greater(np.mean(counts) + 1, min_size) + def test_color(): # very weak tests. This algorithm is pretty unstable.