【MITK】基础概念-流水线(Pipeline)

1 流水线简介

MITK中的图像处理大量使用了流水线(pipelining)的概念,在使用MITK进行开发的过程中,对其有个清晰的理解至关重要。本文档将首先阐明流水线背后的一般思想,然后讨论一些你应该了解的MITK细节。

在现实世界中,管道将某种类型的源和用户连接起来。 因此,我们确定了三个关键概念:
(1)源(source):生成某种类型的数据;
(2)管道(pipeline):传输数据,许多不同的管道段可以组合接通成管线,从而实现该功能;
(3)用户(consumer):使用这些数据来满足自己的需要。

将MITK中的管道和真实的管道相比较的话,有一点不妥当的是:物理管道永远不会处理它的内容,而在软件开发过程中,管道通常会这样做(这就是它们经常也被称为滤波器的原因)。有人可能会问,为什么不在用户对象本身中实现处理逻辑,因为它明显知道如何处理它的数据。两个主要原因是可重用性和灵活性。比如说,有人想要显示CT图像中的骨骼分割结果,他可以构建一个单独的类来解决这个问题,或者在显示类和源之间构建一个管道。我们知道在CT扫描中骨骼非常亮,所以我们使用一个阈值滤波器,然后使用一个分割滤波器来解决这个问题。
在这里插入图片描述
现在让我们进一步假设,在成功将这种新技术出售给一家大公司后,我们计划利用超声成像技术做同样的事情。超声图像的亮度关系(与CT)基本相同,但超声图像有很多噪声,对比度明显更低。由于我们使用了流水线,所以这不成问题:我们不需要更改原有的分割类,只需在原有的管道前插入两个新的滤波器即可:
在这里插入图片描述

2 MITK中的流水线

2.1 更新机制

管道中的数据流只在用户调用Update()函数时触发。然后,管道的每个部分依次触发它前面(滤波器等)的Update()方法。最后,源使用自己的GenerateData()方法创建一批新的数据,并通知其后续者新数据可用。然后,管道可以开始处理数据,直到完成的数据被最后一个滤波器输出。
在这里插入图片描述

2.2 管道层次结构

除用户(可以是任何类)之外,管道所有部分的基类都是mitk::Baseprocess。该类引入了处理数据的能力,具备输出和输入。但是,这个类很少被直接使用。
在这里插入图片描述
几个源类扩展了BaseProcess。由它们提供的数据类型,ImageSource,PointSetSource和SurfaceSource都标志着管道的开始。

滤波器自身扩展了其中一个源类。这可能不会立即有意义,但从根本上来说滤波器就是一个具有额外输入的源。

3 使用滤波器

3.1 装配管道

//创建参与者
mitk::USVideoDevice::Pointer videoDevice = mitk::USVideoDevice::New("-1", "Manufacturer", "Model");
TestUSFilter::Pointer filter = TestUSFilter::New();
//使videoDevice产生它的第一个数据集,这样它的输出就不为空
videoDevice->Update();
//将滤波器的输入连接到设备的输出
filter->SetInput(videoDevice->GetOutput());
//现在管道就起作用了
filter->Update();

3.2 写自己的滤波器

下面给出写一个滤波器的推荐方法:

  • 确定输入及输出所需的数据类型;
  • 根据第一步的信息,扩展BaseProcess可用的最具体的子类,例如,一个处理图像的滤波器,应该扩展ImageToImageFilter;
  • 确定需要多少输入和输出;
  • 在构造函数中,定义输出的数量,并创建一个输出;
    //设置输出的个数
    this->SetNumberOfOutputs(1);
    
    //创建一个新的输出
    mitk::Image::Pointer newOutput = mitk::Image::New();
    this->SetNthOutput(0, newOutput);
    
  • 实现MakeOutput()方法,该方法创建一个新的、可以写入的、干净的输出,请参阅具有类似任务的滤波器;
  • 实现GenerateData()方法,该方法将根据输入生成输出。在执行时,可以假定输入的是新数据集。
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值