一、ITK简介
ITK是The Insight Segmentation and Registration Toolkit的简称,它是在美国国家图书馆的资助下开发的用来分析The Visible Human Project中图像算法的开源项目。这个Toolkit提供在了1D、2D、3D图像分析中最前沿的分割与配准算法,主要用于医学影像处理。
ITK是开源并且跨平台的,使用CMake管理配置过程,它使用C++语言开发,代码中使用泛型编程,非常高效,可以使用Tcl,Python以及Java进行封装。
二、ITK的主要特征
1、ITK提供了通用的方式表示图像(任意维度)和面片(非结构化的meshes),提供用于进行分割和配准的算法,主要面向医学应用,尽管也可以处理其他应用;
2、ITK不提供可视化的用户接口,留由其他库(如VTK)提供;
3、ITK大量使用泛型编程技术;
4、ITK内存模型使用智能指针维护对象的引用计数,使用对象工厂实例化对象;
5、ITK支持多线程并行处理;
6、ITK使用命令/观察者模式进行事件处理;
7、ITK基于数据流的架构进行组织,数据被表示成数据对象(data object),数据对象由处理对象(process object)处理,数据对象和处理对象连在一起形成Pipeline。
8,ITK的开发基于极限编程(extreme programming)原则,设计、实现和维护是快速迭代的过程,而测试是这个过程的核心,每当有文件check in、每晚都会进行不同平台和编译器的测试。
三、ITK的数据处理方式(Pipeline)
ITK中数据对象由处理对象(process object)处理,数据对象和处理对象连在一起形成Pipeline。ITK中的pipeline的示意图如Fig 1。处理对象(filter)根据输入数据为输出的数据对象申请内存并拥有此对象,然后该对象的引用传递给下一个filter处理。
ITK中的pipeline一般按如下步骤创建:
1、确定filter的处理的数据类型;
2、 使用filter的静态方法New创建filter的实例;
3、 使用filter的方法SetInput(upperstreamfilter->GetOutput)将filter连在一起;
4、设置filter所需的算法参数;
5、触发最后一个filter的Update()方法。
Pipeline使用示例:
//创建Filter对象
using SigmoidFilterType =
itk::SigmoidImageFilter<ImageType, ImageType>;//自定义ImageType
SigmoidFilterType::Pointer sigmoidFilter = SigmoidFilterType::New();
const int outputMinimum = -500.0;
const int outputMaximum = 500.0;
//设置Filter参数
sigmoidFilter->SetOutputMinimum(outputMinimum);
sigmoidFilter->SetOutputMaximum(outputMaximum);
sigmoidFilter->SetAlpha(alpha);
sigmoidFilter->SetBeta(beta);
//set input
sigmoidFilter->SetInput(input);
//update
sigmoidFilter->Update();
//get output
sigmoidFilter->GetOutput();
一般而言,一个处理对象接收到ProcessObject::Update()请求时Pipeline开始执行。Pipeline会决定多个filter的执行顺序以及内存分配,支持多线程并行处理。
ITK库中提供了大量的Filter,包含了常用的图像处理算法,使用Pipeline可以方便地进行医学影像处理。