Advertisement

ITK:从测量列表创建直方图

阅读量:

该文本介绍了如何使用ITK库从测量列表创建直方图,并提供了完整的C++实现代码。主要内容包括:
背景与目的:通过测量数据创建直方图以分析数据分布。
实现步骤:

  • 包括必要的头文件(如itkSampleToHistogramFilter.h、itkListSample.h等)。
  • 定义了测量向量类型、样本类型和直方图类型。
  • 提供了CreateSample函数用于生成测试数据。
    代码结构:
  • 初始化并配置直方图滤波器。
  • 设置直方图大小和范围。
  • 执行滤波器操作并获取结果。
    结果输出:
  • 显示直方图向量大小及各频率值。
  • 输出总计数信息。
    该方法通过直观的可视化方式展示了测量数据的分布情况。

ITK:从测量列表创建直方图

  • 内容提要
  • 输出结果
  • C++实现代码

内容提要

从样品测量列表创建直方图。

输出结果

复制代码
    Histogram vector size: 1
    Frequency of 0 : (1 to 1.1001) = 2
    Frequency of 1 : (1.1001 to 1.2002) = 0
    Frequency of 2 : (1.2002 to 1.3003) = 0
    Frequency of 3 : (1.3003 to 1.4004) = 0
    Frequency of 4 : (1.4004 to 1.5005) = 0
    Frequency of 5 : (1.5005 to 1.6006) = 0
    Frequency of 6 : (1.6006 to 1.7007) = 0
    Frequency of 7 : (1.7007 to 1.8008) = 0
    Frequency of 8 : (1.8008 to 1.9009) = 0
    Frequency of 9 : (1.9009 to 2.001) = 1
    Total count 3

C++实现代码

复制代码
    #include "itkSampleToHistogramFilter.h"
    #include "itkListSample.h"
    #include "itkHistogram.h"
    using MeasurementVectorType = itk::Vector<unsigned char, 1>;
    using SampleType = itk::Statistics::ListSample<MeasurementVectorType>;
    using HistogramType = itk::Statistics::Histogram<float, itk::Statistics::DenseFrequencyContainer2>;
    void CreateSample(SampleType::Pointer sample);
    int main(int, char *[])
    {
      SampleType::Pointer sample = SampleType::New();
      CreateSample(sample);
      using SampleToHistogramFilterType = itk::Statistics::SampleToHistogramFilter<SampleType, HistogramType>;
      SampleToHistogramFilterType::Pointer sampleToHistogramFilter = SampleToHistogramFilterType::New();
      sampleToHistogramFilter->SetInput(sample);
    
      SampleToHistogramFilterType::HistogramSizeType histogramSize(1);
      histogramSize.Fill(10);
      sampleToHistogramFilter->SetHistogramSize(histogramSize);
    
      sampleToHistogramFilter->Update();
    
      const HistogramType * histogram = sampleToHistogramFilter->GetOutput();
      std::cout << "Histogram vector size: " << histogram->GetMeasurementVectorSize() << std::endl;
    
    
      for (unsigned int i = 0; i < histogram->GetSize()[0]; i++)
      {
    std::cout << "Frequency of " << i << " : (" << histogram->GetBinMin(0, i) << " to " << histogram->GetBinMax(0, i)
              << ") = " << histogram->GetFrequency(i) << std::endl;
      }
    
      std::cout << "Total count " << histogram->GetTotalFrequency() << std::endl;
    
      return EXIT_SUCCESS;
    }
    
    void CreateSample(SampleType::Pointer sample)
    {
      MeasurementVectorType mv;
      mv[0] = 1.0;
      sample->PushBack(mv);
    
      mv[0] = 1.0;
      sample->PushBack(mv);
    
      mv[0] = 2.0;
      sample->PushBack(mv);
    }

全部评论 (0)

还没有任何评论哟~