我想从图片中删除一些轮廓但我不知道如何使用skimage
来实现它?我使用OpenCV
在drawContour
中执行了类似的操作,但我无法在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
连接的组件?
答案 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