随笔 - 28  文章 - 0  评论 - 0  阅读 - 444

python获取nii中最大连通域


import SimpleITK as sitk
import os
import argparse
from pathlib import Path
import nibabel as nib
import numpy as np
sitk_maskimg = sitk.ReadImage("test.nii", sitk.sitkUInt8)
array1 = sitk.GetArrayFromImage(sitk_maskimg)

cc = sitk.ConnectedComponent(sitk_maskimg)
stats = sitk.LabelIntensityStatisticsImageFilter()
stats.Execute(cc, sitk_maskimg)
maxlabel = 0   # 获取最大连通域的索引
maxsize = 0    # 获取最大连通域的体素大小

# 遍历每一个连通域, 获取最大连通域的体素大小和索引
for l in stats.GetLabels(): 
    size = stats.GetPhysicalSize(l)   
    if maxsize < size:
        maxlabel = l
        maxsize = size

labelmaskimage = sitk.GetArrayFromImage(cc)
outmask = labelmaskimage.copy()
outmask[labelmaskimage != maxlabel] = 0
outmask[labelmaskimage == maxlabel] = 1

# 找到不重合的位置
non_overlapping_mask = np.logical_not(np.logical_and(array1!= 0, outmask!= 0))

# 将不重合的位置置为 0
array1[non_overlapping_mask] = 0
modified_image1 = sitk.GetImageFromArray(array1)
outmask = outmask.astype('float32')
modified_image1.SetDirection(sitk_maskimg.GetDirection())
modified_image1.SetSpacing(sitk_maskimg.GetSpacing())
modified_image1.SetOrigin(sitk_maskimg.GetOrigin())  
# 保存修改后的图像
sitk.WriteImage(modified_image1, "Stage2LungVessels1.nii")


posted on   大海z16  阅读(33)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示