前言

分块程序依然是基于ITK的,但是借助的辅助工具比较多,有一些还需要自己编译过后才能用,但是都可以在网上下载得到,先介绍一下工具MEPPSPHARM-PDM-masterParaView这3个工具的获得,在介绍程序执行的具体步骤。

MEPP和SPHARM-PDM-master

  • 这两个工具的编译过程在关于环境配置的一些事中有介绍。
  • MEPP/build中的mepp和SPHARM-PDM-master/build/SPHARM-PDM-build中的GenParaMeshCLPParaToSPHARMMeshCLPSegPostProcessCLP的文件是我们最后需要的,用的时候拷贝到需要的地方就可以了。

    ParaView

  • 这是个3维图像软件,从官网下载即可,如果是Linux版本的话,打开bin文件夹下的paraView即可,主要用来做3维文件的格式装换。

    分块程序执行步骤

  1. 先将nrrd格式的二值图像文件转化为nii格式的,转化的代码在此处获得:nrrd2nii

  2. GenParaMeshCLPParaToSPHARMMeshCLPSegPostProcessCLP和nii文件放到同一文件夹下,在此文件夹下运行GeneralMesh脚本,脚本内容如下:

    #!/bin/bash

    mkdir brain-segout
    for ((a=0; a <= 19; a++))
    do
    ./SegPostProcessCLP brain-$a.nii brain-segout/brain-$a-segout.vtk --space 1.5,1.5,1.5
    done
    mkdir brain-meshout
    for ((a=0; a <= 19; a++))
    do
    ./GenParaMeshCLP brain-segout/brain-$a-segout.vtk brain-meshout/brain-$a-para.vtk brain-meshout/brain-$a-surf.vtk --label 1
    done

    mkdir brain-align

    for ((a=0; a <= 19; a++))
    do
    ./ParaToSPHARMMeshCLP brain-meshout/brain-$a-para.vtk brain-meshout/brain-$a-surf.vtk brain-align/brain-$a
    done
  1. 数据名字与数据个数随自己的数据情况修改。

  2. 执行这个脚本需要很长时间,待执行完之后,在brain-align文件加下会出现brain-$aSPHARM_ellalign.vtk形式的文件,先用ParaView软件将该类型的文件挨个转化为.ply格式,然后用mepp软件将.ply文件转化为.off文件,在保存的时候会跳出两个提示框:Do you want to save colors?Do you want to save normals?,都选择NO就行,得到的.off 文件需要去掉第二行(mepp的注释)。

  3. 进入meshSegmetation,该文件夹里有meshSeg.cpp等程序及CmakeList.txt,新建build文件夹,在build下面新建data和training两个文件夹,data里面放测试数据,training里面放训练数据,都是.off文件。

  4. average.cpp求data里面数据的平均值,根据数据的情况修改average.cpp文件,会得到meanShape_liver.off,将meanShape_liver.off保存到meshSegmetation/build中。

  5. meshSegmetation/build中ccmake、make、./main后得到shapeVariation_Face.csvshapeVariation_Vertex.csv,将这两个文件放到MEPP/build中,打开mepp软件,用该软件打开meshSegmetation/build中的meanShape_liver.off文件,点击components——segmentation——VSA——Variation Segmentation,修改Region Number为要分的块数,数字不要太大,否则会崩掉,再点击components——segmentation——VSA——Face Label to Map,会得到’seg.csv’。

  6. 将得到的seg.csv放入到meshSegmetation/build文件夹中,并在该文件夹中建labelssegssegsF三个文件夹,注释掉meshSeg.cpp中的前3行有用代码,重新编译,运行main

    ./main
  7. 最终结果会出现在segsF文件中,用mepp软件打开便可以看到分块的情况。