• 手把手教你Linux下基于ITK开发基础(1)


    手把手教你Linux下基于ITK开发基础(1)

    *requirement:

    requirementversion
    git2.17.1
    g++Ubuntu 7.5.0-3 ubuntu1~18.04
    ITK4.13
    VTK9.1.0

    1.installation

    (1)下载itk、vtk和cmake(git 下载可能会有问题,建议直接采用以下的命令)

    #下载
    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    (2)安装cmake

    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
    
    • 1
    • 2
    • 3
    • 4

    (3)编译ITK

    mkdir ITK-build
    cd ITK-build
    ccmake ../ITK-src
    
    • 1
    • 2
    • 3

    在这里插入图片描述

    先按”c“进行配置,配置好后按”g“生成

    make -j4
    #编译好后,可进行安装
    sudo make install
    
    • 1
    • 2
    • 3

    测试ITK(ITK/HelloInsight - KitwarePublic

    mkdir HelloInsight
    vim HelloInsight.cxx
    vim CMakeLists.txt
    
    • 1
    • 2
    • 3

    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;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    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})
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    mkdir HelloInsight_build
    cd HelloInsight_build
    cmake ../HelloInsight
    
    • 1
    • 2
    • 3

    cmake可能会报以下的错误

    #配置cmake,添加ITK的路徑
    ccmake HelloInsight_build/
    #配置好后
    make
    ./HelloInsight
    
    • 1
    • 2
    • 3
    • 4
    • 5

    显示以下则测试成功!

    (4)编译vtk(可选)

    mkdir VTK_build
    cd VTK_build/
    ccmake ../VTK-9.1.0
    
    • 1
    • 2
    • 3

    按“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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    测试VTK

    vim test.c
    
    • 1

    “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;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32

    (5)ITK和VTK混合编程

    在对ITK进行ccmake配置时,需要将Module_ITKVTKGlue打开,以避免ITK、VTK混合编译的时候的报错。如图所示

    在这里插入图片描述

    然后重新配置与生成,并且make

    2.创建新项目

    (1)创建相应的目录

    mkdir PreProcessingDir
    mkdir PreProcessingDir/src
    mkdir PreProcessingDir/bin
    
    • 1
    • 2
    • 3

    (2) 开始写文件

    cd PreProcessingDir/src
    vim Preprocessing.cxx
    #下一步省略上千行代码
    .......
    #重点为cmake
    vim CMakeLists.txt
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    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
    )
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    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后生成的静态库。

    (3) 文件写完了开始编译

    cd ../bin
    ccmake ../src
    
    • 1
    • 2

    进入到cmake之后,按c配置,可能会让你配置ITK的路径,按你的安装路径配置即可

    再按c,然后配置成功后按g生成回到shell界面

    #进行编译
    make
    #下一步找Bug....................
    
    • 1
    • 2
    • 3

    3.ITK编程注意事项

    1.读取dicom数据时需要注意数据类型要相同,不然容易报以下错误

    注意,保存dicom图象时需要使用GDCMIO类。

    2.在实例化一个类的智能指针时,同时New一个内存,若忘记会出现段错误

    3.在实例化一个模板类时,需要注意的是,在linux中需要在之前添加typename,如下

    typename ResampleImageFilterType::Pointer resampler = ResampleImageFilterType::New();
    
    • 1

    否则会出现下面的报错

    4.提取json文件内容,可安装jsoncpp库,安装jsoncpp时需要注意,如果采用apt安装

    #apt安装
    sudo apt-get install libjsoncpp-dev
    
    • 1
    • 2

    调用时采用下列的方式调用,许多教程上没有带jsoncpp,会导致编译出错

    #include "jsoncpp/json/json.h"
    
    • 1

    5.在编译的时候要保证用的是ITK5以下的,不然拓展ITK库TV滤波器会编译不通过,或者说运行会报错,用了最新的MITK里的TV滤波器相关的文件也是一样的,惨痛教训!

    4.采用elastix配准

    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    按c配置,配置itk目录,然后再按c,config done 之后按g生成

    make -j4
    make install
    
    • 1
    • 2

    安装成功

    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
    
    • 1
    • 2
    • 3
    • 4

    通过打开最后的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页

  • 相关阅读:
    数字化转型背景下企业知识管理能力提升路径
    极简人体感应芯片-DLT8P68SA-杰力科创
    凯云科技 | 专业嵌入式测试软硬件整体解决方案供应商
    信息化发展69
    计算机竞赛 机器视觉 opencv 深度学习 驾驶人脸疲劳检测系统 -python
    MySQL——一、安装以及配置
    方法递归调用
    前端UNIAPP端webview嵌入H5使用说明文档
    深度学习(4):Word2Vec 字&词向量的训练和使用
    EMA算法
  • 原文地址:https://blog.csdn.net/ye1391/article/details/126540420