ITK 实例2 MHA格式文件进行三维线性映射

发布时间 2023-08-16 14:24:19作者: 一杯清酒邀明月
 1 #include "itkImage.h"
 2 #include "itkImageFileReader.h"
 3 #include "itkImageFileWriter.h"
 4 //线性映射头文件
 5 #include "itkCastImageFilter.h"
 6 #include "itkRescaleIntensityImageFilter.h"
 7 #include "itkNormalizeImageFilter.h"
 8  
 9 int main( int argc, char * argv[] )
10 {
11  /* if( argc < 2 )
12     {
13     std::cerr << "Usage: " << std::endl;
14     std::cerr << argv[0] << "   inputImageFile " << std::endl;
15     return EXIT_FAILURE;
16     }*/
17 //我们定义输入和输出图像的像素类型
18   typedef   float    InputPixelType;
19   //typedef   float            OutputPixelType;
20   typedef  unsigned char  OutputPixelType;
21   //然后,定义输入和输出图像类型
22   typedef itk::Image< InputPixelType,  3 >   InputImageType;
23   typedef itk::Image< OutputPixelType, 3 >   OutputImageType;
24  
25   typedef itk::ImageFileReader< InputImageType >  ReaderType;//读文件类型
26   typedef itk::ImageFileWriter< OutputImageType >  WriterType;//写文件类型
27  
28   //使用定义的图像类型来对滤波器进行实例化
29   typedef itk::RescaleIntensityImageFilter<
30                InputImageType, OutputImageType >  RescaleFilterType;
31  
32   ReaderType::Pointer reader = ReaderType::New();//实例化对象reader
33   WriterType::Pointer writer = WriterType::New();//实例化对象writer
34  
35   //通过调用 New( ) 操作来创建对象滤波器并将结果指向 itk::SmartPointers 
36   RescaleFilterType::Pointer    rescaleFilter    = RescaleFilterType::New();
37  
38   reader->SetFileName( "CT_215.mha" );
39   //现在将一个 reader 滤波器 ( 这里并未展示它的创建 ) 的输出作为输入连接到投射滤波器(四种)
40   rescaleFilter->SetInput( reader->GetOutput() );//rescaleFilter滤波器
41   /*接下来我们设置每个滤波器需要的参数。 CastImageFilter 和 NormalizeImageFilter 不需要
42       任何参数。另一方面, RescaleIntensityImageFilter 需要用户提供想得到的输出图像像素值的
43       最大最小值,这可以通过使用 SetOutputMinimum() 和 SetOutputMaximum() 方式来实现,如
44       下所示*/
45   rescaleFilter->SetOutputMinimum(  0 );
46   rescaleFilter->SetOutputMaximum( 255 );
47   
48   writer->SetInput(rescaleFilter->GetOutput());//rescaleFilter滤波器
49   //最后,通过调用 Update() 方式来运行这些滤波器
50   //写文件,输出线性映射四种滤波效果
51   writer->SetFileName("CT_215-RescaleIntensity0_255.mha");
52  
53   writer->Update();
54  
55   return EXIT_SUCCESS;
56 }

 输入215张CT股骨图像数据(像素范围为-3024~+3071)(CT_215.mha)

 输出215张通过线性映射的CT股骨图像数据(像素范围为0~+255)(CT_215-RescaleIntensity0_255.mha)