计算语义分割预测掩码中的非重叠对象
数据挖掘
图像分类
图像识别
2022-02-26 12:26:12
2个回答
这可能是其中一种方法(如果您正在寻找确切的解决方案):
我假设图像(您的预测)仅包含两个值:0- 黑色 - 屋顶和255- 白色 - 其他。
然后,这成为计算图的组件的一个简单问题:
从尚未访问的某个黑色节点启动 DFS。遍历所有尚未访问的相邻黑色节点。移动时,记录您访问的黑色节点的数量,并将它们标记为已访问(这样您就不会返回......)。如果有黑色节点开始(它们尚未访问),则重复整个过程。通过这种方式,您可以获得屋顶的总数(这是您从未访问的黑色节点启动 DFS 的次数)和屋顶的总面积(您访问的黑色像素的数量)。
那是经典的DFS问题。这是 Python 中的一个示例:https ://eddmann.com/posts/depth-first-search-and-breadth-first-search-in-python/
如果您的预测很好,这将很有效。实际上,即使您的预测很糟糕,它也会按照我的描述进行,因为它是一个精确的算法。但是您必须以其他方式检查您的预测是否正确。
如果您正在寻找不同类型的解决方案(即不是精确解决方案),有趣的方法是教一个模型计算屋顶的数量并从图像中估计它们的面积。为此,您必须创建一个带有标签图像的数据集:对于每个图像,标签可以是图像上的屋顶总数和所有屋顶的面积。所以,这将是一个回归问题。
我想我使用 scipi 标签功能更优雅地解决了这个问题。https://docs.scipy.org/doc/scipy/reference/generated/scipy.ndimage.label.html
from scipy.ndimage import label
p=pred_y[0, :,:, 0] # contains a prediction result
# normalize threshold to 0 or 1
i = p >= 0.5
p[i] = 1
i = p < 0.5
p[i] = 0
labeled_array, num_features = label(p)
plt.imshow(p, cmap=plt.cm.binary)
print(num_features)
产生 15 的估计值。
其它你可能感兴趣的问题

