ITK之数据处理管道和空间对象

248 阅读4分钟

1 数据处理管道

数据对象(例如图像和网格)是用来代表数据的,过程对象就是用来操作数据对象并产生新的数据对象的类。 像 soursefilter objectmappers 都是过程对象。 Sourse(例如 readers)生成数据, filter object 载入数据并经过处理产生新的数据,而 mappers 接收数据并输出到一个文件或其他系统中。有时 filter 可以在广义上表示所有三种类型。

数据处理管道连接了数据对象(如图像和网格)和过程对象。管道支持一个自动更新机制。该机制在当且仅当它的输入或内在状态改变时才会唤起一个滤波器来运行。另外,数据管道还支持 streaming,可以自动将数据分成许多小部分,对这些小部分进行逐一处理,并重新集合处理后的数据产生最终结果。

通常使用 SetInput( )GetOutput( )方式连接数据对象和过程对象,方法代码如下:

typedef itk::Image<float,2> FloatImage2DType;
itk::RandomImageSource<FloatImage2DType>::Pointer random;
random = itk::RandomImageSource<FloatImage2DType>::New( );
random->SetMin(0.0);
random->SetMax(1.0);
itk::ShrinkImageFilter<FloatImage2DType,FloatImage2DType>::Pointer shrink;
shrink = itk::ShrinkImageFilter<FloatImage2DType,FloatImage2DType>::New( );
shrink->SetInput(random->GetOutput( ));
shrink->SetShrinkFactors(2);
itk::ImageFileWriter::Pointer<FloatImage2DType> writer;
writer = itk::ImageFileWriter::Pointer<FloatImage2DType>::New( );
writer->SetInput (shrink->GetOutput( ));
writer->SetFileName( ‘‘test.raw’’ );
writer->Update( );

在这个例子中,源代码对象 itk::RandomImageSourceitk::ShrinkImageFilter 相连接,shrink 滤波器和 mapper itk::ImageFileWriter 相连。当调用 Update( )方式时,数据处理管道就会按顺序使用这些滤波器,并将最终结果储存到文件中。

2 空间对象

ITK 空间对象框架支持对象处理的任务就是图像分割和配准的理论。 图像只是表示物体的一个媒介,许多处理和数据算法应该能够针对物体本身而并不是基于表示物体的媒介。

ITK 空间对象提供了一个界面,用来储存对象的物理位置、几何性质以及对象之间的关系,储存是在独立于用来表示这些对象的形式的情况下进行的。也就是说,由一个空间对象 保持的内在表达可能是一个对象内在的列表、对象的表面网格、对象的内在点或表面的一个连续的或参数的表达等等。

空间对象框架提供的功能支持对象分割、配准、表面/立体视图以及其他显示和分析功能。空间对象框架扩张了对计算机视图工具包很普遍的一个cene graph概念,因此也支 持这些新函数功能。使用空间对象可以做到以下几点:

(1) 指定空间对象的父对象和子对象。 在这种方式下, 一个 liver 可以包含许多 vessels,而这些 vessels 可以用一个树型结构来组织。

(2)查询一个物理点是否在一个对象或它的子对象中。

(3)求出由一个对象或其子对象所指定的一个相关强度函数上某一物理点的值或派生值。

(4)指定由一个父对象坐标系转换到一子对象坐标系的转换公式。

(5)计算一个空间对象及其子对象的 bounding box

(6)查询对象最初计算的 resolution。例如,你可以查询一个用来生成

itk::BlobSpatialObject 的一个特定实例的图像的 resolution(例如 voxel 空间)。

目前已经实现的空间对象类型包括: BlobEllipseGroupImageLineSurfaceTube。对象 itk::Scene 用来控制一个个依次含有子对象的空间对象列表。每个空间对象都以 一个色彩特征标记,每个空间对象都有自己的功能。例如,itk::TubeSpatialObjects 表达了与它们相连的父对象。

ITK 中的空间对象和它们的方法有限,但它们的数量正在增长且潜力很大。使用这些名义上的空间对象能力方法如 martching cubesmutual information registration,可以应用于对象而不用考虑它们的内在表示。通过拥有一个共有的 API,同一方法就可以用来将一个心脏的一个参数表示和一个单独的 CT 数据进行配准或将一个肝脏的两个侧面的分割进行配准。