您的位置:首页 > 其它

MITK Conecpts - Pipelining/MITK中的(渲染)流水线概念

2016-11-29 22:28 357 查看

Introduction to Pipelining

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

在现实世界中,pipeline(管道)将某种类型的源与用户连接。因此,我们确定了三个关键概念:

source/源:它生成某种类型的数据;

pipeline/管道:传输数据。 许多不同的管线段可以在线切换从而实现这一点;

consumer/用户:使用这些数据来满足自己的需要。

与实际的管道不同:一个物理pipeline永远不会像软件开发中的pipeline一样去处理它的内容(这就是为什么他们也被称为滤波器)。人们可能会问为什么不在用户对象中实现处理逻辑,因为它显然知道如何处理它的数据。这样做的两个主要原因是可重用性和灵活性。比如有人想显示CT图像分割出的骨骼,那么他可以构建一个类来解决这个问题,或者在显示类和源之间构建管道。我们知道CT中的骨骼非常亮,因此我们使用阈值滤波器和分割滤波器来解决这个问题。



现在让我们进一步假设,在成功地将这种新技术卖给一家大公司之后,我们计划对超声成像技术做同样的工作。超声图像中的亮度关系(与CT中的)基本相同,但是超声图像噪声很多,并且对比度明显更低。由于我们使用pipelining,这是没有问题的:我们不需要改变我们的分割类 - 我们只需要在管道前面插入两个新的滤波器:



这看起来很简单,但是当使用来自许多不同设备的多个输入流、且需要支持不同规格的设备时,流水线可以节省很多时间。

Pipelining in MITK

The Update() Mechanism

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



The Pipeline Hierarchy

除用户(可以是任何类)之外,pipeline所有部分的基类都是mitk :: Baseprocess。该类引入了处理数据的能力,具有输出和输入。但是,这个类很少被直接使用。



几个源类扩展了BaseProcess。根据他们提供的数据类型,ImageSource,PointSetSource和SurfaceSource都标志着pipeline的开始。

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

Working with Filter

Setting Up a Pipeline

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


Writing Your Own Filter

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

确定输入及输出所需的数据类型;

根据第一步,扩展BaseProcess可用的具体子类。例如,一个处理图像的滤波器,应该扩展ImageToImageFilter;

确定需要多少输入和输出;

在构造函数中,定义输出的数量,并创建输出;

//设置输出个数
this->SetNumberOfOutputs(1);

//创建新的输出
mitk::Image::Pointer newOutput = mitk::Image::New();
this->SetNthOutput(0, newOutput);


实现MakeOutput()方法。该方法创建一个新的、可以写入的、干净的输出。 请参阅具有类似任务的滤波器;

实现GenerateData()方法。该方法将根据输入生成输出。在执行时,可以假定输入的是新的数据集。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  MITK pipeline