实例15 MHA格式文件进行带滤波三维的梯度强度提取

#include "itkImageFileReader.h"
#include "itkImageFileWriter.h"
#include "itkRescaleIntensityImageFilter.h"
#include "itkGradientMagnitudeRecursiveGaussianImageFilter.h"//带滤波梯度强度的头文件

int main( int argc, char * argv[] )
{
  /*if( argc < 4 )
    {
    std::cerr << "Usage: " << std::endl;
    std::cerr << argv[0] << "  inputImageFile   outputImageFile   sigma" << std::endl;
    return EXIT_FAILURE;
    }*/
  //类型必须基于输入和输出图像的像素进行实例化
  typedef    float    InputPixelType;
  typedef    float    OutputPixelType;
  //使用它们就可以对输入、输出图像进行实例化
  typedef itk::Image< InputPixelType,  3 >   InputImageType;
  typedef itk::Image< OutputPixelType, 3 >   OutputImageType;
  //现在同时使用输入和输出图像类型来实例化滤波器类型
  typedef itk::ImageFileReader< InputImageType >  ReaderType;
  typedef itk::GradientMagnitudeRecursiveGaussianImageFilter<
                        InputImageType, OutputImageType >  FilterType;
  //通过调用 New( ) 方式来创建一个滤波器对象并将结果指向一个 itk::SmartPointer
  ReaderType::Pointer reader = ReaderType::New();
  //输入图像cuiti_256.mha
  reader->SetFileName("cuiti_4.mha");//

  FilterType::Pointer filter = FilterType::New();
  //输入图像可以从另一个滤波器的输出得到。这里,源自于一个图像 reader 来得到
  filter->SetInput( reader->GetOutput() );
  //对高斯滤波核的标准差进行赋值
  const double sigma = atof("1");
  //现在设置高斯滤波核的标准差
  filter->SetSigma(sigma);
  //最后,通过调用 Update( ) 方式来执行滤波器
  filter->Update();
  
  typedef unsigned char                   WritePixelType;
  typedef itk::Image< WritePixelType, 3 > WriteImageType;

  typedef itk::RescaleIntensityImageFilter<
                   OutputImageType, WriteImageType > RescaleFilterType;

  RescaleFilterType::Pointer rescaler = RescaleFilterType::New();

  rescaler->SetOutputMinimum(   0 );
  rescaler->SetOutputMaximum( 255 );

  typedef itk::ImageFileWriter< WriteImageType >  WriterType;

  WriterType::Pointer writer = WriterType::New();
  //输出强度图像
  writer->SetFileName("GradientMagnitude_4.mha");
  /*如果这个滤波器的输出已经连接到流水线中的其他滤波器,更新任何下游的滤波器将同
      样触发这个滤波器的一个更新。例如,梯度强度滤波器可能连接到一个图像 writer*/
  rescaler->SetInput( filter->GetOutput() );
  writer->SetInput( rescaler->GetOutput() );
  writer->Update();

  return EXIT_SUCCESS;
}

输入三维图像(cuiti_4.mha):

   ITK系列15_ MHA格式文件进行带滤波三维梯度强度提取_MHA文件   ITK系列15_ MHA格式文件进行带滤波三维梯度强度提取_MHA文件_02   ITK系列15_ MHA格式文件进行带滤波三维梯度强度提取_MHA文件_03  ITK系列15_ MHA格式文件进行带滤波三维梯度强度提取_ITK_04

               切片1                            切片2                             切片3                          切片4

输出三维梯度强度图像(GradientMagnitude_4.mha):

  ITK系列15_ MHA格式文件进行带滤波三维梯度强度提取_ITK_05    ITK系列15_ MHA格式文件进行带滤波三维梯度强度提取_MHA文件_06     ITK系列15_ MHA格式文件进行带滤波三维梯度强度提取_MHA文件_07  ITK系列15_ MHA格式文件进行带滤波三维梯度强度提取_ITK_08

            切片1                                切片2                                  切片3                        切片4

 

ITK系列目录:

1 ITK图像数据表达之图像

2 ITK图像处理之图像滤波

3 ITK图像处理之图像分割

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