当前位置: 首页 > 网络知识

ITK 实例1 PNG图像进行二维线性映射

时间:2026-01-29 09:25:24
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 */ 17 //我们定义输入和输出图像的像素类型 18 typedef float InputPixelType; 19 //typedef float OutputPixelType; 20 typedef unsigned char OutputPixelType; 21 //然后,定义输入和输出图像类型 22 typedef itk::Image< InputPixelType, 2 > InputImageType; 23 typedef itk::Image< OutputPixelType, 2 > OutputImageType; 24 25 typedef itk::ImageFileReader< InputImageType > ReaderType;//读文件类型 26 typedef itk::ImageFileWriter< OutputImageType > WriterType;//写文件类型 27 //使用定义的图像类型来对滤波器进行实例化 28 typedef itk::CastImageFilter< 29 InputImageType, OutputImageType > CastFilterType; 30 31 typedef itk::RescaleIntensityImageFilter< 32 InputImageType, OutputImageType > RescaleFilterType1; 33 34 typedef itk::ShiftScaleImageFilter< 35 InputImageType, OutputImageType > ShiftScaleFilterType; 36 37 typedef itk::NormalizeImageFilter< 38 InputImageType, OutputImageType > NormalizeFilterType; 39 40 ReaderType::Pointer reader = ReaderType::New();//实例化对象reader 41 WriterType::Pointer writer1 = WriterType::New();//实例化对象writer1 42 WriterType::Pointer writer2 = WriterType::New();//实例化对象writer2 43 WriterType::Pointer writer3 = WriterType::New();//实例化对象writer3 44 WriterType::Pointer writer4 = WriterType::New();//实例化对象writer4 45 //通过调用 New( ) 操作来创建对象滤波器并将结果指向 itk::SmartPointers 46 CastFilterType::Pointer castFilter = CastFilterType::New(); 47 RescaleFilterType1::Pointer rescaleFilter = RescaleFilterType1::New(); 48 ShiftScaleFilterType::Pointer shiftFilter = ShiftScaleFilterType::New(); 49 NormalizeFilterType::Pointer normalizeFilter = NormalizeFilterType::New(); 50 51 reader>SetFileName( "BrainProtonDensitySlice.png" ); 52 //现在将一个 reader 滤波器 ( 这里并未展示它的创建 ) 的输出作为输入连接到投射滤波器(四种) 53 castFilter>SetInput( reader>GetOutput() );//castFilter滤波器 54 shiftFilter>SetInput( reader>GetOutput() );//shiftFilter滤波器 55 rescaleFilter>SetInput( reader>GetOutput() );//rescaleFilter滤波器 56 normalizeFilter>SetInput( reader>GetOutput() );//normalizeFilter滤波器 57 /*接下来我们设置每个滤波器需要的参数。 CastImageFilter 和 NormalizeImageFilter 不需要 58 任何参数。另一方面, RescaleIntensityImageFilter 需要用户提供想得到的输出图像像素值的 59 最大最小值,这可以通过使用 SetOutputMinimum() 和 SetOutputMaximum() 方式来实现,如 60 下所示*/ 61 rescaleFilter>SetOutputMinimum( 0 ); 62 rescaleFilter>SetOutputMaximum( 255 ); /*ShiftScaleImageFilter 需要一个乘数因子(比例)(一个传递比例的附加值(移位)。可以 64 分别使用 SetScale() 和 SetShift() 方式来设置这些值*/ 65 shiftFilter>SetScale( 1.2 );//1.2 66 shiftFilter>SetShift( 25 );//25 67 //最后,通过调用 Update() 方式来运行这些滤波器 68 /*castFilter>Update(); 69 shiftFilter>Update(); 70 rescaleFilter>Update(); 71 normalizeFilter>Update();*/ 72 //写文件,输出线性映射四种滤波效果 73 writer1>SetFileName("castFilter_out.png"); 74 writer2>SetFileName("shiftFilter_out.png"); 75 writer3>SetFileName("rescaleFilter_out.png"); 76 writer4>SetFileName("normalizeFilter_out.png"); 77 78 typedef unsigned char WritePixelType; 79 typedef itk::Image< WritePixelType, 2 > WriteImageType; 80 typedef itk::RescaleIntensityImageFilter< 81 OutputImageType, WriteImageType > RescaleFilterType; 82 83 RescaleFilterType::Pointer rescaler1 = RescaleFilterType::New(); 84 RescaleFilterType::Pointer rescaler2 = RescaleFilterType::New(); 85 RescaleFilterType::Pointer rescaler3 = RescaleFilterType::New(); 86 RescaleFilterType::Pointer rescaler4 = RescaleFilterType::New(); 87 88 rescaler1>SetOutputMinimum(0); 89 rescaler1>SetOutputMaximum(255); 90 91 rescaler2>SetOutputMinimum(0); 92 rescaler2>SetOutputMaximum(255); 93 94 rescaler3>SetOutputMinimum(155); 95 rescaler3>SetOutputMaximum(255); 96 97 rescaler4>SetOutputMinimum(0); 98 rescaler4>SetOutputMaximum(255); 99 100 rescaler1>SetInput(castFilter>GetOutput()); 101 rescaler2>SetInput(shiftFilter>GetOutput()); 102 rescaler3>SetInput(rescaleFilter>GetOutput()); 103 rescaler4>SetInput(normalizeFilter>GetOutput()); 104 105 writer1>SetInput(rescaler1>GetOutput()); 106 writer2>SetInput(rescaler2>GetOutput()); 107 writer3>SetInput(rescaler3>GetOutput()); 108 writer4>SetInput(rescaler4>GetOutput()); 109 110 writer1>Update(); 111 writer2>Update(); 112 writer3>Update(); 113 writer4>Update(); 114 115 return EXIT_SUCCESS; 116 }

输入图像

castFilter图像

normalizeFilter图像

rescaleFilter图像

shiftFilter图像



上一篇:VTK 实例68:体绘制透明度调整
下一篇:VTK 实例60:等值面提取(表面重建)
ITK
  • 英特尔与 Vertiv 合作开发液冷 AI 处理器
  • 英特尔第五代 Xeon CPU 来了:详细信息和行业反应
  • 由于云计算放缓引发扩张担忧,甲骨文股价暴跌
  • Web开发状况报告详细介绍可组合架构的优点
  • 如何使用 PowerShell 的 Get-Date Cmdlet 创建时间戳
  • 美光在数据中心需求增长后给出了强有力的预测
  • 2027服务器市场价值将接近1960亿美元
  • 生成式人工智能的下一步是什么?
  • 分享在外部存储上安装Ubuntu的5种方法技巧
  • 全球数据中心发展的关键考虑因素
  • 英特尔与 Vertiv 合作开发液冷 AI 处理器

    英特尔第五代 Xeon CPU 来了:详细信息和行业反应

    由于云计算放缓引发扩张担忧,甲骨文股价暴跌

    Web开发状况报告详细介绍可组合架构的优点

    如何使用 PowerShell 的 Get-Date Cmdlet 创建时间戳

    美光在数据中心需求增长后给出了强有力的预测

    2027服务器市场价值将接近1960亿美元

    生成式人工智能的下一步是什么?

    分享在外部存储上安装Ubuntu的5种方法技巧

    全球数据中心发展的关键考虑因素