python 3D图像连通区域检测

效果图

如下图,3D模型由多张2D图像合并而成,空间中存在背景0-透明(已去掉),目标1-红色,目标2-绿色,目标3-蓝色(可视化使用VTK实现,并进行去背景操作)

连通区域检测第三方库

cc3d: Connected Components on Multilabel 3D Images
项目地址:https://github.com/seung-lab/connected-components-3d

pip直接安装

pip install connected-components-3d

3D连通区域检测

场景1 - 分割出不同的连通区域

# 模型为一个3维灰度模型, shape输出为: (128, 128, 128)
path = "./model.npy"
model = np.load(path)
# 连通区域检测
# connectivity 连接邻域系数(2D支持4,8 3D支持26, 18, 6)
# 26代表3D空间下点周围的26个点(上9同层8下9)
# 18代表3D空间下上下层各去掉四个角点
# 6代表与点直接相连的6个点(同层4上下各1)
# return_N 代表是否返回数量
# N代表分割出的不连通区域数量
labels_out, N = cc3d.connected_components(model, connectivity=26, return_N=True)

场景2 - 过滤小目标

# 查看分割区域后,各区域的点数量。labels_out为上一步返回的结果,已将不同区域区分, 如归属区域1的所有点的值就会设置为1, 归属区域2的所有点的值就设置为2。
for i in range(len(np.unique(labels_out))):
    print(i, np.sum(labels_out[labels_out == i]))
# threshold代表过滤在三维空间中过滤目标的体积所占像素点数量的阈值
labels_out = cc3d.dust(model, threshold=3000, connectivity=26, in_place=False)

场景3 - 寻找最大的K个目标

delta参数原文档描述:If delta = 0, standard high speed processing. If delta > 0, then neighbor voxel values <= delta are considered the same component. The algorithm can be 2-10x slower though. Zero is considered background and will not join to any other voxel.

# k代表保留最大的k个目标
labels_out, N = cc3d.largest_k(infer_arr, k=2, connectivity=26, delta=0, return_N=True)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Alex-Leung

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值