根据边缘到边缘距离合并标签#

在这个笔记本中,我们将根据标签之间的边缘到边缘距离来合并标签图像中的标签。靠近的标签将被合并。

另请参阅

import pyclesperanto_prototype as cle
from skimage.io import imread
import numpy as np

为了演示目的,我们使用了从blobs示例图像中派生的标签的修改版本。我们人为地在它们之间引入了间隙。

image = imread("../../data/blobs.tif")
image[:, 80:150] = 0
image[80:130, 100:] = 0

image = cle.asarray(image)
labels = cle.voronoi_otsu_labeling(image, spot_sigma=4, outline_sigma=3)
labels
cle._ image
shape(254, 256)
dtypeuint32
size254.0 kB
min0.0
max47.0

首先,我们将标签膨胀到允许的最大边缘距离的一半。

maximum_distance = 12

dilated_labels = cle.dilate_labels(labels, radius=maximum_distance/2)
dilated_labels
cle._ image
shape(254, 256)
dtypeuint32
size254.0 kB
min0.0
max47.0

然后,如果标签接触,我们就合并它们。

merged_dilated_labels = cle.merge_touching_labels(dilated_labels)
merged_dilated_labels
cle._ image
shape(254, 256)
dtypeuint32
size254.0 kB
min0.0
max5.0

之后,我们用原始标签的形状来掩蔽合并后的标签。我们还将此操作的结果转换为32位整数,以便标签图像的可视化能够正常工作。

merged_labels = (merged_dilated_labels * (labels > 0)).astype(np.uint32)
merged_labels
cle._ image
shape(254, 256)
dtypeuint32
size254.0 kB
min0.0
max5.0