ITK(InsightToolkit)简介

一、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(InsightToolkit)简介_第1张图片

Fig 1 ITK Pipeline示意图

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可以方便地进行医学影像处理。

参考:ITK简介与ITK Pipeline

你可能感兴趣的:(医学影像处理,医学影像处理,itk)