医站点医维基

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 2098|回复: 11

[MITK] MITK分割模块之ToolManager

[复制链接]

336

主题

411

回帖

2808

积分

管理员

积分
2808

热心会员推广达人优秀版主荣誉管理论坛元老

发表于 2016-1-8 13:42:00 | 显示全部楼层 |阅读模式
本帖最后由 medimage 于 2016-1-8 14:16 编辑

20150324223018389.png

MITK平台自带分割模块,其中涉及很多交互问题,比如监听鼠标事件,对轮廓的渲染等。对于接触MITK的新手来说,弄懂这个模块就能学到MITK中非常非常重要的一部分内容:状态机和交互。
mitk::ToolManager
MITK自带很多分割小工具,比如我们在插件中看到的AddContourTool, SubtractContourTool等等mitk::SegTool2D,这些都继承自mitk::Tool。这些2D tool,当然还有没提到的3D tool都由mitk::ToolManager来管理。ToolManager确保一次只有一个tool可以接收到MITK的事件。选择各种tool的GUI是QmitkToolSelectionBox。
mitk::ToolManager 内能够存储一组待分割数据(reference data),和一组分割数据(working data)。 mitk::tool类型的对象可以由ToolManager的方法GetToolById(int id)获得,而且也可以获得相关的reference data and working data. 用户可以通过两个工具(QmitkToolReferanceDataSelectionBox和QmitkToolWorkingDataSelectionBox)修改reference data 和working data。
QmitkToolSelectionBox和ToolManager的关系
QmitkToolSelectionBox相当于是toolmanager的GUI,为什么这么说呢?QmitkToolSelectionBox继承了QWidget,负责以图形化的方式显示toolmanager管理的tools,以及这些tool的状态(即目前哪个tool已被选中)。通常,当QmitkToolSelectionBox被设为enabled或disabled,这些tools也会被enabled或disabled。

mitk::ToolManagerProvider
一个宏服务单例模式,用于获得mitk::ToolManager的实例。注意:单例模式保证一个类有且只有一个实例,并提供一个访问它的全局访问点。
它只能由SegmentationModuleActivator实例化。通常,获得一个toolManager的方法是:
mitk::ToolManager* toolManager =mitk::ToolManagerProvider::GetInstance()->GetToolManager();

mitk::Tool
每个分割工具类(tools)都继承自mitk::Tool,且有对应的ID和图标。其实,真正的分割方法主要写在mitk::SegTool2D里面。每个tool都应该能够处理交互,比如创建种子点,画轮廓等,以便为分割算法提供参数。有的简单的分割算法甚至集成在了tool中。
tools都是非图形化的类,也就是没有GUI。它们只实现renderwindows中的交互。但是一些工具可能需要用户先指定一些参数,这就要通过GUI完成。tool GUI继承自QmitkToolGUI。tool通过消息将状态变化传递给它们的GUI;tool GUI通过直接调用相应tool的方法完成对tool的通信。示例可参考mitk::BinaryThresholdTool。
slice的提取和替换
Slice处理。3D volume中slice的处理主要由两个filter完成。mitk::ExtractImageFilter从3D Volume中提取一个2D slice。mitk::OverwriteSliceImageFilter可以将3D volume中的一个slice用另一个slice替换。大多数分割工具都使用这两个filter完成在3D volume中画轮廓的工作。
未分割slice的插值
未被分割的slice可以通过插值来完成分割工作。mitk::SegmentationInterpolationController可以扫描一个mitk::Image对象,寻找带有非零像素的slice。它持续跟踪图像中的变化,并能知道一个slice的哪些相邻slice被分割了。QmitkSlicesInterpolator负责GUI,可以开启或者关闭插值,还可以选择是对一个slice还是所有slice进行插值。
问题是QmitkSlicesInterpolator和mitk::SegmentationInterpolationController之间是怎么合作的?
Undo撤销
Undo函数在 mitk::OverwriteSliceImageFilter中实现,这是因为所有的图像更改都在该类中完成。
GUI
最顶层的GUI类是QmitkSegmentationView

来自圈子: 医疗技术
回复

使用道具 举报

0

主题

392

回帖

783

积分

高级会员

积分
783

最佳新人

发表于 2016-4-22 17:00:42 | 显示全部楼层
谢谢大神
回复

使用道具 举报

26

主题

419

回帖

1128

积分

版主

积分
1128

热心会员推广达人优秀版主荣誉管理论坛元老

发表于 2016-5-9 21:35:41 | 显示全部楼层
谢谢楼主分享,收藏
回复

使用道具 举报

0

主题

392

回帖

783

积分

高级会员

积分
783

最佳新人

发表于 2016-5-18 20:51:00 | 显示全部楼层
好好好好哈
回复

使用道具 举报

13

主题

398

回帖

1051

积分

版主

积分
1051

热心会员推广达人优秀版主荣誉管理论坛元老

发表于 2016-5-19 14:15:15 | 显示全部楼层
好贴,不要沉了
回复

使用道具 举报

13

主题

398

回帖

1051

积分

版主

积分
1051

热心会员推广达人优秀版主荣誉管理论坛元老

发表于 2016-5-22 16:36:10 | 显示全部楼层
谢谢楼主!
回复

使用道具 举报

1

主题

412

回帖

843

积分

高级会员

积分
843

最佳新人

发表于 2016-5-23 04:42:31 | 显示全部楼层
顶 顶 顶 顶 顶 顶 顶 顶
回复

使用道具 举报

37

主题

407

回帖

1137

积分

版主

积分
1137

热心会员推广达人优秀版主荣誉管理论坛元老

发表于 2016-5-23 08:15:44 | 显示全部楼层
看看是不是很实用
回复

使用道具 举报

21

主题

420

回帖

1127

积分

版主

积分
1127

热心会员推广达人优秀版主荣誉管理论坛元老

发表于 2016-5-26 22:11:21 | 显示全部楼层
谢谢LZ
回复

使用道具 举报

0

主题

412

回帖

1035

积分

版主

积分
1035

热心会员推广达人优秀版主荣誉管理论坛元老

发表于 2016-7-1 05:49:41 | 显示全部楼层
谢谢楼主分享,收藏
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|关于我们|医维基|网站地图|Archiver|手机版|医疗之家 ( 沪ICP备2023001278号-1 )  

GMT+8, 2024-5-4 07:15 , Processed in 0.154197 second(s), 28 queries .

Designed by Medical BBS

快速回复 返回顶部 返回列表