tqb4342 / ITK-code

这个库里面的代码主要是为CT图像器官的图谱建立与分割所服务的

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

图谱的训练与分割

前言

这个库里面的代码主要是为CT图像器官的图谱建立与分割所服务的,下面主要介绍了,代码如何使用。

代码运行脑图

![代码运行脑图](http://chuantu.biz/t5/39/1477716982x2728309575.png) ## 每一步的运行过程说明 ### 对灰度和二值图像做插值(该步可以跳过) + 插值是为了防止在训练的过程出现错误,所以相对灰度和二值图像做插值运算,插值代码在`UpsampleVolume_char-label`和`UpsampleVolume_short-img`文件夹中。 + `-label`作用二值图像,`-img`作用于灰度图像,使用前需要先`ccmake`和`make`一下进行配置和编译,然后将生成的`main`可执行文件拷贝到需要插值的文件夹中,执行`upsample`脚本文件就可以进行插值运算来,如果脚本文件不能执行需要先给执行权限,`upsample`脚本文件内容如下:
            #!/bin/bash
            mkdir upsample_label
            for ((a=1; a <= 40; a++))
            do
                ./main label-$a-flip-spleen-roi.nrrd upsample_label/label-$a-flip-spleen-roi-2.nrrd 1 1 2
            done
  • 该脚本是作用于二值图像的例子,灰度图像也要重复上述过程。
    ### 掩码运算

  • 掩码的代码在MASKImage文件夹中,同样使用前需要先ccmakemake一下进行配置和编译,然后执行mask-spleen脚本文件,注意脚本中文件的路径,mask-spleen脚本文件内容如下:

          #!/bin/bash
          for ((a=1; a <= 40; a++))
          do
              ./main spleen-roi/upsample_img/img-$a-flip-spleen-roi-2.nrrd 
              spleen-label-roi/upsample_label/label-$a-flip-spleen-roi-2.nrrd mask_result-2/img-$a-flip-spleen-masked.nrrd
          done
    
  • 如图:

掩码

开始训练

  • 训练的代码在atlas_*_UAB文件夹中,先在此文件夹中建build文件夹,并在build中进行配置和编译。

  • 执行mkdir_file脚本,在build中生成必要的文件夹,将elastixparameters_BSpline.txtparameters_Affine.txttransformix这4个文件拷贝到build中,这个很重要!!!

  • 将掩码后的nrrd文件拷贝到training文件夹中,规范命名,将手动挑选的初始模板与第0组交换。

  • 执行编译后生成的asm的文件,如图: 开始训练

  • 如果运行出错,需要重新下载elastixtransformix文件,下载方式如下:

          sudo apt-get install elastix
    
  • 然后将/etc/bin中的elastixtransformix文件替换掉原来的elastixtransformix文件,重新执行asm文件。

  • 如果数据很多的话,训练过程需要很久,一、两天也有可能,慢慢等吧。

计算图谱

  • 在计算图谱之前需要将最后一次迭代矩阵作用于最初的灰度和二值图像,建两个文件夹‘img_txt’、label_txt分别处理灰度和二值图像。
  • 将最后一次训练迭代的矩阵,即最后一次迭代产生的txt文件拷贝到‘img_txt’、label_txt文件中。
  • 执行mkdir_file脚本,生成必要的文件夹,用g++编译.cpp文件,interpolate0to3.cpp作用于img_txt中的txt,avgTranform.cpp作用于label_txt中的txt.如图:
  • 将最初的灰度和二值图像(nrrd)分别拷贝到‘img_txt’、label_txt文件中,注意命名方式和将手动挑选的初始模板与第0组交换。
  • 执行update脚本,将txt作用到nrrd上,结果保存在exampleoutput中,如图:
  • 将处理后的nrrd求平均,得到最终的图谱:avg.nrrd。需要先ccmakemake一下进行配置和编译求平均的代码,得到一个可执行文件main.
  • 执行main,传的参数为数据集的个数,如图:

通过图谱对原始灰度图像进行分割

  • 训练的代码在MAS_*_UAB_FFD文件夹中,先在此文件夹中建build文件夹,并在build中进行配置和编译。
  • 执行mkdir_file脚本,在build中生成必要的文件夹,将elastixparameters_BSpline.txtparameters_Affine.txttransformix这4个文件拷贝到build中,这个很重要!!!
  • 将图谱和要分割的原始灰度图像拷贝到training文件夹,灰度图谱命名:avg.nrrd,二值图谱命名:avg_mask.nrrd,原始灰度图像命名:liver-0.nrrd.
  • 在MAS文件夹中建一个文件夹用来保存分割后的结果,命名为:0.注:有多少组原始灰度图像,就需要有多少个保存结果的文件,命名方式依次递增。
  • 执行asm文件进行分割,如图:
  • 最后分割结果保存在0文件夹中,如图:

分割ROI篇

前言

图谱的训练与分割这篇文章中已经介绍了如何训练图谱以及分割数据,为了使分割结果更加准确引入了ROI分割,分割时先要对图谱进行处理,以便适应分割数据。此外本文章还准备结果如何计算分割结果的精度。 ### 获取灰度图像的ROI

  • 获取ROI之前需要需要数据对应的坐标,并存放到roi.txt文件夹中,并将roi.txtgetROI的代码可执行文件放到同意路径下,再执行程序便可以得到灰度图像的roi,原始灰度图像和和ROI图像对比如下:
  • 原始灰度图像: 原始灰度图像

  • ROI图像: ROI图像

  • 将处理好的ROI图像放到分割代码的training文件夹中,注意命名方式,序号从0开始。

图谱处理以及分割

  • 使用3dseg软件对图谱进行处理,将目标器官分割出来。

  • 注意:用软件对灰度图谱和二值图谱进行分割是,二者的尺寸和坐标要完全一致。

  • 分割完之后也放入training文件夹中,命名方式:灰度-avg.nrrd;二值-avg_mask.nrrd.

  • 接着开始分割,不过需要注意的是,分割数据和图谱都是ROI,并且需要每组分割数据的坐标存放在roi.txt文件中,roi.txt文件放到build中。分割代码的执行方式和之前一样,所不同的是会产生两个分割结果:ROI结果FINALLL.nrrd,通过坐标处理后的正常大小分割结果FINALLLL.nrrd(比前面多了一个L)

  • 分割时需要修改如下3个参数:

      bool TUMOR_CASE_USE_PA_EQUAL_ONE = true;   //true/false
      bool Use_Process_Ori_mask_9par = false;   //true/false
      double PAThreshold = 0.2;  //  0.2/0.9
    

排列组合有8中可能,所以需要分割8次,保存每次的分割结果,注意最终结果的命名,以便区分。

计算精度

  • 运行计算精度的代码时需要另外再下载 libann-dev,下载方式如下:

      sudo apt-get install libann-dev
    
  • 或者用synatic直接搜索下载。

  • 然后配置和编译好的计算精度的代码,执行时需要两个参数,批量执行的脚本如下:

      for((a=0;a<=20;a++))
      do
       ./EvaluateSegmentationResult seg-spleen/FINALLL-$a-0.2-ff.nrrd refer-spleen/label-roi-$a.nrrd
      done
    
  • 执行完之后会产生一个evaluation.txt文件,对比精度信息全部存在里面,如下图: evaluation.txt

  • JI表示程序分割与手动分割的数据重合率,值越大,说明效果越好,最大是100.

  • ASD表示程序分割与手动分割的数据的边缘距离,值越小,说明效果越好,结果最好是,值为0.

About

这个库里面的代码主要是为CT图像器官的图谱建立与分割所服务的


Languages

Language:C++ 84.9%Language:CMake 7.5%Language:Makefile 4.0%Language:C 3.2%Language:Objective-C 0.3%Language:Shell 0.1%Language:Batchfile 0.0%