使用skimage从图像中删除轮廓

时间:2016-09-18 11:34:02

标签: python image-processing scikit-image

我想从图片中删除一些轮廓但我不知道如何使用skimage来实现它?我使用OpenCVdrawContour中执行了类似的操作,但我无法在skimage中找到相应内容。

假设我有一个简单的图像,如:

0 0 0 0 0 0 0 0

0 0 1 1 1 1 0 0

0 0 1 0 0 1 0 0

0 0 1 1 1 1 0 0

0 0 0 0 0 0 0 0

只有一个连接组件。

我需要通过屏蔽它来删除它。

最终结果将是一个8 * 5零矩阵!

a = '''0 0 0 0 0 0 0 0                                             
0 0 1 1 1 1 0 0
0 0 1 0 0 1 0 0
0 0 1 1 1 1 0 0
0 0 0 0 0 0 0 0'''
np.array([int(i) for i in a.split()], dtype=bool).reshape(5, 8)
cc = measure.regionprops(measure.label(a))[0]
# here is what I do for removing cc

如何使用cc移除skimage连接的组件?

1 个答案:

答案 0 :(得分:0)

在这种情况下,您需要将图像转换为二进制图像(如您所愿),然后执行以下步骤:

1-填充孔。

2-识别轮廓。

3-使用识别出的轮廓创建黑色蒙版(false或0)。

from skimage import measure, draw
from scipy import ndimage as ndi


# I use this function "ndi.distance_transform_edt(thresh)" to turn my image to a binary image
def remove_contours(binary_image):
    binary_image = ndi.binary_fill_holes(binary_image)
    contours= measure.find_contours(binary_image, 0.9, fully_connected='high',
                                     positive_orientation='low')
    #Fill contours with False. (it could be 0 as well)
    for n, contour in enumerate(contours):
        draw.set_color(binary_image , draw.polygon(contour[:, 0], contour[:, 1]), False)
    return binary_image