ITK是一个开放源码、面向对象的软件系统,提供一个医学图像处理、图像分割与配准的算法平台。不过我目前使用不多,只了解一些配准的东西,所以就不胡乱介绍了。可以参考:
ITK is an open-source, cross-platform system that provides developers with an extensive suite of software tools for image analysis. Developed through extreme programming methodologies, ITK employs leading-edge algorithms for registering and segmenting multidimensional data.
ITK 是一个开放源码的软件系统,这就意味着ITK 用户和开发团体就可以方便地对软件进行开发和改进。用户和开发者可通过程序错误报告、调试、测试、新类以及其他反馈来对ITK进行应用开发。
ITK需要自己下载源码进行编译。
使用CMake可以使ITK跨平台工作。CMake是一个跨平台,开放源码的安装(编译)工具。可以使用简单的语言来描述所有平台的安装(编译)过程。CMake的应用是非常广泛的,它支持要求系统设置、编译器特征测试和代码继承的复杂环境。CMake可以输出UNIX和Cygwin系统下的Makefiles和Windows系统下的VisualStudio工作区(支持像Borland之类的其他编译器安装文件)。CMake的信息由CMakeList.txt文件提供。
首先要到ITK网站下载源代码。Library Source就是ITK源文件。Documentation是各种说明。可以下载以供学习参考。
到CMake网站根据自身系统环境下载CMake。下载完成后进行安装。
使用ITK 创建一个新的工程,最简单的方法就是在你的电脑中建立一个新文件夹,在文件夹中建立两个文件:一个是CMakeLists.txt,CMake使该文件来创建一个Makefile(若你使用UNIX)或一个VisualStudio工作区(若你使用MS-Windows);另一个文件是真正的调用ITK中的类的C++程序文件。
首先编写一个测试例子:
你在新工程中要写的两个文件目录。这两个文件可以在ITK源文件Insight/Examples/
Installation目录中找到。CMakeLists.txt文件包括以下内容:
project(HelloWorld)
find_package(ITK REQUIRED)
include(${ITK_USE_FILE})
add_executable(HelloWorld HelloWorld.cxx)
target_link_libraries(HelloWorld ${ITK_LIBRARIES})
第一行定义了在VisualStudio中出现的工程名字(这在UNIX系统下毫无影响)。第二行载入一个带有寻找ITK的预定义策略的CMake文件。如果寻找ITK的策略失败,CMake将会要求你提供ITK的安装位置。你可以在ITK_BINARY_DIR
变量中填入正确的位置信息。命令行INCLUDE(${ITK_USE_FILE}
)载入UseITK.cmake文件来设定所有的ITK配置信息。命令行ADD_EXECUTABLE
定义了一个此工程产生运行结果文件的名字。ADD_ EXECUTABLE
中的保留变量是源代码编译和链接的名字。最后一行命令TARGET_LINK_LIBRARIES
指出哪些ITK类库将链接到这个工程中来。
这一节的源代码可以在Examples/Installation/HelloWorld.cxx中找到。
接下来的代码是一段小的应用编程执行代码,用来测试包括头文件和类库的链接:
#include "itkImage.h"
#include
int main()
{
typedef itk::Image< unsigned short, 3 > ImageType;
ImageType::Pointer image = ImageType::New();
std::cout << "ITK Hello World !" << std::endl;
return 0;
}
这段程序代码是将一个三维图像中的像素用无符号短字符类型数字代替,然后构造这个图像并指向一个itk::SmartPointer。后面将详细介绍智能指针,现在你可以把它看做是对一个对象的实例的操作。到此你已经成功地安装、运行了ITK,并创建了你的第一个简单程序。
ITK的使用一种方式就是按照上文介绍的,采用CMakeList的方式来生成项目,之后进行使用。这种使用方法需要自己编写CMakeList。
另外一种ITK的使用方式是网上很多教程采用的。手动创建VS项目,将前文ITK产生的文件夹(bin、include、lib、share)路径加入到项目属性中。具体做法是:
但是,但是第二种方式可能会产生问题(见下一部分),所以如使用可考虑参考http://www.itk.org/Wiki/ITK/Using_ITK_Without_CMake方式,如果再有问题,可参考下一部分。
在我的使用过程中,如果采用如前文所述的在VS项目中添加目录和附加依赖项时会发生读取图像时出现ImageFileReaderException的问题,无法读取测试用的png文件。
后参考http://codeplanet.sinaapp.com/?p=222这里和http://blog.csdn.net/taigw/article/details/37877321这里回复下的方法,指定图片类型的方式解决
typedef itk::PNGImageIO ImageIOType;
ImageIOType::Pointer pngIO = ImageIOType::New();
reader->SetImageIO(pngIO);
writer->SetImageIO(pngIO);
但此方法较为繁琐,而且需要改动源代码。
http://codeplanet.sinaapp.com/?p=236这里还有另外一种方法,但经过尝试,会报错。
所以最后的解决方案是采用ITK的第一种使用方式,通过CMakeList创建项目。
在使用CMakeList时还遇到了找不到ITKIO.lib问题,后经查找,在http://public.kitware.com/pipermail/insight-users/2012-January/043535.html发现了解决方案。遇到相同问题可以参考。
PS:我本人没试过http://www.itk.org/Wiki/ITK/Using_ITK_Without_CMake提供的方式,如果有人成功,望告知。
我将自己下载的ITK的源码以及InsightSoftwareGuide放在了百度云,方便大家下载。
InsightSoftwareGuide有中文版,但是翻译不太好,可以参考着看。我当初是在哪儿下的记不清了,如果有侵犯到作者权利,那么请告诉我,我会及时说明,在此先说抱歉。
http://www.itk.org/ITK/resources/software.html——InsightSoftwareGuide
http://blog.csdn.net/taigw/article/details/37877321——ITK在VS2010中的安装和第一个例子
http://codeplanet.sinaapp.com/?p=222——ITK读写IMAGEFILEREADEREXCEPTION问题
http://public.kitware.com/pipermail/insight-users/2012-January/043535.html——[Insight-users] ITKIO.lib not found