3DSlicer33:Adding MRML
1.Adding in MRML to Slicer
MRML是Slicer中用到的场景描述,并映射到他的数据模型。MRML库提供了API管理医学图像数据类型和可视化,数据类型包含Volume、model、transform、fiducials、camera...在MRML中,每一种数据类型都通过一个特殊的MRML节点表示。MRML场景实际上就是不同节点的集合。Slicer MRML数据模型独立于系统的可视化和算法组件实现的。其他的组分(Logic & GUI)一旦观测到MRML场景(独立节点)的改变,就会启动相应的MRML事件响应。
2.MRML Scene
MRML场景管理着MRML节点:添加、删除、遍历(按类型)。也包含如下两个方面:
- 永久的节点:读XML文件、写XML文件。
- Undo/Redo机制,能够存储场景(各个节点)的前一个状态
3.MRML Nodes
MRML节点用来存储Slicer应用的状态,包括原始数据和可视化参数。
MRML所有节点组织成C++层次结构,所有的都继承自vtkVolumeNode类。举一个简单的例子:vtkMRMLTransformableNode就是(Volume、Model、Fiducial、Transformation)的父类;vtkMRMLVolumeNode就是vtkMRMLScalarVolumeNode和vtkMRMLVectorVolumeNode的父类。具体类的继承关系如下:![]()
4.Reference to MRML Nodes
一些MRML节点会引用其他节点。例如:Transformable 节点就会引用Transformation节点。引用存储在节点ID中。注意:
- 使用vtkSetReferenceStringMacra() 设置引用ID(负责在场景中注册引用)
- 使用ID检查当前的引用节点是否还在MRML场景中
5.MRML Events-Observers
MRML场景和各自节点的改变,将会传递给其他的观察者节点。GUI和Logic对象通过vtk事件以及命令-观察者机制响应。一些经验如下:
- 使用vtk AddObserver()和InvokeEvent()方法。vtk 宏 SetMacro生成ModifiedEvents
- The command-observer mechanism for MRML is implemented using helper vtkObserverManager, class, MRML Observer macros, and ProcessMRMLEvents method.
- 观察者应该存储一个已经注册了的指向MRML节点的指针,这样可以防止回调函数操作一个已经销毁的对象。
一则实例:![]()
6.MRML Observer API
观察者API定义在Libs/MRML/vtkMRMLNode.h中
- vtkSetMRMLObjectMacro:用另一个vtk对象(另一个MRML节点、Logic、GUI)注册MRML节点
- vtkSetAndObserverMRMLObjectMacro:注册一个MRML节点,并为vtkCommand::ModifyEvent()添加一个观察者
- vtkSetAndObserveMRMLObjectEventMacro:注册一个MRML节点,并为一个指定的Event集合设置一个观察者。
- SetAndObserveMEMLScene[Events]:函数方法,在GUI和Logic中使用,观测Modify、NewScene、NodeAdded等事件
- ProcessMRMLEvents:函数方法,在MRML节点、Logic、GUI类中使用,为了处理来自观察者节点的事件。
创建自定义的MRML节点:
- 自定义的MRML节点为模型参数提供了永久的存储。
- 自定义的MRML节点应该使用RegisterNodeClass()在MRML场景中注册,这样有利于存储,以及从场景文件中恢复
- 自定义节点类会用到如下方法
- 自定义节点类会使用到如下方法:
- CreateNodeInstance()
- GetNodeTagName()
- ReadXMLAttributes()
- WriteXML()
- Copy()
3DSlicer33:Adding MRML相关推荐
- 论文阅读:Adding Attentiveness to the Neurons in Recurrent Neural Networks
目录 Summary Details (Implementation) 原来的 RNN 结构 变为 Element-wise-Attention Gate (EleAttG) 后 论文名称:Addin ...
- 3DSlicer16:数据类型MRML
1.Slicer MRML数据类型综述 MRML提供API(应用程序接口)管理医学图像数据类型(Volume.Model.Transform.Fiducial.Camera等)和它们的可视化: 每种数 ...
- 图像分类:13个Kaggle项目的经验总结
↑↑↑关注后"星标"Datawhale 每日干货 & 每月组队学习,不错过 Datawhale干货 方向:图像分类,编辑:数据派THU 本文约2800字,建议阅读9分钟 本 ...
- 图像分类:来自13个Kaggle项目的经验总结
来源:机器学习实验室 本文约2800字,建议阅读9分钟 本文作者与你分享图像分类项目经验总结. 任何领域的成功都可以归结为一套小规则和基本原则,当它们结合在一起时会产生伟大的结果. 机器学习和图像分类 ...
- Java内存模型深度解析:锁--转
原文地址:http://www.codeceo.com/article/java-memory-5.html 锁的释放-获取建立的happens before 关系 锁是java并发编程中最重要的同步 ...
- $.when.apply_When2Meet vs.LettuceMeet:UI和美学方面的案例研究
$.when.apply 并非所有计划应用程序都是一样创建的. (Not all scheduling apps are created equal.) As any college student ...
- Redis集群(一):集群搭建
2019独角兽企业重金招聘Python工程师标准>>> 概述 这里只记录操作步骤和集群测试,保证快速搭建集群环境.具体原理请查阅官方文档(中文版): http://www.redis ...
- python大型项目经验_图像分类:13个Kaggle项目的经验总结
来源:数据派THU 任何领域的成功都可以归结为一套小规则和基本原则,当它们结合在一起时会产生伟大的结果. 机器学习和图像分类也不例外,工程师们可以通过参加像Kaggle这样的竞赛来展示最佳实践. 在这 ...
- 小程序动画从头开始_渐进式Web应用程序102:从头开始构建渐进式Web应用程序
小程序动画从头开始 We learnt about what is a Progressive Web App (PWA) in part 1. In this part, we are going ...
最新文章
- 检测数据类型的几种方式
- 不会Object.defineProperty你就out了
- SAP Cloud Platform Identity Authentication service
- (JAVA)复制文件test.txt,并且排序。文件重新命名为test1.txt
- 链接服务器 因为它不存在或者您没有所需的权限。处理
- 1bit和1byte_1byte等于( )bit_学小易找答案
- .NET实现之(自动更新
- 2021,要不断学习!吴恩达等 AI 大佬发表新年寄语
- html li标签横向排列_Html笔记lt;1gt;
- Chrome json 插件 JSONView-for-Chrome
- Ubuntu 隐藏上方状态栏、左边任务栏及菜单按钮移到下方居中及隐藏(详细)
- 简单spring cloud服务升级实现
- cas22112-84-1/5,10,15,20-四(4-氨基苯)-21H,23H-卟啉简称:H2TAPP; Tph
- 软件开发的早期为何要进行可行性研究?该从哪几个方面研究目标系统的可行性?...
- linux 密码修改下次,Linux 强制使用者下次登入修改密码
- Freemark生成Word文件的加密处理
- 阿里云ECS通用型g7云服务器支持vTPM第三代神龙架构性能评测
- 重整网站。。。。。。。。。
- 需求工程:软件建模与分析 读书笔记三
- 自己修改官方rec,使其可以刷第三方包