剔除面积比小于阈值python的连通像素数

Eliminating number of connected pixels with ratio of area smaller than a treshold python

我正在寻找这个问题中的以下示例:Eliminating number of connected pixels smaller than some specified number threshold 这与我需要的非常接近。

但是,那里的分析仅基于连接像素的数量,假设现在我想连同低于一定数量像素的区域以及纵横比不同于“方形”。

例如在下图(左面板)中 example output 假设我有一条 1900 像素的红线,这意味着使用阈值

# now remove the labels
for label,size in enumerate(label_size):
    if size < 1800:
        Z[Zlabeled == label] = 0

红线不会被消除。但是如果现在我增加阈值(假设为 2000),我可能会同时消除右侧面板上的两个大数字,这是我想要的输出。我需要如何修改代码以同时考虑连接组件的纵横比?

提前致谢:

一种可能的解决方案是使用以这种方式完成的连通分量分析

from scipy.ndimage.measurements import label
structure = np.ones((3, 3), dtype=np.int)


labeled, ncomponents = label(Z, structure)



indices = np.indices(Z.shape).T[:,:,[1, 0]]





for i in range(1,ncomponents):
    pixelcount = (np.sum(labeled==i))

    xs = indices[labeled==i][:,0]
    ys = indices[labeled==i][:,1]
    area = (np.max(xs)-np.min(xs)+2)*(np.max(ys)-np.min(ys)+1)
    if (pixelcount/area<1):
        pass
        labeled[labeled==i] = 0

plt.figure(1)
plt.imshow(labeled,cmap='jet')

最后我检查给定连接区域中的像素除以面积 pixelcount/area 之间的比率,这样就可以控制像素与总面积之间的比率