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

ITK 实例4 OTSU算法对PNG图像进行多阈值二维分割

时间:2026-01-29 09:25:29
1 #include "itkOtsuMultipleThresholdsCalculator.h"//包含头文件 2 3 #include "itkImage.h" 4 #include "itkImageFileReader.h" 5 #include "itkImageFileWriter.h" 6 #include "itkScalarImageToHistogramGenerator.h" 7 #include "itkBinaryThresholdImageFilter.h" 8 #include "itkNumericTraits.h" 9 10 #include <ianip> 11 #include <stdio.h> 12 //这个例子阐述了如何使用 itk::OtsuMultipleThresholdsCalculator 13 int main( int argc, char * argv[] ) 14 */ 22 23 //Convenience typedefs 24 typedef unsigned short InputPixelType; 25 typedef unsigned char OutputPixelType; 26 27 typedef itk::Image< InputPixelType, 2 > InputImageType; 28 typedef itk::Image< OutputPixelType, 2 > OutputImageType; 29 30 /*OtsuMultipleThresholdsCalculator 以最大化类之间的变异的原则来计算一个给定的直方 31 图的门限。我们使用 ScalarImageToHistogramGenerator 来得到直方图*/ 32 typedef itk::Statistics::ScalarImageToHistogramGenerator< 33 InputImageType > ScalarImageToHistogramGeneratorType; 34 35 typedef ScalarImageToHistogramGeneratorType::HistogramType HistogramType; 36 37 typedef itk::OtsuMultipleThresholdsCalculator< HistogramType > CalculatorType; 38 39 typedef itk::ImageFileReader< InputImageType > ReaderType; 40 typedef itk::ImageFileWriter< OutputImageType > WriterType; 41 //一旦计算得到门限值,我们将使用 BinaryThresholdImageFilter 来对图像进行分割 42 typedef itk::BinaryThresholdImageFilter< 43 InputImageType, OutputImageType > FilterType; 44 45 ScalarImageToHistogramGeneratorType::Pointer scalarImageToHistogramGenerator 46 = ScalarImageToHistogramGeneratorType::New(); 47 48 CalculatorType::Pointer calculator = CalculatorType::New(); 49 FilterType::Pointer filter = FilterType::New(); 50 51 ReaderType::Pointer reader = ReaderType::New(); 52 WriterType::Pointer writer = WriterType::New(); 53 54 scalarImageToHistogramGenerator>SetNumberOfBins( 128 ); 55 //设置Otsu分割阈值数目 56 calculator>SetNumberOfThresholds( atoi("3") ); 57 58 const OutputPixelType outsideValue = 0; 59 const OutputPixelType insideValue = 255; 60 61 filter>SetOutsideValue( outsideValue ); 62 filter>SetInsideValue( insideValue ); 64 //Connect Pipeline 65 reader>SetFileName( "BrainProtonDensitySlice.png" ); 66 67 //管道如下所示 68 scalarImageToHistogramGenerator>SetInput( reader>GetOutput() ); 69 calculator>SetInputHistogram(scalarImageToHistogramGenerator>GetOutput() ); 70 filter>SetInput( reader>GetOutput() ); 71 writer>SetInput( filter>GetOutput() ); 72 //读取报错异常 73 try 74 77 catch( itk::ExceptionObject & excp ) 78 81 scalarImageToHistogramGenerator>Cpute(); 82 //calculator报错异常 83 try 84 87 catch( itk::ExceptionObject & excp ) 88 91 92 //使用 GetOutput 方式可以得到门限值 93 const CalculatorType::OutputType &thresholdVector = calculator>GetOutput(); 94 95 std::string outputFileBase = "BrainProtonDensitySlice_OtsuMu"; 96 97 InputPixelType lowerThreshold = itk::NumericTraits<InputPixelType>::min(); 98 InputPixelType upperThreshold; 99 100 typedef CalculatorType::OutputType::const_iterator ThresholdItType; 101 102 for( ThresholdItType itNum = thresholdVector.begin(); 103 itNum != thresholdVector.end(); 104 ++itNum ) 105 131 catch( itk::ExceptionObject & excp ) 132 135 } 136 137 upperThreshold = itk::NumericTraits<InputPixelType>::max(); 138 filter>SetLowerThreshold( lowerThreshold ); 139 filter>SetUpperThreshold( upperThreshold ); 140 141 std::ostringstream outputFilename2; 142 outputFilename2 << outputFileBase 143 << std::setfill('0') << std::setw(3) << thresholdVector.size() 144 << "." 145 << "jpg"; 146 writer>SetFileName( outputFilename2.str() ); 147 148 try 149 152 catch( itk::ExceptionObject & excp ) 153 156 157 return EXIT_SUCCESS; 158 }



上一篇:ITK 实例12 置信连接对PNG向量图像进行二维分割
下一篇:OpenCV3.2图像分割 实例5:GMM(高斯混合模型)图像分割
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种方法技巧

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