剔除面积比小于阈值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 之间的比率,这样就可以控制像素与总面积之间的比率
我正在寻找这个问题中的以下示例: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 之间的比率,这样就可以控制像素与总面积之间的比率