掩码

  • 对掩码程序进行make编译后会生成一个main的可执行文件,执行该文件是需要传递3个参数,传递方式如下:

    ./main 原始灰度图像.nrrd 对应的二至图像.nrrd 掩码后文件名.nrrd
  • 如果需要掩码的图像数量较多,可以写一个脚本批量处理,执行脚本前需要主要脚本的执行权限。

图像对齐建立图谱

  • 该部分是进行图像分割的核心代码,代码量比较多,需要有很多细节需要注意。

  • 程序通过调用Traditional_Regi_Elastix函数建立图谱,共有4个参数,参数列表如下:

    iterIndex   //当前的迭代次数,迭代次数在main函数中设置
    numSamples //数据集的个数
    USE_HEALTHY_ATLAS_AS_REF //USE_HEALTHY_ATLAS_AS_REF=false
    ofstream &ofs //记录程序执行时间等信息
  • 为了方便程序的阅读,有些参数的默认值需要记住:

    int Index_Atlas = 0;
    bool use_Index_Atlas = true;
    numTrainData = numSamples //数据集的个数
    FixedAsMoving = false;
    FirstIterationAffine = false;
    NON_GREEDY = true;
    char * movingIm_Affine //存放将要对齐的图像集名
    fixedIm //存放平均模板名
    char *EXE_REGISTER = "./elastix"; //elastix是一个可执行文件,程序中通过system调用,对齐的作用。

程序运行说明

  • 将所有掩码后的数据集放到training文件夹中,命名格式为liver-mask_#.nrrd,#从0开始,且liver-mask_0.nrrd是初始的平均图像模板。初始模板的选择是通过手动挑选最接近平均目标分割图像的数据集。

  • 创建REG_UAB文件夹,用于存放每次Ii对齐到平均图像模板之后所产生的变换矩阵T和刚性与非刚性变换后的图片数据以及平均模板。

  • 每次迭代后产生的平均图形模板命名为:Average_UAB_iter#-0.nrrd

  • NON_GREEDY用来控制要对齐的数据源,NON_GREEDY=true时,每一次迭代都是将原始的掩码图像(liver-mask_#.nrrd)对齐到平均图像模板上;NON_GREEDY=false时,第一次迭代是将原始的掩码图像(liver-mask_#.nrrd)对齐到初始的平均图像模板(liver-mask_0.nrrd)上,之后得迭代过程是将非刚性变换的数据集(Iter%d_%d_Warped.nrrd)对齐到平均图像模板上;本程序中是第二种情况:NON_GREEDY=true

  • 刚性变换得到的数据集:Affine_Iter%d_%d_Warped.nrrd;非刚性变换得到的数据集:Iter%d_%d_Warped.nrrd;刚性变换得到的T:Affine_Iter%d_%d.txt;非刚性变换得到的T:BSpline_Iter%d_%d.txt。第一个%d是迭代的次数,第二个%d是第几个数据集。程序先求刚性再求非刚性。

  • 关于第0组数据,需要注意的:

    Average_UAB_iter0-0.nrrd = liver-mask_0.nrrd
    Average_UAB_iter0-0.nrrd = Affine_Iter0_0_Warped.nrrd
    Average_UAB_iter0-0.nrrd = Iter0_0_Warped.nrrd
  • Average_UAB_iter#-0.nrrd由每一组数据非刚性对齐后的数据集(Iter%d_%d_Warped.nrrd)叠加求和再求平均得到的。

新的肝脏初始化方法

肝脏图谱分割方法

  • 上图的执行流程如下:
    • 先将灰度图谱对齐到测试灰度图像上,得到一个刚性变换矩阵和一个非刚性变换矩阵;
    • 将变换矩阵作用到二值图谱中得到变换后的二值图像;
    • 将测试的灰度图像做似然运算,得到最大似然图像;
    • 似然图像与变换后的二值图像做与运算,得到最终的分割结果。

分割参数调节

  • 在做图像分割是,需要调节MAS_Elastix.cpp文件中如下三个参数:

    bool TUMOR_CASE_USE_PA_EQUAL_ONE = false;   //true/false
    bool Use_Process_Ori_mask_9par = false; //true/false
    double PAThreshold = 0.2; //PAThreshold = 0.2/0.9
  • 每个参数都有两个取值,排列组合共有八中可能,所以最后分割数据需要测试八次,取其中结果最好的一次。

训练图谱

  • 需要将灰度图像和二值图像作掩码之后才能开始训练图谱;

  • 掩码的结果又4种可能,因此对应的图谱也有4中结果,情况如下:

    1.灰度图像与二值图像都不插值作掩码,训练得到图谱;
    2.灰度图像插值、二值图像不插值,再作掩码,训练得到图谱;
    3.灰度图像不插值、二值图像插值,再作掩码,训练得到图谱;
    4.灰度图像与二值图像都插值,再作掩码,训练得到图谱。

  • 分别测试上述4种图谱,对比分割结果,取其中分割结果最好的图谱。