Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Numpy scikit图像-felzenszwalb分割:删除大片段_Numpy_Image Segmentation_Scikit Image - Fatal编程技术网

Numpy scikit图像-felzenszwalb分割:删除大片段

Numpy scikit图像-felzenszwalb分割:删除大片段,numpy,image-segmentation,scikit-image,Numpy,Image Segmentation,Scikit Image,如图所示,我正在使用skimage.segmentation.felzenszwalb,这很好 我已经尽可能地调整了参数,但它仍然检测到一些我不希望它检测到的大片段。之后如何删除超过特定大小的段?我知道您可以使用skimage.measure.regionprops来获取每个段的面积,但我不知道如何从段fz中删除段,让数组保持与标记边界的接触 import numpy as np import skimage.io from skimage.util import img_as_float fr

如图所示,我正在使用
skimage.segmentation.felzenszwalb
,这很好

我已经尽可能地调整了参数,但它仍然检测到一些我不希望它检测到的大片段。之后如何删除超过特定大小的段?我知道您可以使用
skimage.measure.regionprops
来获取每个段的面积,但我不知道如何从
段fz
中删除段,让数组保持与
标记边界的接触

import numpy as np
import skimage.io
from skimage.util import img_as_float
from skimage.segmentation import felzenszwalb
from skimage.segmentation import mark_boundaries

img = img_as_float(astronaut()[::2, ::2])
segments_fz = felzenszwalb(img, scale=100, sigma=0.5, min_size=50)

print("Felzenszwalb number of segments: {}".format(len(np.unique(segments_fz))))

segmented_img = mark_boundaries(img, segments_fz)
skimage.io.imsave('img_labeled.png', segmented_img)
这与类似,但他们正在尝试删除小对象,而不是大对象。

请查看for
skimage.morphology.remove_small_objects
。有很多预处理/输入清理,但业务端非常简单。假设
segments
是带有段标签的输入图像,函数的作用如下:

out = np.copy(segments)
component_sizes = np.bincount(segments.ravel())
too_small = component_sizes < min_size
too_small_mask = too_small[segments]
out[too_small_mask] = 0
return out
out=np.copy(段)
组件大小=np.bincount(segments.ravel())
太小=部件尺寸<最小尺寸
太小的遮罩=太小的[段]
out[太小的遮罩]=0
返回
您可以将
太小
更改为
太大
,或者任何您想要的条件!关键是要在该行生成一个数组,该数组包含位置i处的
True
,无论何时您要将标签i归零,以及
False
任何其他位置