diff --git a/skimage/morphology/misc.py b/skimage/morphology/misc.py index e1517e9c..da27eae9 100644 --- a/skimage/morphology/misc.py +++ b/skimage/morphology/misc.py @@ -38,7 +38,7 @@ def default_selem(func): return func_out -def _supported_types(ar): +def _check_dtype_supported(ar): # Should use `issubdtype` for bool below, but there's a bug in numpy 1.7 if not (ar.dtype == bool or np.issubdtype(ar.dtype, np.integer)): raise TypeError("Only bool or integer image types are supported. " @@ -94,7 +94,7 @@ def remove_small_objects(ar, min_size=64, connectivity=1, in_place=False): True """ # Raising type error if not int or bool - _supported_types(ar) + _check_dtype_supported(ar) if in_place: out = ar @@ -129,8 +129,7 @@ def remove_small_objects(ar, min_size=64, connectivity=1, in_place=False): return out def remove_small_holes(ar, min_size=64, connectivity=1, in_place=False): - """Remove connected components smaller than the specified size within a - larger connected object. + """Remove continguous holes smaller than the specified size. Parameters ---------- @@ -183,25 +182,31 @@ def remove_small_holes(ar, min_size=64, connectivity=1, in_place=False): >>> d is a True """ - _supported_types(ar) - - if in_place: - out = ar - else: - out = ar.copy() + _check_dtype_supported(ar) #Creates warning if image is an integer image if ar.dtype != bool: warnings.warn("Any labeled images will be returned as a boolean array. " "Did you mean to use a boolean array?", UserWarning) + if in_place: + out = ar + else: + out = ar.copy() + #Creating the inverse of ar - out = np.logical_not(out) + if in_place: + out = np.logical_not(out,out) + else: + out = np.logical_not(out) #removing small objects from the inverse of ar out = remove_small_objects(out, min_size, connectivity, in_place) - out = np.logical_not(out) + if in_place: + out = np.logical_not(out,out) + else: + out = np.logical_not(out) return out \ No newline at end of file diff --git a/skimage/morphology/tests/test_misc.py b/skimage/morphology/tests/test_misc.py index 93e7b27a..0c16f5a2 100644 --- a/skimage/morphology/tests/test_misc.py +++ b/skimage/morphology/tests/test_misc.py @@ -162,7 +162,7 @@ def test_label_warning_holes(): [0,0,0,0,0,0,0,2,2,2], [0,0,0,0,0,0,0,2,0,2], [0,0,0,0,0,0,0,2,2,2]], dtype=int) - assert_warns(UserWarning, remove_small_holes, labeled_holes_image, min_size=3) + assert_warns(UserWarning, remove_small_holes, labeled_holes_image) def test_float_input_holes(): float_test = np.random.rand(5, 5)