怎么把.stl文件转成.nii文件

1. 问题描述
我的stl文件存的是CT数据的标注结果,不转的话一些常用的可视化软件(比如ITKSnap)不支持,而且后面想做深度学习写数据接口的话会比较麻烦。而且我的数据有些多,一百多个,排除用软件一个个另存为的方式(这种方式可以用Mimics)

2. 解决办法:
用3D Sclier的Python interactor编程界面循环转换:下载安装3D Sclier之后,再输入下面的代码

import os
import slicer
stl_path = r"path\annotations"
image_path = r"path\images"
out_path = r"path\annotations_nii"
patients = os.listdir(stl_path)
for patient in patients:
    patient_path = os.path.join(stl_path, patient)
    stl_files = os.listdir(patient_path)
    output_file_path = os.path.join(out_path, patient)
    os.makedirs(output_file_path, exist_ok=True)
    reference_volume_path = os.path.join(image_path, patient+".nii.gz")
    referenceVolumeNode = slicer.util.loadVolume(reference_volume_path)
    for stl_file in stl_files:
        stl_file_name = os.path.join(patient_path, stl_file)
        output_file_name = os.path.join(output_file_path, stl_file[0:-4] + ".nii.gz")
        segmentationNode = slicer.util.loadSegmentation(stl_file_name)
        outputLabelmapVolumeNode = slicer.mrmlScene.AddNewNodeByClass('vtkMRMLLabelMapVolumeNode')
        slicer.modules.segmentations.logic().ExportVisibleSegmentsToLabelmapNode(segmentationNode, outputLabelmapVolumeNode,
                                                                                 referenceVolumeNode)
        slicer.util.saveNode(outputLabelmapVolumeNode, output_file_name)
        slicer.mrmlScene.Clear(0)

每转成功一个就会输出一个True

3. 其他说明
(1)最后一行的代码是清除导入到3D Slicer的数据的,不加这一行多次循环后会out of memory,因为你重新加载分割结果的时候上一次加载的不会在3D Slicer显示窗口被清除覆盖

slicer.mrmlScene.Clear(0)

(2)主要参考资料: 

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 16
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值