当前位置: 首页 > news >正文

mimics导出图像 标注文件

1. 环境
mimics21.0+python3.5
下面的代码要在mimics软件中运行

2. 注意事项
从mimics导出图像要注意删掉mask和points等其他标注,以免在图像上会叠加mask

import  SimpleITK as sitk
import  numpy as np
import  os
import  json
import itk
from pypinyin import lazy_pinyindef load_ct_series(dicom_dir):reader = sitk.ImageSeriesReader()# 显式获取并验证文件列表series_ids = reader.GetGDCMSeriesIDs(dicom_dir)if not series_ids:raise ValueError("No DICOM Series found in directory")dicom_files = reader.GetGDCMSeriesFileNames(dicom_dir, series_ids[0])reader.SetFileNames(dicom_files)# 配置读取选项reader.LoadPrivateTagsOn()try:image = reader.Execute()print("CT文件成功读取", len(dicom_files))return imageexcept Exception as e:print("DICOM读取失败: {str(e)}")raisedef mimics_export_3DCircle(mimics_project_path, landmarks_json_path, image_path, itk_save_path=r"G:\003ProjectsWork\C1C2Reduction\Dataset\PointsArrange\itk_all"):print(mimics_project_path)mimics.file.open_project(mimics_project_path)patient_name = os.path.basename(mimics_project_path).split(".")[0]patient_name_pinyin_list = lazy_pinyin(patient_name)pinyin_str = ''.join([word.capitalize() for word in patient_name_pinyin_list])# clean the annotation in image。不然图像上会显示标注的内容masks = mimics.data.masksfor label in range(len(masks)):mimics.data.masks[label].clear()save_dcm_path = os.path.join(image_path, pinyin_str)os.makedirs(save_dcm_path, exist_ok=True)mimics.file.export_dicom(path=image_path, filename_prefix=pinyin_str+"_")print("save_path", image_path)im = mimics.data.images[0]# mimics.data.objects.move_objects(mimics.data.circles)dim=im.physical_dimensionsprint("dim", dim)dict_landmark = {}images_sitk = load_ct_series(image_path)sitk.WriteImage(images_sitk, os.path.join(itk_save_path, pinyin_str+".nii.gz"))# print("itk_path", os.path.join(save_dcm_path.replace("dcm_all", "itk_all"), pinyin_str+".nii.gz"))    origin = images_sitk.GetOrigin()spacing = images_sitk.GetSpacing()direction = images_sitk.GetDirection()print("direction", direction)dict_landmark["direction"] = directiondict_landmark["spacing"] = spacingdict_landmark["origin"] = origindict_landmark_ = []points = mimics.data.pointsfor i in range(len(points)):dict_landmark_sub = {}dict_landmark_sub["label"]=points[i].namedict_landmark_sub["label"]=i+1#dict_landmark_sub["X"]=points[i].x#dict_landmark_sub["Y"]=points[i].y#dict_landmark_sub["Z"]=points[i].zx=(points[i].x-origin[0])/spacing[0]y=(points[i].y-origin[1])/spacing[1]z=(points[i].z-origin[2])/spacing[2]dict_landmark_sub["X"]=x    dict_landmark_sub["Y"]=ydict_landmark_sub["Z"]=zdict_landmark_.append(dict_landmark_sub)print(landmarks_json_path)dict_landmark["landmarks"] = dict_landmark_# clean the annotation in image。不然图像上会显示标注的内容points = mimics.data.points   mimics.data.points.delete(points)lines = mimics.data.linesmimics.data.lines.delete(lines)save_dcm_path = os.path.join(image_path, pinyin_str)os.makedirs(save_dcm_path, exist_ok=True)mimics.file.export_dicom(path=image_path, filename_prefix=pinyin_str+"_")im = mimics.data.images[0]dim=im.physical_dimensionsimages_sitk = load_ct_series(image_path)sitk.WriteImage(images_sitk, os.path.join(itk_save_path, pinyin_str+".nii.gz"))log_json = json.dumps(dict_landmark, indent=1)if not os.path.isfile(landmarks_json_path): fd = open(landmarks_json_path, mode="w", encoding="utf-8")fd.close()else:passwith open(landmarks_json_path, "w") as f:f.write(log_json)mimics.file.close_project()return 0def exportMcsProjectBatch(input_project_root, out_landmarks_json, input_image_root, itk_save_path=r"G:\003ProjectsWork\C1C2Reduction\Dataset\PointsArrange\itk_all"):for root, dirs, files in os.walk(input_project_root):for file in files:if file.endswith(".mcs"):name = file.split(".mcs")[0]name_pinyin_list = lazy_pinyin(name)name_str = ''.join([word.capitalize() for word in name_pinyin_list])mimics_project_path = os.path.join(root, file)print(mimics_project_path)landmarks_json_path = os.path.join(out_landmarks_json, name_str+".json")print(landmarks_json_path)if input_image_root is not None:image_path = os.path.join(input_image_root, name_str)os.makedirs(image_path, exist_ok=True)else:image_path=Noneprint("image::   ",image_path)mimics_export_3DCircle(mimics_project_path, landmarks_json_path, image_path)if __name__ == '__main__':#mimics_project_path = r"1_out.mcs"mimics_project_path = r"xxx.mcs"landmarks_json_path = r"xxx.json"image_path = r"dcm_all"#mimics_export_3DCircle(mimics_project_path, landmarks_json_path, image_path)input_project_root = r"xxx"out_landmarks_json = r"xxx\json_all"input_image_root =r"xxx\dcm_all"exportMcsProjectBatch(input_project_root, out_landmarks_json, input_image_root)

http://www.xdnf.cn/news/702109.html

相关文章:

  • 学习日记-day18-5.28
  • 央国企迁移国产数据库:数据迁移5步法与4项管理准则
  • GATED DELTA NETWORKS : IMPROVING MAMBA 2 WITH DELTA RULE
  • 【AI算法工程师面试指北】小球检测问题
  • 【Python-Day 19】函数的回响:深入理解 `return` 语句与返回值
  • 融智学视域下的多时空统一框架与信智序位法则
  • 基于CATIA参数化圆锥建模的自动化插件开发实践——NX建模之圆锥体命令的参考与移植(三)
  • 图神经网络在信息检索重排序中的应用:原理、架构与Python代码解析
  • ORB-SLAM2学习笔记:ORBextractor::operator()函数的逐行解析
  • 应用宝的NotificationManagerService_post_com.tencent.android.qqdownloader持锁现象
  • 涨薪技术|0到1学会性能测试第87课-Webservice接口性能测试
  • (nice!!!)(LeetCode 每日一题) 3372. 连接两棵树后最大目标节点数目 I (贪心+深度优先搜索dfs)
  • GPU时间与transformer架构计算量分析
  • qemu安装risc-V 64
  • springboot配置mybatis debug的sql日志输出
  • DelayQueue源码解析
  • 《活法》
  • Python实例题:Python实现FTP弱口令扫描器
  • 如何去除文章的AI痕迹2025新方法
  • DeepSeek 工作应用深度指南
  • 二叉树的锯齿形层序遍历——灵活跳跃的层次结构解析
  • 第十一节:第三部分:异常:异常的两种处理方式
  • 【Unity】自动生成围绕模型的路径点
  • 企业应如何构建用户画像系统
  • C语言Day9:C语言类型转换规则
  • Linux Crash工具全解:内核崩溃分析的一切
  • shell脚本总结11
  • 华为OD机试真题——矩形绘制(2025A卷:200分)Java/python/JavaScript/C/C++/GO最佳实现
  • 数据库表与实体类设计
  • 中望CAD与AutoCAD的SWOT对比分析(基于2025线上发布会观察与行业数据)