1 #include "itkImage.h"
2 #include "itkImageFileReader.h"
3 #include "itkImageFileWriter.h"
4 //非线性映射滤波器头文件
5 #include "itkSigmoidImageFilter.h"
6 //注:非线性映射算法只能实现像素值(0-255)范围的输入输出映射。
7 int main( int argc, char * argv[] )
8 {
9 /*if( argc < 7 )
10 {
11 std::cerr << "Usage: " << std::endl;
12 std::cerr << argv[0] << " inputImageFile outputImageFile";
13 std::cerr << " OutputMin OutputMax SigmoidAlpha SigmoidBeta" << std::endl;
14 return EXIT_FAILURE;
15 }*/
16 //然后必须定义这个滤波器的输入、输出像素和图像类型
17 typedef unsigned char InputPixelType;
18 typedef unsigned char OutputPixelType;
19
20 typedef itk::Image< InputPixelType, 3 > InputImageType;
21 typedef itk::Image< OutputPixelType, 3 > OutputImageType;
22
23 typedef itk::ImageFileReader< InputImageType > ReaderType;
24 typedef itk::ImageFileWriter< OutputImageType > WriterType;
25
26 ReaderType::Pointer reader = ReaderType::New();
27 WriterType::Pointer writer = WriterType::New();
28 //输入图像
29 reader->SetFileName( "CT_215-RescaleIntensity0_255.mha" );
30 //输出图像
31 writer->SetFileName( "CT_215_Sigmoid_out.mha" );
32 //我们使用图像类型来实例化滤波器类型并创建滤波器对象
33 typedef itk::SigmoidImageFilter<
34 InputImageType, OutputImageType > SigmoidFilterType;
35 SigmoidFilterType::Pointer sigmoidFilter = SigmoidFilterType::New();
36 //输出像素中的最小值和最大值分别使用 SetOutputMinimum( ) 和 SetOutputMaximum( ) 方式来定义
37 const OutputPixelType outputMinimum = atoi( "10" );
38 const OutputPixelType outputMaximum = atoi( "240" );
39
40 sigmoidFilter->SetOutputMinimum( outputMinimum );
41 sigmoidFilter->SetOutputMaximum( outputMaximum );
42
43 const double alpha = atof( "8" );//宽度
44 const double beta = atof( "155.5" );//位置
45 /*使用 SetAlpha() 和 SetBeta() 来设置系数 α 和 β 。注意 α 是和输入亮度窗口成比例的。按
46 照惯例我们可以说这个窗口是间距[-3α , 3α] 。亮度窗口的边界并不明显。如图所示, α
47 平稳地接近它的极值。当你想通过在围绕人口均值周围定义一个间距[-3σ , 3σ] 来设置一个
48 人口测量的范围时,你可以以同样的形式来进行考虑*/
49 sigmoidFilter->SetAlpha( alpha );
50 sigmoidFilter->SetBeta( beta );
51 /*可以从其他滤波器得到 SigmoidImageFilter 的输入,例如一个图像文件 reader 。输出可
52 以像一个图像文件 writer 一样传递给其他滤波器流水线。任何下游的滤波器调用 update 都可
53 以触发 Sigmoids 滤波器的运行*/
54
55 sigmoidFilter->SetInput( reader->GetOutput() );
56 writer->SetInput( sigmoidFilter->GetOutput() );
57 writer->Update();
58
59 return EXIT_SUCCESS;
60 }
输入数据(CT_215-RescaleIntensity0_255.mha)
三维非线性映射输出数据(CT_215_Sigmoid_out.mha)