zoukankan      html  css  js  c++  java
  • 3D Slicer FAQ-2

    1.MRML

    1.1 Introduction

    • MRML用来描述Slicer中的场景并映射到他的数据模型。MRML库提供了一个API用于管理医学图像数据类型(体数据、模型、变换、基准点、相机等)和可视化;
    • 每种数据类型都以一个特殊的MRML node(节点)来呈现;MRML Scene就是所有MRML nodes的集合;Slicer MRML数据模型不依赖于系统的可视化组建和算法组件;

    1.2 MRML Scene

    • MRML Scene管理MRML nodes(增加、删除、寻找、按类寻找);
    • MRML Scene 提供了MRML nodes的可持续性(从XML文件中读取、写入到XML文件);
    • MRML Scene提供了 Undo/Redo 机制;

    1.3 MRML Nodes

    • MRML nodes存储Slicer应用的状态,包括原始数据和可视化参数;下面是关键MRML nodes的集合,他们存储着核心Slicer模块的状态:
    • 所有的MRML nodes必须应用某种标准的API:ReadAttributes/WriteAttributes/Copy等;
    MRML nodes采用C++类等级进行管理,都继承于vtkMRMLNode 类。例如,vtkMRMLTransformableNode是体数据Volume、模型Model、基准点Fiducial和变换Transformation nodes的父类。vtkVolumeNode是vtkMRMLScalarVolumeNode和vtkMRMLVectorVolumeNode的父类。MRML nodes的类等级如下图所示:
     

    1.4 引用MRML 节点

    一些MRML nodes 也会引用其他 nodes。例如,Transformable Node 引用了Transformation Node。Transformation Node引用了父级的Transformation Node。引用通过 Node ID存储。
    • 使用VTKSetReferenceStringMacro设置引用ID(场景中注册过程);
    • 访问方法在访问之前应该通过ID检查引用节点是否仍然在MRML场景中;

    1.5 MRML事件与观察者

    MRML场景和每个节点的改变将会通过vtk事件和命令-观察者机制传递给其他的观测节点,GUI对象和Logic对象。一些经验规则如下:
    • Use vtk AddObserver() and InvokeEvent() methods. vtk SetMacro generates ModifiedEvent.
    • The command-observer mechanism for MRML is implemented using helper vtkObserverManager, class, MRML Observer macros, and ProcessMRMLEvents method.
    • Observers should store a registered pointer to a MRML node to prevent callbacks on a deleted object.

    1.6 如何添加一个MRML node到场景中?

    • 一般模式
    1 vtkNew<vtkMRML???Node> nodeToAdd;
    2 ...
    3 mrmlScene->AddNode(nodeToAdd.GetPointer());
    • 向场景中添加一个多边形数据
    1 vtkNew<vtkMRMLModelNode> modelNode;
    2 modelNode->SetPolyData(polyData);
    3 mrmlScene->AddNode(modelNode.GetPointer());
    • 从文件中载入多边形数据
    1 vtkSlicerModelsLogic* modelsLogic = ...;
    2 //modelsLogic->SetMRMLScene(mrmlScene);
    3 modelsLogic->AddModel(polyDataFileName);

    1.7当载入MRML场景时遇到如下错误怎么办?

     1 ERROR: In /path/to/VTK/Imaging/vtkImageMapToColors.cxx, line 153
     2 vtkImageMapToColors (0x268f190): RequestInformation: No LookupTable was set but number of components in input doesn't match OutputFormat, therefore input can't be passed through!
     3  
     4 ERROR: In /path/to/VTK/Imaging/vtkImageExtractComponents.cxx, line 239
     5 vtkImageExtractComponents (0x26947e0): Execute: Component 1 is not in input.
     6  
     7 ERROR: In /path/to/VTK/Imaging/vtkImageExtractComponents.cxx, line 239
     8 vtkImageExtractComponents (0x26947e0): Execute: Component 1 is not in input.
     9  
    10 [...]
    要确定每一个colorNodeRef属性设置在每一个VolumeDisplay节点上。

    1.8 如何在2D视窗中更改体数据?

    1 appLogic = slicer.app.applicationLogic()
    2 selectionNode = appLogic.GetSelectionNode()
    3 selectionNode.SetReferenceActiveVolumeID(bg)
    4 selectionNode.SetReferenceSecondaryVolumeID(fg)
    5 appLogic.PropagateVolumeSelection()

    2.IO

    为什么我的节点Writer没有出现在保存的对话框中?
    • 需要在qSlicerIOManager中注册我们的Writer 用qSlicerYourModule::Setup();
    资料: SlicerIOManager= http://apidocs.slicer.org/master/classqSlicerIOManager.html 
    示例: https://github.com/Slicer/Slicer/blob/3dd75da/Modules/Loadable/Markups/qSlicerMarkupsModule.cxx
    • 你的节点需要成为vtkMRMLStorableNode的子类;

    3.Modules

    3.1 在Slicer的build-tree中,Slicer的模块位于哪里?

    Slicer模块和库位于Slicer主构建目录:
    ~/Slicer-Superbuild/Slicer-build

    3.2 如何从C++可加载模块调用一个CLI模块?

    问题描述:http://slicer-devel-archive.65872.n3.nabble.com/Calling-CLI-module-from-a-C-loadable-module-tt4031930.html
    实例分析:https://github.com/Slicer/Slicer/blob/master/Modules/Loadable/CropVolume/Logic/vtkSlicerCropVolumeLogic.cxx#L318-351

    3.3 如何从命令行调用一个CLI模块?

    示例:
    Slicer.exe --launch CastScalarVolume input.mha output.mha
    在Windows中使用要注意:
    • 需要使用Slicer应用程序的全名,即Slicer.exe而不是Slicer;
    • 为了获得CLI模块支持的命令行参数的帮助,可以运行下面语句:
    Slicer.exe --launch CastScalarVolume 2>c:SomeWriteAbleDirectoryusage.txt
  • 相关阅读:
    第01组 Alpha冲刺(2/6)
    第01组 Alpha冲刺(1/6)
    第08组 Alpha冲刺(6/6)
    2019 SDN上机第4次作业
    第08组 Alpha冲刺(5/6)
    2019 SDN阅读作业
    2019 SDN上机第3次作业
    第08组 Alpha冲刺(4/6)
    第08组 Alpha冲刺(3/6)
    第08组 Alpha冲刺(2/6)
  • 原文地址:https://www.cnblogs.com/ybqjymy/p/14235297.html
Copyright © 2011-2022 走看看