mirror of
https://github.com/wassname/scikit-image.git
synced 2026-06-27 23:39:49 +08:00
70 lines
2.0 KiB
Python
70 lines
2.0 KiB
Python
import numpy as np
|
|
from scipy.ndimage import label
|
|
|
|
|
|
def clear_border(image, buffer_size=0, bgval=0):
|
|
"""Clear objects connected to image border.
|
|
|
|
The changes will be applied to the input image.
|
|
|
|
Parameters
|
|
----------
|
|
image : (N, M) array
|
|
Binary image.
|
|
buffer_size : int, optional
|
|
Define additional buffer around image border.
|
|
bgval : float or int, optional
|
|
Value for cleared objects.
|
|
|
|
Returns
|
|
-------
|
|
image : (N, M) array
|
|
Cleared binary image.
|
|
|
|
Examples
|
|
--------
|
|
>>> import numpy as np
|
|
>>> from skimage.segmentation import clear_border
|
|
>>> image = np.array([[0, 0, 0, 0, 0, 0, 0, 1, 0],
|
|
... [0, 0, 0, 0, 1, 0, 0, 0, 0],
|
|
... [1, 0, 0, 1, 0, 1, 0, 0, 0],
|
|
... [0, 0, 1, 1, 1, 1, 1, 0, 0],
|
|
... [0, 1, 1, 1, 1, 1, 1, 1, 0],
|
|
... [0, 0, 0, 0, 0, 0, 0, 0, 0]])
|
|
>>> clear_border(image)
|
|
array([[0, 0, 0, 0, 0, 0, 0, 0, 0],
|
|
[0, 0, 0, 0, 1, 0, 0, 0, 0],
|
|
[0, 0, 0, 1, 0, 1, 0, 0, 0],
|
|
[0, 0, 1, 1, 1, 1, 1, 0, 0],
|
|
[0, 1, 1, 1, 1, 1, 1, 1, 0],
|
|
[0, 0, 0, 0, 0, 0, 0, 0, 0]])
|
|
|
|
"""
|
|
|
|
rows, cols = image.shape
|
|
if buffer_size >= rows or buffer_size >= cols:
|
|
raise ValueError("buffer size may not be greater than image size")
|
|
|
|
# create borders with buffer_size
|
|
borders = np.zeros_like(image, dtype=np.bool_)
|
|
ext = buffer_size + 1
|
|
borders[:ext] = True
|
|
borders[- ext:] = True
|
|
borders[:, :ext] = True
|
|
borders[:, - ext:] = True
|
|
|
|
labels, number = label(image)
|
|
|
|
# determine all objects that are connected to borders
|
|
borders_indices = np.unique(labels[borders])
|
|
indices = np.arange(number + 1)
|
|
# mask all label indices that are connected to borders
|
|
label_mask = np.in1d(indices, borders_indices)
|
|
# create mask for pixels to clear
|
|
mask = label_mask[labels.ravel()].reshape(labels.shape)
|
|
|
|
# clear border pixels
|
|
image[mask] = bgval
|
|
|
|
return image
|