requirement | version |
---|---|
git | 2.17.1 |
g++ | Ubuntu 7.5.0-3 ubuntu1~18.04 |
ITK | 4.13 |
VTK | 9.1.0 |
#下载 wget https://github.com/InsightSoftwareConsortium/ITK/releases/download/v4.13.3/InsightToolkit-4.13.3.tar.gz wget https://www.vtk.org/files/release/9.1/VTK-9.1.0.tar.gz wget https://github.com/Kitware/CMake/releases/download/v3.22.1/cmake-3.22.1-linux-x86_64.sh #解压 tar -zxvf InsightToolkit-4.13.3.tar.gz tar -zxvf VTK-9.1.0.tar.gz
bash cmake-3.22.1-linux-x86_64.sh
#配置环境变量
cd the/cmake/path/
echo "export PATH=$PWD/cmake-3.22.1-linux-x86_64/bin:\$PATH">>$HOME/.bashrc
mkdir ITK-build
cd ITK-build
ccmake ../ITK-src
先按”c“进行配置,配置好后按”g“生成
make -j4
#编译好后,可进行安装
sudo make install
测试ITK(ITK/HelloInsight - KitwarePublic)
mkdir HelloInsight
vim HelloInsight.cxx
vim CMakeLists.txt
“HelloInsight.cxx”
#include "itkImage.h"
#include
int main()
{
typedef itk::Image< unsigned short, 3 > ImageType;
ImageType::Pointer image = ImageType::New();
std::cout << "Hello ITK World !" << std::endl;
return 0;
}
“CMakeLists.txt”
cmake_minimum_required(VERSION 3.10.2)
project(HelloInsight)
# Find ITK.
find_package(ITK REQUIRED)
include(${ITK_USE_FILE})
add_executable(HelloInsight HelloInsight.cxx )
target_link_libraries(HelloInsight ${ITK_LIBRARIES})
mkdir HelloInsight_build
cd HelloInsight_build
cmake ../HelloInsight
cmake可能会报以下的错误
#配置cmake,添加ITK的路徑
ccmake HelloInsight_build/
#配置好后
make
./HelloInsight
显示以下则测试成功!
mkdir VTK_build
cd VTK_build/
ccmake ../VTK-9.1.0
按“c”配置cmake,可能会出现沒有安裝openGL的情況,采用以下命令进行安裝(https://www.linuxidc.com/Linux/2017-03/141555.htm)
#安装编译器与基本的函数库
sudo apt-get install build-essential
#安装OpenGL Library
sudo apt-get install libgl1-mesa-dev
# 安装OpenGL Utilities
sudo apt-get install libglu1-mesa-dev
# 安装OpenGL Utility Toolkit
sudo apt-get install freeglut3-dev
测试VTK
vim test.c
“test.c”
#include
void init(void)
{
glClearColor(0.0, 0.0, 0.0, 0.0);
glMatrixMode(GL_PROJECTION);
glOrtho(-5, 5, -5, 5, 5, 15);
glMatrixMode(GL_MODELVIEW);
gluLookAt(0, 0, 10, 0, 0, 0, 0, 1, 0);
return;
}
void display(void)
{
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(1.0, 0, 0);
glutWireTeapot(3);
glFlush();
return;
}
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);
glutInitWindowPosition(0, 0);
glutInitWindowSize(300, 300);
glutCreateWindow("OpenGL 3D View");
init();
glutDisplayFunc(display);
glutMainLoop();
return 0;
}
(5)ITK和VTK混合编程
在对ITK进行ccmake配置时,需要将Module_ITKVTKGlue打开,以避免ITK、VTK混合编译的时候的报错。如图所示
然后重新配置与生成,并且make
mkdir PreProcessingDir
mkdir PreProcessingDir/src
mkdir PreProcessingDir/bin
cd PreProcessingDir/src
vim Preprocessing.cxx
#下一步省略上千行代码
.......
#重点为cmake
vim CMakeLists.txt
CMakeLists.txt
cmake_minimum_required(VERSION 3.10.2)
project(Preprocessing)
#find ITK
find_package(ITK REQUIRED)
include(${ITK_USE_FILE})
#find VTK
#find_package(VTK REQUIRED)
#include(${VTK_USE_FILE})
include_directories(${PROJECT_SOURCE_DIR}/ITKExtraLib
)
add_executable(Preprocessing Preprocessing.cxx)
target_link_libraries(Preprocessing ${ITK_LIBRARIES}
/usr/lib/x86_64-linux-gnu/libjsoncpp.a
)
CMakeLists.txt
文件Q&A
Q1:ITKExtraLib这个文件夹里面是干嘛的?
A1:首先看下目录结构
可以看到文件夹中是itk的拓展模块,是ITK源码里没有的,有关TV滤波器的在MITK中的去噪模块中可以找到,还有两个文件itkStripTsImageFilter.h/hxx是用于脑部提取的。将他们加入的include里进行调用。
Q2:/usr/lib/x86_64-linux-gnu/libjsoncpp.a又是什么
A2:这个是由于在预处理传入的参数中用到了.json文件,而对于json文件的读取jsoncpp是一个很好的工具,文档后面对其安装与使用进行了介绍,代码中调用了jsoncpp的库,因此在链接库中加入了安装jsoncpp后生成的静态库。
cd ../bin
ccmake ../src
进入到cmake之后,按c配置,可能会让你配置ITK的路径,按你的安装路径配置即可
再按c,然后配置成功后按g生成回到shell界面
#进行编译
make
#下一步找Bug....................
1.读取dicom数据时需要注意数据类型要相同,不然容易报以下错误
注意,保存dicom图象时需要使用GDCMIO类。
2.在实例化一个类的智能指针时,同时New一个内存,若忘记会出现段错误
3.在实例化一个模板类时,需要注意的是,在linux中需要在之前添加typename,如下
typename ResampleImageFilterType::Pointer resampler = ResampleImageFilterType::New();
否则会出现下面的报错
4.提取json文件内容,可安装jsoncpp库,安装jsoncpp时需要注意,如果采用apt安装
#apt安装
sudo apt-get install libjsoncpp-dev
调用时采用下列的方式调用,许多教程上没有带jsoncpp,会导致编译出错
#include "jsoncpp/json/json.h"
5.在编译的时候要保证用的是ITK5以下的,不然拓展ITK库TV滤波器会编译不通过,或者说运行会报错,用了最新的MITK里的TV滤波器相关的文件也是一样的,惨痛教训!
1.安装
#下载
git clone https://github.com/SuperElastix/elastix.git
#切换版本(以下支持ITK4.13.0)
cd elastix
git checkout 4.9.0
#创建bin目录
mkdir ../bin
cd ../bin
ccmake ../elastix
按c配置,配置itk目录,然后再按c,config done 之后按g生成
make -j4
make install
安装成功
2.使用
可直接采用elastix命令行运行
#运算配准生成变换参数(源码中有多个配准参数文件选择,下面采用parameters_BSpline.txt进行配准)
elastix -f ./SyntheticTemp/FixedCTImage.nii -m ./SyntheticTemp/MovePTImage.nii -out ./regOut -p parameters_BSpline.txt
#TransformParameters.0.txt为上一步生成的参数文件,通过变换得到最终的配准结果
transformix -in regOut/result.0.mhd -out regResult/ -tp regOut/TransformParameters.0.txt
通过打开最后的regResult可得到最后的配准结果
3.也可通过cmake添加到自己的项目当中(https://github.com/SuperElastix/elastix/releases/download/5.0.1/elastix-5.0.1-manual.pdf)
*注意,若通过动态或静态库在自己的项目中调用elastix需要在编译时关闭 ELASTIX BUILD EXECUTABLE,在编译elastix时不能编译成动态库,需要把BUILD SHARED LIBS 关闭,详情请看链接文档19页和43页