首页 > 其他分享 >ITK 实例12 置信连接对PNG向量图像进行二维分割

ITK 实例12 置信连接对PNG向量图像进行二维分割

时间:2023-08-16 15:01:18浏览次数:40  
标签:typedef 12 ITK 迭代 writer 区域 confidenceConnected PNG itk

  1 #include "itkVectorConfidenceConnectedImageFilter.h"
  2 #include "itkImage.h"
  3 #include "itkImageFileReader.h"
  4 #include "itkImageFileWriter.h"
  5 #include "itkRGBPixel.h"
  6  
  7 int main( int argc, char *argv[] )
  8 {
  9   /*if( argc < 7 )
 10     {
 11     std::cerr << "Missing Parameters " << std::endl;
 12     std::cerr << "Usage: " << argv[0]
 13               << " inputImage  outputImage"
 14               << " seedX seedY"
 15               << " multiplier iterations" << std::endl;
 16     return EXIT_FAILURE;
 17     }*/
 18   /*现在我们使用一个像素类型和一个特殊的维来定义图像类型。由于需要使用平滑滤波
 19   器,所以这种情况下对像素使用浮点型数据类型*/
 20   const unsigned int Dimension = 2;
 21   typedef unsigned char                           PixelComponentType;
 22   typedef itk::RGBPixel< PixelComponentType >     InputPixelType;
 23   typedef itk::Image< InputPixelType, Dimension > InputImageType;
 24  
 25   typedef unsigned char                            OutputPixelType;
 26   typedef itk::Image< OutputPixelType, Dimension > OutputImageType;
 27  
 28   typedef itk::ImageFileReader< InputImageType >  ReaderType;
 29   typedef itk::ImageFileWriter< OutputImageType > WriterType;
 30  
 31   ReaderType::Pointer reader = ReaderType::New();
 32   WriterType::Pointer writer = WriterType::New();
 33  
 34   reader->SetFileName( "VisibleWomanEyeSlice.png" );
 35   writer->SetFileName( "VisibleWomanEyeSlice_Vitreo.png" );
 36   /*声明区域生长滤波器的类型,本例中使用 itk::VectorConfidenceConnectedImageFilter*/ 
 37   typedef itk::VectorConfidenceConnectedImageFilter< InputImageType,
 38                                    OutputImageType > ConnectedFilterType;
 39   /*然后我们使用 New() 方式对一个滤波器对象结构化*/
 40   ConnectedFilterType::Pointer confidenceConnected
 41                                                  = ConnectedFilterType::New();
 42   //然后我们创建一个简单的线性处理管
 43   confidenceConnected->SetInput( reader->GetOutput() );
 44   writer->SetInput( confidenceConnected->GetOutput() );
 45   //乘法因数f
 46   const double multiplier = atof("3");
 47   //VectorConfidenceConnectedImageFilter 需要定义两个参数。第一个,定义亮度范围大小
 48   //的因子 f 。乘法因子太小将限制当前区域中很多有相似亮度的像素;乘法因子太大将放松接
 49   //受条件并将导致区域过度生长。值太大就会使得这些区域生长到邻近区域,而这些邻近区域
 50   //实际上可能属于独立的解剖结构。
 51   confidenceConnected->SetMultiplier( multiplier );
 52   /*迭代器的数目是基于被分割的解剖学结构亮度的均匀性之上指定的。均匀性高的区域仅
 53   需要一对迭代器。带有 ramp 效果的区域,如带有不同一领域的 MRI 图像,就需要更多的迭代
 54   器。实际上,精心选择乘法因子似乎比迭代器的数目更加重要。然而,务必记住这个算法需
 55   要集中于一个稳定的区域。在这个算法上使用过多的迭代器将很有可能是这个区域吞没整个
 56   图像*/
 57   //迭代器数目
 58   const unsigned int iterations = atoi("1");
 59  
 60   confidenceConnected->SetNumberOfIterations( iterations );
 61   /*这个滤波器的输出是一个二值图像,这个二值图像除了分割出的区域外到处都是零值像
 62   素。区域中的亮度值是由 SetReplaceValue() 方式来选择的*/
 63   confidenceConnected->SetReplaceValue( 255 );
 64   
 65   InputImageType::IndexType  index;
 66   /*这个算法的实例化需要用户提供一个种子点。将这个点选在被分割的解剖学结构的典型
 67   区域是很便捷的。种子区域周围的一个小的邻域将用来计算包含在标准里的最初的平均值和
 68   标准差。种子以一种 itk::Index 的形式传递给 SetSeed() 方式*/
 69   //种子位置
 70   index[0] = atoi("66");
 71   index[1] = atoi("66");
 72   confidenceConnected->SetSeed( index );
 73   /*种子区域周围邻域最初的大小是使用 SetInitialNeighborhoodRadius() 方式来定义的。这
 74   个邻域将定义成一个拥有 2r + 1 个像素的 N 维矩形区域,其中 r 是作为最初邻域范围的传递值*/
 75   confidenceConnected->SetInitialNeighborhoodRadius( 3 );
 76   /*writer 上的 Updata() 方法引发了管道的运行。通常在出现错误和抛出异议时, 从一个
 77   try / catch 模块调用 updata*/
 78   try
 79     {
 80     writer->Update();
 81     }
 82   catch( itk::ExceptionObject & excep )
 83     {
 84     std::cerr << "Exception caught !" << std::endl;
 85     std::cerr << excep << std::endl;
 86     }
 87   /*使用 GetMean() 方式和 GetCoaraiance() 方式可以查看最后一个迭代器最终的均值向量和
 88   协方差矩阵的值*/
 89   typedef ConnectedFilterType::MeanVectorType       MeanVectorType;
 90   typedef ConnectedFilterType::CovarianceMatrixType CovarianceMatrixType;
 91  
 92   const MeanVectorType & mean = confidenceConnected->GetMean();
 93   const CovarianceMatrixType & covariance
 94                                        = confidenceConnected->GetCovariance();
 95  
 96   std::cout << "Mean vector = "       << mean       << std::endl;
 97   std::cout << "Covariance matrix = " << covariance << std::endl;
 98  
 99   return EXIT_SUCCESS;
100 }

标签:typedef,12,ITK,迭代,writer,区域,confidenceConnected,PNG,itk
From: https://www.cnblogs.com/ybqjymy/p/17635053.html

相关文章

  • ITK 实例13 ITK分水岭算法对PNG图像进行二维分割
    1#include<iostream>2#include"itkVectorGradientAnisotropicDiffusionImageFilter.h"3#include"itkVectorGradientMagnitudeImageFilter.h"4#include"itkWatershedImageFilter.h"56#include"itkImage......
  • ITK 实例5 领域连接算法对脑部PNG图像进行二维分割
    1#include"itkNeighborhoodConnectedImageFilter.h"2#include"itkImage.h"3#include"itkCastImageFilter.h"4//使用itk::CurvatureFlowImageFilter在保护边缘时平滑图像5#include"itkCurvatureFlowImageFilter.h"6#......
  • ITK 实例6 置信连接算法对脑部PNG图像进行二维分割
    1#include"itkConfidenceConnectedImageFilter.h"//包含置信连接类2//图像中存在的噪声会降低这个滤波器生长大面积区域的能力。当面对噪声图像时,通常3//是使用一个边缘保留平滑滤波器4#include"itkCastImageFilter.h"//滤波器5#include"itkCurvatureFlowI......
  • ITK 实例7 置信连接算法对脑部MHA文件进行三维分割
    在这个例子中使用前面例子中的代码,并设置图像的维数为3。应用梯度各向异性扩散来平滑图像。这个滤波器使用两个迭代器、一个值为0.05的timestep和一个值为3的conductance值,然后使用置信连接方式对平滑后的图像进行分割。使用的五个种子点的坐标分别为(118,85,92)......
  • ITK 实例8 孤立连接算法对脑部PNG图像进行二维分割
    1#include"itkIsolatedConnectedImageFilter.h"2#include"itkImage.h"3#include"itkCastImageFilter.h"4#include"itkCurvatureFlowImageFilter.h"5#include"itkImageFileReader.h"6#include"......
  • ITK 实例9 孤立连接算法对脑部MHA文件进行三维分割
    1#include"itkIsolatedConnectedImageFilter.h"2#include"itkImage.h"3#include"itkCastImageFilter.h"4#include"itkCurvatureFlowImageFilter.h"5#include"itkImageFileReader.h"6#include"......
  • ITK 实例3 PNG图像进行二维非线性映射
    1#include"itkImage.h"2#include"itkImageFileReader.h"3#include"itkImageFileWriter.h"4//非线性映射滤波器头文件5#include"itkSigmoidImageFilter.h"67intmain(intargc,char*argv[])8{9/*if(argc......
  • ITK 实例4 MHA格式文件进行三维非线性映射
    1#include"itkImage.h"2#include"itkImageFileReader.h"3#include"itkImageFileWriter.h"4//非线性映射滤波器头文件5#include"itkSigmoidImageFilter.h"6//注:非线性映射算法只能实现像素值(0-255)范围的输入输出映射。7intmain(intargc,cha......
  • ITK 实例5 PNG图像进行不带滤波的二维梯度强度提取
    图像梯度的强度广泛地应用在图像分析中,主要用来帮助检测对象轮廓和分离均匀区域。itk::GradientMagnitudeImageFilter使用一个简单的有限差分方式来计算图像中每个像素位置的梯度强度。例如:在二维情况下计算等同于将图像使用模块类型,如下所示:然后计算它们的平方和并计算和的......
  • ITK 实例6 PNG图像进行带滤波的二维梯度强度提取
    微分是对一个数字数据的不规则操作。实际中可以方便地定义一个执行微分的比例。在执行这样的滤波时使用一个高斯核被认为是最便捷的选择。通过选择一个特定的高斯标准差(σ),就可以选择一个相应的比例来去除通常被认为是噪声的高频部分。itk::GradientMagnitudeRecursiveG......