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()方法。该方法将根据输入生成输出。在执行时,可以假定输入的是新的数据集。
相关文章推荐
- 3D游戏基础 Direct3D(一) D3D基本概念及渲染流水线简介
- GPU概念以及D3D渲染流水线(管线)
- 3D游戏基础 Direct3D(一) D3D基本概念及渲染流水线简介
- 《冯乐乐》渲染流水线中的三个概念阶段——笔记整理
- 数字集成电路设计-5-pipelining(流水线)
- 【图形学】渲染管道 渲染管线 渲染流程 渲染流水线
- 新手向:如何理解OpenGL中着色器,渲染管线,光栅化等概念
- GPU渲染流水线
- OptiX的渲染流水线
- 【图形学】渲染管道 渲染管线 渲染流程 渲染流水线
- 指令集及流水线基本概念
- Direct3D固定渲染流水线分析与总结
- C# Managed DirectX 三角形旋转(修改Direct 3D绘制流水线(渲染管线)中代码)
- 如何理解着色器,渲染管线,光栅化等概念?
- Shader入门理论(三)渲染流水线总结解惑
- 指令集及流水线基本概念
- 【Unity Shader】渲染流水线
- Pipelining流水线技术
- 渲染流水线总结
- 基于UI扩展性!功能超强的Windows 9概念设计渲染图