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

发布时间 2023-08-16 14:35:31作者: 一杯清酒邀明月
 1 #include "itkImageFileReader.h"
 2 #include "itkImageFileWriter.h"
 3 #include "itkRescaleIntensityImageFilter.h"
 4 #include "itkGradientMagnitudeRecursiveGaussianImageFilter.h"//带滤波梯度强度的头文件
 5  
 6 int main( int argc, char * argv[] )
 7 {
 8   /*if( argc < 4 )
 9     {
10     std::cerr << "Usage: " << std::endl;
11     std::cerr << argv[0] << "  inputImageFile   outputImageFile   sigma" << std::endl;
12     return EXIT_FAILURE;
13     }*/
14   //类型必须基于输入和输出图像的像素进行实例化
15   typedef    float    InputPixelType;
16   typedef    float    OutputPixelType;
17   //使用它们就可以对输入、输出图像进行实例化
18   typedef itk::Image< InputPixelType,  3 >   InputImageType;
19   typedef itk::Image< OutputPixelType, 3 >   OutputImageType;
20   //现在同时使用输入和输出图像类型来实例化滤波器类型
21   typedef itk::ImageFileReader< InputImageType >  ReaderType;
22   typedef itk::GradientMagnitudeRecursiveGaussianImageFilter<
23                         InputImageType, OutputImageType >  FilterType;
24   //通过调用 New( ) 方式来创建一个滤波器对象并将结果指向一个 itk::SmartPointer
25   ReaderType::Pointer reader = ReaderType::New();
26   //输入图像cuiti_256.mha
27   reader->SetFileName("cuiti_4.mha");//
28  
29   FilterType::Pointer filter = FilterType::New();
30   //输入图像可以从另一个滤波器的输出得到。这里,源自于一个图像 reader 来得到
31   filter->SetInput( reader->GetOutput() );
32   //对高斯滤波核的标准差进行赋值
33   const double sigma = atof("1");
34   //现在设置高斯滤波核的标准差
35   filter->SetSigma(sigma);
36   //最后,通过调用 Update( ) 方式来执行滤波器
37   filter->Update();
38   
39   typedef unsigned char                   WritePixelType;
40   typedef itk::Image< WritePixelType, 3 > WriteImageType;
41  
42   typedef itk::RescaleIntensityImageFilter<
43                    OutputImageType, WriteImageType > RescaleFilterType;
44  
45   RescaleFilterType::Pointer rescaler = RescaleFilterType::New();
46  
47   rescaler->SetOutputMinimum(   0 );
48   rescaler->SetOutputMaximum( 255 );
49  
50   typedef itk::ImageFileWriter< WriteImageType >  WriterType;
51  
52   WriterType::Pointer writer = WriterType::New();
53   //输出强度图像
54   writer->SetFileName("GradientMagnitude_4.mha");
55   /*如果这个滤波器的输出已经连接到流水线中的其他滤波器,更新任何下游的滤波器将同
56       样触发这个滤波器的一个更新。例如,梯度强度滤波器可能连接到一个图像 writer*/
57   rescaler->SetInput( filter->GetOutput() );
58   writer->SetInput( rescaler->GetOutput() );
59   writer->Update();
60  
61   return EXIT_SUCCESS;
62 }

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

 切片1

 切片2

 切片3

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

 切片1  

 切片2 

 切片3

 切片4