Slicer渲染Dicom到nrrd

  • 工作中遇到一些处理Dicom数据的需求,个人通过网络上的一些教程

  • 对于原始数据尝试转换到nrrd时,发现部分的窗体数据的渲染方向不一致

  • 进一步发现这些很多定义的方向是跟设备厂家强相关的,不同厂家对于同一段的Dicom参数都有不同的实现方式,所以这个模块个人调整了一段时间还是不够满意

  • 现阶段打算借助这些渲染医学影像的工具代码进行辅助处理,以减少这些繁琐的数据转换步骤

文章目录

  • Slicer渲染Dicom到nrrd
    • 一、Slicer源码跟踪
    • 二、功能块封装
      • 2.1 初级逻辑校验
      • 2.2 开始逻辑封装
      • 2.3 使用Slicer进行调用
    • 三、写在末尾

一、Slicer源码跟踪

Slicer是一个相当大的工程,对于这种工程的探索感觉只能用好全局搜索+凭直觉猜测的方式进行

  1. 搜索DICOM database相关的组件
    • Slicer的插件通常分为一组定义、一组UI、一组逻辑
    • 所以按照上诉逻辑开始进行搜索
      请添加图片描述
  • 在相关源码中出现了一些browser相关的字眼,我们猜测相关的逻辑代码应该在进一步跳转的DICOMLib中

请添加图片描述
2. 猜测SlicerDICOMBrowser的调用函数

  • 主要使用load相关的字眼去搜索找到了一个类似的实现类

请添加图片描述
3. 探索DICOMUtils

  • 出现了读取序列的类似方法,猜测链猜测应该正确继续

在这里插入图片描述
4. 寻找操作实现插件

  • 函数读取了一个外部插件,作为最终执行函数

请添加图片描述
5. 使用常见的现象对源码进行重定向

  • 通常来说读取到Slicer内的数据会被封装成一个Scalar数据
  • 所以我们去追踪DICOMScalarVolumePlugin,并查看其是否存在Load函数请添加图片描述

请添加图片描述

  • 最终找到了参数的封装loadFilesWithSeriesReader
    请添加图片描述
  1. 找到目标封装
    请添加图片描述

二、功能块封装

2.1 初级逻辑校验

  • 在Slicer的交互式控制台中输入下方图示的代码
  • 对象可以被正常创建,函数也可以正常调用,说明之前的探索逻辑可行
  • (这里有数据的人可以按照函数所需的参数填写进去,是可以创建节点并渲染数据的)
    请添加图片描述

2.2 开始逻辑封装

Slicer是可以执行外部用户脚本的,参数可以使用类c风格进行传递,也可以直接内部写死,直接调用即可

  • 逻辑封装就是按照2.1的部分创建一个py脚本
  • 初始化相关的类,并填写相关的参数

核心封装部分

plugins = slicer.modules.dicomPlugins['DICOMScalarVolumePlugin']()
...........
try:node = plugins.loadFilesWithSeriesReader(format, files, "reader")slicer.util.saveNode(node, output)slicer.mrmlScene.RemoveNode(node)slicer.app.processEvents()  # 让UI临时更新一下,非ui模式注释掉
except Exception as e:logging.error(str(e))
...........

2.3 使用Slicer进行调用

  • 这部分比较简单,相关参数可以去slicer论坛进行查询
  • 但需要注意的是,slicer的相关执行只能通过返回值进行判断(😐 主要是没找到slicer脚本输出内容的重定向相关)
def run_slicer_script():command = [slicer_exe,"--python-script",script_path,自定义脚本参数1]result = subprocess.run(command)print(result.returncode)

三、写在末尾

  • 示例封装压缩包: https://download.csdn.net/download/qq_34524246/91359684
  • Slicer执行外部脚本论坛: https://discourse.slicer.org/t/how-to-run-python-script-in-slicer/12352
  • 最后放一张脚本通过二次封装让CPU 100%工作的图

请添加图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/88679.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/88679.shtml
英文地址,请注明出处:http://en.pswp.cn/pingmian/88679.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

QT中设计qss字体样式但是没有用【已解决】

检查一下stylesheet里面是不是有不能被QT读取的CSS语言,可能会跟字体颜色冲突错误示范:/* 错误示例:QSS 中使用 box-shadow */ QPushButton {box-shadow: 0 4px 8px rgba(0, 0, 0, 0.3); /* Qt 不支持此属性 */ }删掉就行了如果后续想用阴影…

uniapp获取状态栏高度,胶囊按钮的高度,底部安全区域的高度,自定义导航栏

相关API uni.getSystemInfoSync() uni.getMenuButtonBoundingClientRect() 创建一个utils文件夹,该文件下封装一个systemInfo.js /*** 系统信息工具类* 封装获取系统状态栏、导航栏和安全区域等相关信息的方法*/// 获取系统信息并缓存 const systemInfo uni.get…

jQuery 文本属性值

一、前言在网页开发中,我们经常需要对页面上的文本内容进行操作,例如动态修改段落文字、读取用户输入框的内容、更新按钮文本等。jQuery 提供了简洁而强大的方法来处理这些常见的文本操作需求。本文将带你全面了解 jQuery 中用于操作文本内容的三个核心方…

JAVA并发——为什么Java中的ThreadLocal对key的引用为弱引用

1、ThreadLocal 的用途 给每个线程提供自己独立的变量副本,实现线程间隔离。 常用于: 数据库连接、Session 缓存、用户上下文(如 userId)线程池中的线程复用时避免共享污染;实现线程封闭的设计模式 2、内存泄漏 使用弱…

【C++】多线程同步三剑客介绍

目录 条件变量 头文件 主要操作函数 1、等待操作 2、唤醒操作 使用示例 信号量 头文件 主要操作函数 1、信号量初始化 2、等待操作(P操作) 3、信号操作(V操作) 4、获取信号量值 5、销毁信号量 使用示例 互斥锁 …

《Java Web程序设计》实验报告八 JSP+Servlet+JDBC+MySQL实现课程管理

目 录 一、实验目的 二、实验环境 三、实验步骤和内容 1、小组成员分工(共计4人) 2、实验方案 3、实验结果与分析 4、项目任务评价 四、遇到的问题和解决方法 五、实验总结 一、实验目的 1、掌握mysql的安装、数据库表单创建 2、掌握JDBC的链接…

基于数据挖掘的课程推荐系统研究

摘要本研究设计并开发了一套基于先进数据挖掘技术的智能化课程推荐系统。该系统创新性地采用了协同过滤算法与内容推荐算法相结合的混合推荐策略,通过深度分析学生在学习平台上的历史行为数据(包括选课记录、学习时长、测试成绩等)以及课程的…

【SCI 4区推荐】《Journal of Visual Communication and Image Representation》

期刊简介:《视觉传达与图像表示杂志》(Journal of Visual Communication and Image Representation)致力于发表视觉传达与图像表示领域的最前沿研究,特别强调多学科交叉领域中的新技术和理论应用。这本期刊涵盖的研究范围广泛&…

20250711_Sudo 靶机复盘

target:192.168.43.20 外部打点 (文件上传) nmap扫一下,80,22 开放 扫目录,发现 README.md [17:04:30] 200 - 664B - /Dockerfile [17:04:38] 200 - 34KB - /LICENSE …

STEP 7-Micro/WIN SMART 编程软件:从入门到精通的使用指南

STEP 7-Micro/WIN SMART 编程软件:从入门到精通的使用指南 在工业自动化控制领域,编程软件是连接工程师与 PLC 的桥梁,而 STEP 7-Micro/WIN SMART 作为 S7-200 SMART PLC 的专用编程工具,以其友好的界面和高效的编程能力备受青睐。…

模型训练与部署注意事项篇---resize

图像大小的影响在 YOLOv 系列模型的训练和推理部署过程中,图像大小的选择是影响模型性能(精度、速度、泛化能力)的关键因素之一。两者的关系既相互关联,又存在一定的灵活性,具体可从以下几个方面详细分析:一…

【Python】venv:配置独立镜像源

为某个特定的 venv 虚拟环境设置 pip 镜像源,使得该环境下的 pip 安装始终使用自定义镜像源,不影响系统 pip,也不依赖用户级配置文件。环境准备 1. 创建虚拟环境 python -m venv venv2. 激活虚拟环境Windows: .\venv\Scripts\activateLinux/m…

日本语言学校:签证制度类 Prompt 的结构整理路径与策略

日本语言学校:签证制度类 Prompt 的结构整理路径与策略 我们在构建语言留学语义系统的过程中,尝试以“签证风险”为例,探索如何让结构信息被更好地保留下来。本文不介绍 Prompt 本身,也不夸大其作用,而是希望借此与更…

RFCOMM协议详解:串口仿真与TCP/IP协议栈移植技术——面试高频考点与真题解析

一、RFCOMM 协议核心考点与高频面试问题1.1 协议基础与核心功能考点解析:RFCOMM(Radio Frequency Communication)是蓝牙协议栈中实现串口仿真的核心协议,基于 L2CAP 协议提供类似 RS-232 的可靠数据流传输。其核心功能包括&#x…

【编程实践】利用open3d生成物体的最长边方向并可视化

1 利用3d软件生成一个长方体 边长随意,长度随意 2 导出为模型文件并采样为点云数据 从mesh表面进行采样,点数根据自己需求进行设置,此处设置为100000。采样结果:3 识别OBB外接框并可视化长边方向import numpy as np import open3d…

1. 好的设计原则

目录一、应该具备的性质二、面向对象设计原则三、详解3.1 开闭原则3.2 单一职责原则3.3 里氏替换原则3.4 依赖倒置原则3.5 接口隔离原则3.6 合成复用原则3.7 迪米特原则一、应该具备的性质 可扩展性灵活性可插入性 二、面向对象设计原则 以下设计原则的重要性从高到低排列 …

深度学习图像分类数据集—猫七种表情识别分类

该数据集为图像分类数据集,适用于ResNet、VGG等卷积神经网络,SENet、CBAM等注意力机制相关算法,Vision Transformer等Transformer相关算法。 数据集信息介绍:猫七种表情识别分类:[Angry, Disgusted, Happy, Normal, Sa…

002_Claude模型与定价

Claude模型与定价 目录 Claude 4 模型系列模型功能对比定价策略计费说明企业定价使用建议 Claude 4 模型系列 Anthropic 推出了最新的 Claude 4 系列模型,提供不同性能等级以满足各种需求: Claude Opus 4 定位:最强大、最智能的模型特点…

【牛客刷题】游游的字母串

文章目录 一、题目介绍1.1 题目描述1.2 输入描述:1.3 输出描述:1.4 示例1二、解题二、解题思路2.1 核心问题2.2 关键策略三、算法分析3.1 为什么正确?3.2 复杂度分析四、模拟演练五、完整代码一、题目介绍 题目:游游的字母串 1.1 题目描述 对于一个小写字母而言,游游可以通…

docker容器高级管理-dockerfile创建镜像

目录一.构建LNMP架构1.构建nginx容器①拉取centos镜像(对镜像做基础架构)②创建dockerfile工作目录(可以是一个服务的项目)③创建dockerfile④创建启动脚本2.构建mysql数据库①创建mysql项目②配置dockersfile文件④创建镜像文件3…