填充靠近图像区域的元素
Fill the elements close to the region of the image
我有黑白图像,其中有一些白色元素触及图像的边界。
我正在尝试用黑色填充这些白色部分(在此图像上只有一个部分,但可以有多个)。我唯一的想法是遍历图像边界上的像素,每当我看到一个白色像素时 运行 递归填充周围白色像素的所有白色像素的算法。
虽然这显然会产生我想要的结果,但我希望有一个更简单的方法来实现这个 numpy/scipy/scikit-image。
在搜索 SO 时,我发现的唯一相关问题是 this。这个问题听起来和我想要的差不多,但实际上解决了另一个问题。有没有希望为我找到一个简单的解决方案?
试一试 scipy.ndimage.label。
这是一个草图(未经测试):
labeled_image, _ = scipy.ndimage.label(binarized_image)
for region in np.union1d(labeled_image[[0,-1]].flatten(),
labeled_image[:,[0,-1]].flatten()):
binarized_image[labeled_image == region] = 0
以上代码将图像分割成相同颜色的连接区域。每个都按某种顺序分配一个整数值。 labeled_image[[0, -1]]
和 labeled_image[:, [0, -1]]
分别是图像的顶行和底行,以及图像的左列和右列。 array.flatten()
用于使它们成为 union1d 可用的形状,在此上下文中,它将 return 所有与边界接触的区域标签。我们迭代这些,并在二值化图像中将所有这些区域涂成黑色。
编辑:
对不起我的误会。我认为您正在寻找模块 clear_border.
Clear_border(image) 用黑色(或其他值)填充所有附加到边框的白色区域。
import numpy as np
from skimage import io
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, 1, 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)
io.imshow(image)
io.show()
更多信息请查看:
http://scikit-image.org/docs/0.11.x/api/skimage.segmentation.html#clear-border
我有黑白图像,其中有一些白色元素触及图像的边界
我正在尝试用黑色填充这些白色部分(在此图像上只有一个部分,但可以有多个)。我唯一的想法是遍历图像边界上的像素,每当我看到一个白色像素时 运行 递归填充周围白色像素的所有白色像素的算法。
虽然这显然会产生我想要的结果,但我希望有一个更简单的方法来实现这个 numpy/scipy/scikit-image。
在搜索 SO 时,我发现的唯一相关问题是 this。这个问题听起来和我想要的差不多,但实际上解决了另一个问题。有没有希望为我找到一个简单的解决方案?
试一试 scipy.ndimage.label。
这是一个草图(未经测试):
labeled_image, _ = scipy.ndimage.label(binarized_image)
for region in np.union1d(labeled_image[[0,-1]].flatten(),
labeled_image[:,[0,-1]].flatten()):
binarized_image[labeled_image == region] = 0
以上代码将图像分割成相同颜色的连接区域。每个都按某种顺序分配一个整数值。 labeled_image[[0, -1]]
和 labeled_image[:, [0, -1]]
分别是图像的顶行和底行,以及图像的左列和右列。 array.flatten()
用于使它们成为 union1d 可用的形状,在此上下文中,它将 return 所有与边界接触的区域标签。我们迭代这些,并在二值化图像中将所有这些区域涂成黑色。
编辑:
对不起我的误会。我认为您正在寻找模块 clear_border.
Clear_border(image) 用黑色(或其他值)填充所有附加到边框的白色区域。
import numpy as np
from skimage import io
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, 1, 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)
io.imshow(image)
io.show()
更多信息请查看: http://scikit-image.org/docs/0.11.x/api/skimage.segmentation.html#clear-border