From 99fb8b992e9635fb596754c5b63da382b069a3c0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Johannes=20Sch=C3=B6nberger?= Date: Wed, 2 Oct 2013 13:55:52 +0200 Subject: [PATCH 1/4] Some improvements for perimeter --- skimage/measure/_regionprops.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/skimage/measure/_regionprops.py b/skimage/measure/_regionprops.py index 0156a6bc..e89d33e0 100644 --- a/skimage/measure/_regionprops.py +++ b/skimage/measure/_regionprops.py @@ -13,8 +13,8 @@ __all__ = ['regionprops'] STREL_4 = np.array([[0, 1, 0], [1, 1, 1], - [0, 1, 0]]) -STREL_8 = np.ones((3, 3), 'int8') + [0, 1, 0]], dtype=np.uint8) +STREL_8 = np.ones((3, 3), dtype=np.uint8) PROPS = { 'Area': 'area', 'BoundingBox': 'bbox', @@ -498,14 +498,14 @@ def perimeter(image, neighbourhood=4): Parameters ---------- image : array - binary image + Binary image. neighbourhood : 4 or 8, optional - neighbourhood connectivity for border pixel determination, default 4 + Neighborhood connectivity for border pixel determination. Returns ------- perimeter : float - total perimeter of all objects in binary image + Total perimeter of all objects in binary image. References ---------- @@ -521,7 +521,7 @@ def perimeter(image, neighbourhood=4): eroded_image = ndimage.binary_erosion(image, strel, border_value=0) border_image = image - eroded_image - perimeter_weights = np.zeros(50, float) + perimeter_weights = np.zeros(50, dtype=np.float32) perimeter_weights[[5, 7, 15, 17, 25, 27]] = 1 perimeter_weights[[21, 33]] = sqrt(2) perimeter_weights[[13, 23]] = (1 + sqrt(2)) / 2 From c1ea012c9b6fddd60093db194fd6f3979970a82b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Johannes=20Sch=C3=B6nberger?= Date: Wed, 2 Oct 2013 13:56:32 +0200 Subject: [PATCH 2/4] Add support for unsigned integer label images --- skimage/measure/_regionprops.py | 2 -- skimage/measure/tests/test_regionprops.py | 4 +++- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/skimage/measure/_regionprops.py b/skimage/measure/_regionprops.py index e89d33e0..93abc816 100644 --- a/skimage/measure/_regionprops.py +++ b/skimage/measure/_regionprops.py @@ -470,8 +470,6 @@ def regionprops(label_image, properties=None, >>> props[0].centroid # centroid of first labelled object >>> props[0]['centroid'] # centroid of first labelled object """ - if not np.issubdtype(label_image.dtype, 'int'): - raise TypeError('Labelled image must be of integer dtype.') if properties is not None: warnings.warn('The ``properties`` argument is deprecated and is ' diff --git a/skimage/measure/tests/test_regionprops.py b/skimage/measure/tests/test_regionprops.py index da6bb421..c21418ab 100644 --- a/skimage/measure/tests/test_regionprops.py +++ b/skimage/measure/tests/test_regionprops.py @@ -28,7 +28,9 @@ def test_all_props(): regions[prop] -def test_unsupported_dtype(): +def test_dtype(): + regionprops(np.zeros((10, 10), dtype=np.int)) + regionprops(np.zeros((10, 10), dtype=np.uint)) assert_raises(TypeError, regionprops, np.zeros((10, 10), dtype=np.double)) From d7824000fe92f50b565a9c6a7d49006814101ac0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Johannes=20Sch=C3=B6nberger?= Date: Wed, 2 Oct 2013 14:14:29 +0200 Subject: [PATCH 3/4] Raise error for non 2-D images --- skimage/measure/_regionprops.py | 5 +++++ skimage/measure/tests/test_regionprops.py | 7 +++++++ 2 files changed, 12 insertions(+) diff --git a/skimage/measure/_regionprops.py b/skimage/measure/_regionprops.py index 93abc816..884311b1 100644 --- a/skimage/measure/_regionprops.py +++ b/skimage/measure/_regionprops.py @@ -471,6 +471,11 @@ def regionprops(label_image, properties=None, >>> props[0]['centroid'] # centroid of first labelled object """ + label_image = np.squeeze(label_image) + + if label_image.ndim != 2: + raise TypeError('Only 2-D images supported.') + if properties is not None: warnings.warn('The ``properties`` argument is deprecated and is ' 'not needed any more as properties are ' diff --git a/skimage/measure/tests/test_regionprops.py b/skimage/measure/tests/test_regionprops.py index c21418ab..647c09a7 100644 --- a/skimage/measure/tests/test_regionprops.py +++ b/skimage/measure/tests/test_regionprops.py @@ -34,6 +34,13 @@ def test_dtype(): assert_raises(TypeError, regionprops, np.zeros((10, 10), dtype=np.double)) +def test_ndim(): + regionprops(np.zeros((10, 10), dtype=np.int)) + regionprops(np.zeros((10, 10, 1), dtype=np.int)) + regionprops(np.zeros((10, 10, 1, 1), dtype=np.int)) + assert_raises(TypeError, regionprops, np.zeros((10, 10, 2), dtype=np.int)) + + def test_area(): area = regionprops(SAMPLE)[0].area assert area == np.sum(SAMPLE) From 78a849cc37258dcee85d24e31eb9dea2a9851b7a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Johannes=20Sch=C3=B6nberger?= Date: Wed, 2 Oct 2013 14:16:24 +0200 Subject: [PATCH 4/4] Fix dtype bug in perimeter --- skimage/measure/_regionprops.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/skimage/measure/_regionprops.py b/skimage/measure/_regionprops.py index 884311b1..9078df6f 100644 --- a/skimage/measure/_regionprops.py +++ b/skimage/measure/_regionprops.py @@ -524,7 +524,7 @@ def perimeter(image, neighbourhood=4): eroded_image = ndimage.binary_erosion(image, strel, border_value=0) border_image = image - eroded_image - perimeter_weights = np.zeros(50, dtype=np.float32) + perimeter_weights = np.zeros(50, dtype=np.double) perimeter_weights[[5, 7, 15, 17, 25, 27]] = 1 perimeter_weights[[21, 33]] = sqrt(2) perimeter_weights[[13, 23]] = (1 + sqrt(2)) / 2