提问者:小点点

蟒蛇通过抵消轮廓/收缩多边形来分离圆形颗粒


我是python新手,卡住了…

我想制作一个python脚本,允许我在这样的图像上分离相邻的粒子:

分成像这样的单独区域:

有人建议我使用分水岭方法,据我所知,它会给我一个这样的东西:

编辑实际上发现这是距离变换而不是分水岭

然后我可以使用阈值将它们分开…遵循这个openCV分水岭指南,但它只能切断粒子。无法“转换”代码来做我想做的事情。

然后我采取了另一种方法。尝试使用openCV轮廓,它给了我很好的粒子轮廓。然后,我一直在寻找一种简单的方法来执行多边形偏移,以便像这样缩小边缘:

使用偏移轮廓(多边形)的中心应该给我粒子的数量…但是我只是还没有找到一种简单的方法来用python进行边缘偏移/多边形收缩。


共1个答案

匿名用户

这是一个使用numpy、s的脚本,它利用了局部极大值提取和水印加上标记(即连通分支提取)。

import numpy as np
import scipy.misc
import scipy.ndimage
import skimage.feature
import skimage.morphology

# parameters
THRESHOLD = 128

# read image
im = scipy.misc.imread("JPh65.png")
# convert to gray image
im = im.mean(axis=-1)
# find peaks
peak = skimage.feature.peak_local_max(im, threshold_rel=0.9, min_distance=10)
# make an image with peaks at 1
peak_im = np.zeros_like(im)
for p in peak:
    peak_im[p[0], p[1]] = 1
# label peaks
peak_label, _ = scipy.ndimage.label(peak_im)
# propagate peak labels with watershed
labels = skimage.morphology.watershed(255 - im, peak_label)
# limit watershed labels to area where the image is intense enough
result = labels * (im > THRESHOLD)