Advertisement

ITK:创建具有相关类ID的样本列表

阅读量:

该文本展示了如何使用ITK库(Insight Segmentation and Registration Toolkit)在C++中创建一个具有相关类ID的样本列表,并通过测量向量、频率和类标签进行分类。具体步骤包括:
导入必要的头文件:itkListSample.h、itkMembershipSample.h 和 itkVector.h。
定义测量向量类型:使用浮点数3维向量。
定义样本类型:基于测量向量类型的统计学列表样本来定义。
初始化并填充样本:通过PushBack方法将测量向量添加到样本中。
设置分类器:定义2个类别,并将实例分配到相应的类别中。
遍历并输出结果:通过迭代器遍历每个实例,并打印其标识符、测量向量、频率和类标签。
进一步分析类别:对每个类别单独遍历并打印相关信息。
该示例展示了如何利用ITK库进行图像分析中的实例识别任务,并提供了完整的代码实现及其输出结果的可视化方法。

ITK:创建具有相关类ID的样本列表

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

内容提要

创建具有相关类ID的样本列表。

输出结果

复制代码
    instance identifier = 0        measurement vector = [1, 2, 4]  frequency = 1   class label = 0
    instance identifier = 1        measurement vector = [2, 4, 5]  frequency = 1   class label = 0
    instance identifier = 2        measurement vector = [3, 8, 6]  frequency = 1   class label = 1
    instance identifier = 0        measurement vector = [1, 2, 4]  frequency = 1
    instance identifier = 1        measurement vector = [2, 4, 5]  frequency = 1

C++实现代码

复制代码
    #include "itkListSample.h"
    #include "itkMembershipSample.h"
    #include "itkVector.h"
    int main(int, char *[])
    {
      using MeasurementVectorType = itk::Vector<float, 3>;
      using SampleType = itk::Statistics::ListSample<MeasurementVectorType>;
      SampleType::Pointer   sample = SampleType::New();
      MeasurementVectorType mv;
    
      mv[0] = 1.0;
      mv[1] = 2.0;
      mv[2] = 4.0;
      sample->PushBack(mv);
    
      mv[0] = 2.0;
      mv[1] = 4.0;
      mv[2] = 5.0;
      sample->PushBack(mv);
    
      mv[0] = 3.0;
      mv[1] = 8.0;
      mv[2] = 6.0;
      sample->PushBack(mv);
      using MembershipSampleType = itk::Statistics::MembershipSample<SampleType>;
    
      MembershipSampleType::Pointer membershipSample = MembershipSampleType::New();
    
      membershipSample->SetSample(sample);
      membershipSample->SetNumberOfClasses(2);
    
      membershipSample->AddInstance(0U, 0UL);
      membershipSample->AddInstance(0U, 1UL);
      membershipSample->AddInstance(1U, 2UL);
    
      MembershipSampleType::ConstIterator iter = membershipSample->Begin();
      while (iter != membershipSample->End())
      {
    std::cout << "instance identifier = " << iter.GetInstanceIdentifier()
              << "\t measurement vector = " << iter.GetMeasurementVector() << "\t frequency = " << iter.GetFrequency()
              << "\t class label = " << iter.GetClassLabel() << std::endl;
    ++iter;
      }
    
    
      MembershipSampleType::ClassSampleType::ConstPointer classSample = membershipSample->GetClassSample(0);
    
      MembershipSampleType::ClassSampleType::ConstIterator c_iter = classSample->Begin();
    
      while (c_iter != classSample->End())
      {
    std::cout << "instance identifier = " << c_iter.GetInstanceIdentifier()
              << "\t measurement vector = " << c_iter.GetMeasurementVector()
              << "\t frequency = " << c_iter.GetFrequency() << std::endl;
    ++c_iter;
      }
    
      return EXIT_SUCCESS;
    }

全部评论 (0)

还没有任何评论哟~