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

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

时间:2026-01-29 09:25:28
1 #include "itkOtsuThresholdImageFilter.h"//Otsu分割头文件 2 #include "itkImage.h" 3 #include "itkImageFileReader.h" 4 #include "itkImageFileWriter.h" 5 6 int main( int argc, char * argv[] ) 7 */ 15 16 //确定作为输入和输出图像的像素类型 17 typedef unsigned char InputPixelType; 18 typedef unsigned char OutputPixelType; 19 const unsigned int Dimension = 2; 20 //使用输入输出图像的像素类型和维来定义它们的图像类型 21 typedef itk::Image< InputPixelType, Dimension > InputImageType; 22 typedef itk::Image< OutputPixelType, Dimension > OutputImageType; 23 //使用上面定义的输入输出图像的类型对滤波器类型进行实例化 24 typedef itk::OtsuThresholdImageFilter<InputImageType, OutputImageType > FilterType; 25 //对一个 itk::ImageFileReader 类也进行实例化以便从文件中读取图像数据 26 typedef itk::ImageFileReader< InputImageType > ReaderType; 27 28 typedef itk::ImageFileWriter< OutputImageType > WriterType; 29 //调用 New( ) 方式创建滤波器和 reader 并将结果指向 itk::Smartpointers 30 ReaderType::Pointer reader = ReaderType::New(); 31 FilterType::Pointer filter = FilterType::New(); 32 WriterType::Pointer writer = WriterType::New(); 33 34 //由 reader 得到的图像作为输入传递给 OtsuThresholdImageFilter 35 reader>SetFileName("BrainProtonDensitySlice.png"); 36 filter>SetInput(reader>GetOutput()); 37 writer>SetInput( filter>GetOutput() ); 38 39 //outsideValue:给定阈值的上下限范围之外的像素的亮度值 40 //insideValue:给定阈值的上下限范围之内的像素的亮度值 41 const OutputPixelType outsideValue = atoi( "0" );//范围之外设置为纯黑 42 const OutputPixelType insideValue = atoi( "255" );//范围之内设置为纯白 43 44 /*用 SetOutsideValue() 方式定义指向那些亮度值在给定阈值的上下限范围之外的像素的 45 亮度值,用 SetInsideValue() 方式定义指向那些亮度值在给定阈值的上下限范围之内的像素的 46 亮度值*/ 47 filter>SetOutsideValue( outsideValue ); 48 filter>SetInsideValue( insideValue ); 49 50 try 51 54 catch( itk::ExceptionObject & excp ) 55 58 59 //由滤波器内部计算得到的阈值。为了做到这些我们调用 GetThreshold 方式 60 int threshold = filter>GetThreshold(); 61 std::cout << "Threshold = " << threshold << std::endl; 62 writer>SetFileName( "BrainProtonDensitySlice_OTSU2.png" ); 64 try 65 68 catch( itk::ExceptionObject & excp ) 69 72 73 return EXIT_SUCCESS; 74 }

得到分割阈值为98:

  另外一个对像素进行分类的方法就是把错分类率降到最小。这样就要 寻找一个阈值, 这个阈值将图像分为两部分,并且使得其中一部分落在另一部分那侧的直方图降到最小。这等同于 将类中的差异最小化或者说 将类之间的差异最大化。
  这个图展示了这种滤波器在进行分割时的自身局限性,这些局限性在处理含噪声的图像和由于领域偏见而缺乏空间均匀性的MRI图像时表现得尤为突出。



上一篇:ITK 实例11 边缘保留平滑滤波对脑部MHA文件进行三维滤波
下一篇:OpenCV3.2图像分割 实例4: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种方法技巧

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