skimage包的morphology子模块中,提供了一个remove_small_objects()
函数,可以通过自己设定的连通域面积阈值有效去掉图片中的噪点。但是在实际中,我们有时候发现只需要删除最远的那个离散点,这个离散点明显就属于噪点了。于是通过模仿模仿remove_small_objects()函数去除图片边缘不感兴趣区域。实现去除图片中离散点。
具体实现代码如下
def remove_max_objects(img):
x0=200.0
y0=200.0 #这里以图片大小为400*400为例
labels = measure.label(img)
region = measure.regionprops(labels)
# is_del = False
if len(region) == 1:
out = img
else:
num = labels.max()
del_array = np.array([0] * (num + 1)
initial_len=50
save_index=0
out = img
for k in range(num):
y,x=region[k].centroid
k_l= math.sqrt(((x-x0)**2)+((y-y0)**2))
k_len = k_l
if initial_len < k_len:
initial_len = k_len
save_index = k + 1
del_array[save_index] = 1
del_mask = del_array[labels]
out = out * del_mask
out1=img-out
return out1
从而实现去除图片中远离中心的离散点。