輪郭アルゴリズムで特徴が抽出された画像があります(天体物理学的なソース抽出を行っています)。このアプローチにより、各ピクセルが整数で「ラベル付け」された「特徴マップ」が生成されます(通常、マップごとに最大1000の固有の特徴)。
個々の特徴をそれぞれの輪郭として示したいと思います。
これを実現する1つの方法は次のとおりです。
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.