我有使用轮廓算法提取特征的图像(我正在进行天体物理源提取)。这种方法产生了一个“特征图”,每个像素都用一个整数“标记”(通常每张图有约 1000 个独特的特征)。
我想将每个单独的特征显示为它自己的轮廓。
我可以做到这一点的一种方法是:
for ii in range(labelmask.max()):
contour(labelmask,levels=[ii-0.5])
但是,这非常慢,尤其是对于大图像。有没有更好(更快)的方法?
PS 一个小测试表明skimage 的 find-contours并不快。
根据@tcaswell 的评论,我需要解释为什么contour(labels, levels=np.unique(levels)+0.5))
或类似的东西不起作用:
1. Matplotlib spaces each subsequent contour "inward" by a linewidth to avoid overlapping contour lines. This is not the behavior desired for a labelmask.
2. The lowest-level contours encompass the highest-level contours
3. As a result of the above, the highest-level contours will be surrounded by a miniature version of whatever colormap you're using and will have extra-thick contours compared to the lowest-level contours.