From 257cf9585b1d98bfb2667afd1f31b938878df43c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Johannes=20Sch=C3=B6nberger?= Date: Sat, 22 Dec 2012 20:07:36 +0100 Subject: [PATCH 1/3] Fix typo bug in perimeter function --- skimage/measure/_regionprops.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/skimage/measure/_regionprops.py b/skimage/measure/_regionprops.py index d285d453..b523e2e0 100644 --- a/skimage/measure/_regionprops.py +++ b/skimage/measure/_regionprops.py @@ -440,14 +440,14 @@ def perimeter(image, neighbourhood=4): strel = STREL_4 else: strel = STREL_8 - eroded_image = ndimage.binary_erosion(image, strel) + eroded_image = ndimage.binary_erosion(image, strel, border_value=0) border_image = image - eroded_image # perimeter contribution: corresponding values in convolved image perimeter_weights = { - 1: (5, 7, 15, 17, 25, 27), - sqrt(2): (21, 33), - 1 + sqrt(2) / 2: (13, 23) + 1: (5, 7, 15, 17, 25, 27), + sqrt(2): (21, 33), + (1 + sqrt(2)) / 2: (13, 23) } perimeter_image = ndimage.convolve(border_image, np.array([[10, 2, 10], [ 2, 1, 2], From 61ab5ed07755d03bfb2e6d63f508ae01995f26db Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Johannes=20Sch=C3=B6nberger?= Date: Sat, 22 Dec 2012 20:08:06 +0100 Subject: [PATCH 2/3] Fix convolution bug in perimeter function --- skimage/measure/_regionprops.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/skimage/measure/_regionprops.py b/skimage/measure/_regionprops.py index b523e2e0..72d1e2f4 100644 --- a/skimage/measure/_regionprops.py +++ b/skimage/measure/_regionprops.py @@ -451,7 +451,8 @@ def perimeter(image, neighbourhood=4): } perimeter_image = ndimage.convolve(border_image, np.array([[10, 2, 10], [ 2, 1, 2], - [10, 2, 10]])) + [10, 2, 10]]), + mode='constant', cval=0) total_perimeter = 0 for weight, values in perimeter_weights.items(): num_values = 0 From fb9099eec3ae5ebabc70b1bcd0da59920d5ee194 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Johannes=20Sch=C3=B6nberger?= Date: Sat, 22 Dec 2012 20:09:29 +0100 Subject: [PATCH 3/3] Update perimeter test case which was correct for buggy previous version --- skimage/measure/tests/test_regionprops.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/skimage/measure/tests/test_regionprops.py b/skimage/measure/tests/test_regionprops.py index bd23d8b3..8185bf67 100644 --- a/skimage/measure/tests/test_regionprops.py +++ b/skimage/measure/tests/test_regionprops.py @@ -246,10 +246,10 @@ def test_orientation(): def test_perimeter(): per = regionprops(SAMPLE, ['Perimeter'])[0]['Perimeter'] - assert_almost_equal(per, 59.2132034355964) + assert_almost_equal(per, 55.2487373415) per = perimeter(SAMPLE.astype('double'), neighbourhood=8) - assert_almost_equal(per, 43.1213203436) + assert_almost_equal(per, 46.8284271247) def test_solidity():