当前位置: 首页 > 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)

相关文章:

  • css样式块重复调用
  • 通义实验室开源针对RAG的预训练框架
  • Lua中table、模块、元表和元方法
  • delta 流响应
  • 【C/C++】delete nullptr;
  • Nginx的反向代理
  • 传输线的特性阻抗和传播延迟
  • 15.为什么HashMap的容量是2的幂次方
  • 代码随想录算法训练营第五十二天
  • 无法删除/重装VirtualBox,提示缺少msi安装包
  • 【系统架构设计师】2025年上半年真题论文回忆版: 论事件驱动架构及应用(包括解题思路和参考素材)
  • 中望CAD与AutoCAD的SWOT对比分析(基于2025线上发布会观察与行业数据)
  • 最终章:终焉之塔 · 前端之道
  • Telnet 命令详解
  • 传感器技术的演进与测试方法探究
  • 【设计模式】责任链
  • Ubuntu 系统grub日志级别设置
  • 专业课复习笔记 10
  • Rust 学习笔记:循环和迭代器的性能比较
  • MySQL 表内容的增删查改 -- CRUD操作,聚合函数,group by 子句
  • 网站运营每天做啥工作/电商代运营公司十强
  • 网站优化公司方案/免费发帖论坛大全
  • 阿里云上传的网站 服务器路径/seo项目分析
  • 网站如何做好优化/网络营销与网站推广的区别
  • 博客网站模板下载/个人引流推广怎么做
  • 网站什么时候备案好/培训心得简短200字