3DSlicer33:Adding MRML
来源:互联网 发布:java游戏引擎 编辑:程序博客网 时间:2024/06/05 11:49
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 usinghelper vtkObserverManager, class, MRML Observer macros, and ProcessMRMLEvents method.
- 观察者应该存储一个已经注册了的指向MRML节点的指针,这样可以防止回调函数操作一个已经销毁的对象。
一则实例:
6.MRML Observer API
观察者API定义在Libs/MRML/vtkMRMLNode.h中创建自定义的MRML节点:
- 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节点应该使用RegisterNodeClass()在MRML场景中注册,这样有利于存储,以及从场景文件中恢复
- 自定义节点类会用到如下方法
- 自定义节点类会使用到如下方法:
- CreateNodeInstance()
- GetNodeTagName()
- ReadXMLAttributes()
- WriteXML()
- Copy()
阅读全文
0 0
- 3DSlicer33:Adding MRML
- 3DSlicer16:数据类型MRML
- Vbscript(3) Adding Intelligence
- Lab 3: Adding Views and Unit Testing
- ASP.NET MVC 3 (Adding a View) (3/9)
- fjnu 1151 Adding 1s, 2s, and 3s
- JOJ2185: Adding 1s, 2s, and 3s
- HOJ 2067 Adding 1s, 2s, and 3s
- ASP.NET MVC 3 (Adding a Controller) (2/9)
- Adding the Action Bar - Adding Action Buttons
- Building a WPF Sudoku Game: Part 3 - Adding Polish and Customizing Controls (zz)
- Adding 3-D Graphics and Multimedia by Using Windows® Presentation Foundation
- Effects with the Pixel Bender Toolkit – Part 3: Adding parameters to filters
- WorkFlow入门Step.3—Adding Procedural Elements-For-WF4.0
- Adding Open Source 3D Physics to Your iOS Applications(1)
- Adding Open Source 3D Physics to Your iOS Applications(2) Moving Bullet to iOS
- Qt5官方demo解析集17——Chapter 3: Adding Property Bindings
- ROS:关于tf的探索(3)Adding a frame(Python)
- 产品经理一定要理解数据
- 深度解读「楼下100」撬动下午茶市场 |手摸手产品研究院
- eclipse官网下载收费 怎么办?
- HDU5556 Land of Farms(最大独立集)
- Java NIO之文件监控机制
- 3DSlicer33:Adding MRML
- ubuntu16.04+cuda8.0+cudnn6+tensorflow安装
- 从豆瓣电影评分算法说起
- 资本寒冬,这十大创业公司值得尊重(上)
- 右值 移动
- 协同过滤-皮尔逊相关系数算法
- Angular4 环境搭建与项目创建与发布
- 利用python进行数据分析译者给出的注意事项
- c# 图片浏览器