实例23 置信连接算法对脑部MHA文件进行三维分割

在这个例子中使用前面例子中的代码,并设置图像的维数为 3 。应用梯度各向异性扩散来平滑图像。这个滤波器使用两个迭代器、一个值为 0.05 的 time step 和一个值为 3 的conductance 值,然后使用置信连接方式对平滑后的图像进行分割。使用的五个种子点的坐标分别为( 118 , 85 , 92 )、( 63 , 87 , 94 )、( 63 , 157 , 90 )、( 111 , 188 , 90 )、( 111 , 50 , 88 )。置信连接滤波器使用的参数:邻域范围是 2 ; 迭代器数目为5;和 f 值 为2.5( 跟前面的例子中一样 ) 。然后使VolView 来显示结果。

#include "itkConfidenceConnectedImageFilter.h"
#include "itkCastImageFilter.h"
#include "itkCurvatureFlowImageFilter.h"
#include "itkImageFileReader.h"
#include "itkImageFileWriter.h"

int main( int argc, char *argv[] )
{
  //if( argc < 3 )
  //  {
  //  std::cerr << "Missing Parameters " << std::endl;
  //  std::cerr << "Usage: " << argv[0];
  //  std::cerr << " inputImage  outputImage " << std::endl;
  //  return EXIT_FAILURE;
  //  }


  typedef   float           InternalPixelType;
  const     unsigned int    Dimension = 3;
  typedef itk::Image< InternalPixelType, Dimension >  InternalImageType;

  typedef unsigned char                            OutputPixelType;
  typedef itk::Image< OutputPixelType, Dimension > OutputImageType;

  typedef itk::CastImageFilter< InternalImageType, OutputImageType >
    CastingFilterType;
  CastingFilterType::Pointer caster = CastingFilterType::New();


  typedef  itk::ImageFileReader< InternalImageType > ReaderType;
  typedef  itk::ImageFileWriter<  OutputImageType  > WriterType;

  ReaderType::Pointer reader = ReaderType::New();
  WriterType::Pointer writer = WriterType::New();

  reader->SetFileName( "BrainProtonDensity3Slices.mha" );
  writer->SetFileName( "BrainProtonDensity3Slices_3.mha" );

  typedef itk::CurvatureFlowImageFilter< InternalImageType, InternalImageType >
    CurvatureFlowImageFilterType;
  CurvatureFlowImageFilterType::Pointer smoothing =
                         CurvatureFlowImageFilterType::New();

  typedef itk::ConfidenceConnectedImageFilter<InternalImageType, InternalImageType>
    ConnectedFilterType;
  ConnectedFilterType::Pointer confidenceConnected = ConnectedFilterType::New();

  smoothing->SetInput( reader->GetOutput() );
  confidenceConnected->SetInput( smoothing->GetOutput() );
  caster->SetInput( confidenceConnected->GetOutput() );
  writer->SetInput( caster->GetOutput() );

  smoothing->SetNumberOfIterations( 2 );//
  smoothing->SetTimeStep(0.05);//每步迭代时间

  confidenceConnected->SetMultiplier( 2.5 );//;设置乘法因子f 2.5  可调
  confidenceConnected->SetNumberOfIterations( 5 );//设置迭代次数为5(迭代器数目)
  confidenceConnected->SetInitialNeighborhoodRadius( 2 );//设置领域范围为2
  confidenceConnected->SetReplaceValue( 255 );

  //设置种子点1
  InternalImageType::IndexType index1;
  index1[0] = 63;//X 轴
  index1[1] = 67;//Y 轴
  index1[2] = 1;//Z 轴 (第几个切片)
  confidenceConnected->AddSeed(index1);

 /* InternalImageType::IndexType index1;
  index1[0] = 118;
  index1[1] = 133;
  index1[2] = 92;
  confidenceConnected->AddSeed( index1 );*/

  try
    {
    writer->Update();
    }
  catch( itk::ExceptionObject & excep )
    {
    std::cerr << "Exception caught !" << std::endl;
    std::cerr << excep << std::endl;
    return EXIT_FAILURE;
    }


  return EXIT_SUCCESS;
}

当选取一个种子点(63,67,1),f=2.5时,三维图像中包含的三张二维图像的白质分割效果如下:

                                ITK系列23_ 区域增长(置信连接)算法对脑部MHA文件进行三维分割_ITK    ITK系列23_ 区域增长(置信连接)算法对脑部MHA文件进行三维分割_区域增长_02     ITK系列23_ 区域增长(置信连接)算法对脑部MHA文件进行三维分割_MHA文件_03

                              ITK系列23_ 区域增长(置信连接)算法对脑部MHA文件进行三维分割_MHA文件_04       ITK系列23_ 区域增长(置信连接)算法对脑部MHA文件进行三维分割_区域增长_05      ITK系列23_ 区域增长(置信连接)算法对脑部MHA文件进行三维分割_三维分割_06

当选取一个种子点(120,146,1),f=2.3时,三维图像中包含的三张二维图像的白质分割效果如下:

                                ITK系列23_ 区域增长(置信连接)算法对脑部MHA文件进行三维分割_置信连接_07      ITK系列23_ 区域增长(置信连接)算法对脑部MHA文件进行三维分割_三维分割_08       ITK系列23_ 区域增长(置信连接)算法对脑部MHA文件进行三维分割_区域增长_09

当选取两个种子点(63,67,1)、(120,146,1),f=2.2时,三维图像中包含的三张二维图像的白质分割效果:

                                ITK系列23_ 区域增长(置信连接)算法对脑部MHA文件进行三维分割_区域增长_10       ITK系列23_ 区域增长(置信连接)算法对脑部MHA文件进行三维分割_MHA文件_11      ITK系列23_ 区域增长(置信连接)算法对脑部MHA文件进行三维分割_MHA文件_12

注:index1[2] = 0;//表示Z 轴 (第几个切片)从0开始计算(0表示第一个切片)

 

ITK系列目录:

1 ITK图像数据表达之图像

2 ITK图像处理之图像滤波

3 ITK图像处理之图像分割

注:例程配套素材见系列目录