diff --git a/skimage/measure/_regionprops.py b/skimage/measure/_regionprops.py index d285d453..72d1e2f4 100644 --- a/skimage/measure/_regionprops.py +++ b/skimage/measure/_regionprops.py @@ -440,18 +440,19 @@ 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], - [10, 2, 10]])) + [10, 2, 10]]), + mode='constant', cval=0) total_perimeter = 0 for weight, values in perimeter_weights.items(): num_values = 0 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():