【发布时间】:2018-12-11 18:12:31
【问题描述】:
我的数据由 numpy matrizes 组成,而白色由 1 表示,黑色由 0 表示。我想在这些图像中提取身体。我可以假设身体始终是图像中最大的连贯区域。
是否有现有的算法或者我应该创建自己的算法?
【问题讨论】:
-
你应该探索 OpenCV。您可以玩形态学运算,然后使用 findcountours 函数。每个轮廓可以被隔离,或者按区域过滤等
我的数据由 numpy matrizes 组成,而白色由 1 表示,黑色由 0 表示。我想在这些图像中提取身体。我可以假设身体始终是图像中最大的连贯区域。
是否有现有的算法或者我应该创建自己的算法?
【问题讨论】:
我们可以使用skimage.measure 的label 和regionprops 两种方法。因此,将im 作为2D 输入图像,我们将得到如下所示的图像。
方法 #1 使用 label 和 numpy.bincount -
from skimage.measure import label, regionprops
l = label(im)
out = (l==np.bincount(l.ravel())[1:].argmax()+1).astype(int)
方法 #2 使用 label 和 regionprops -
r = regionprops(l) # l is from previous approach
out = (l==(1+np.argmax([i.area for i in r]))).astype(int)
给定样本的输出 -
【讨论】: