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)