我已经将 Matlab 的bwlabeln
用于三维连接词,18-connected neighborhood
代码如下:
[labeledImage, ~] = bwlabeln(maskImageVolume, 18); # maskImageVolume is 3D. e.g.:(200, 200, 126)
在 Python 中等效的是:
from skimage import measure
labeledImage = measure.label(maskImageVolume, 8)
但是,Matlab 中的bwlabeln
支持Three-dimensional connectives
(具有 18 和 26 连接的邻域),但skimage.measure.label
只支持4- or 8-“connectivity”
。
什么相当于 Python 中18 and 26-connected neighborhood
的bwlabeln
?
参数neighbors
skimage.measure.label
状态的文档:
邻居 : {4, 8}, 整数, 可选
是使用 4 还是 8 "连接"。在3D中,4-"连接"意味着连接的像素必须共享面,而对于8-"连接",它们必须仅共享边缘或顶点。
已弃用,请改用connectivity
。
对于参数connectivity
:
连接性 : 整数,可选
将像素/体素视为邻居的最大正交跃点数。可接受的值范围为 1 到input.ndim
。如果None
,则使用input.ndim
的完全连接。
这意味着,在 3D 中,连通性可以是 1、2 或 3,表示 6、18 或 26 个邻居。
回顾文档的各个版本,这种语法似乎是在scikit-image 0.11中引入的(0.10没有它)。
对于您的情况,有 18 个连接的邻居:
labeledImage = measure.label(maskImageVolume, connectivity=2)