首页 > 编程语言 >ITK 实例9 孤立连接算法对脑部MHA文件进行三维分割

ITK 实例9 孤立连接算法对脑部MHA文件进行三维分割

时间:2023-08-16 14:55:39浏览次数:42  
标签:typedef InternalImageType itk isolatedConnected MHA New 脑部 include ITK

 1 #include "itkIsolatedConnectedImageFilter.h"
 2 #include "itkImage.h"
 3 #include "itkCastImageFilter.h"
 4 #include "itkCurvatureFlowImageFilter.h"
 5 #include "itkImageFileReader.h"
 6 #include "itkImageFileWriter.h"
 7  
 8 int main( int argc, char *argv[] )
 9 {
10   /*if( argc < 7 )
11     {
12     std::cerr << "Missing Parameters " << std::endl;
13     std::cerr << "Usage: " << argv[0];
14     std::cerr << " inputImage  outputImage seedX1 seedY1";
15     std::cerr << " lowerThreshold seedX2 seedY2" << std::endl;
16     return EXIT_FAILURE;
17     }*/
18   //我们使用一个像素类型和一个特殊维来定义图像的类型:
19   typedef   float           InternalPixelType;
20   const     unsigned int    Dimension = 3;
21   typedef itk::Image< InternalPixelType, Dimension >  InternalImageType;
22  
23   //下面几行是对 IsolatedConnectedImageFilter 进行实例化的代码
24   typedef unsigned char                            OutputPixelType;
25   typedef itk::Image< OutputPixelType, Dimension > OutputImageType;
26   typedef itk::CastImageFilter< InternalImageType, OutputImageType >
27                                                    CastingFilterType;
28   CastingFilterType::Pointer caster = CastingFilterType::New();
29  
30   typedef  itk::ImageFileReader< InternalImageType > ReaderType;
31   typedef  itk::ImageFileWriter<  OutputImageType  > WriterType;
32  
33   ReaderType::Pointer reader = ReaderType::New();
34   WriterType::Pointer writer = WriterType::New();
35  
36   reader->SetFileName( "BrainProtonDensity3Slices.mha" );
37   writer->SetFileName( "Isolated_baizhi.mha" );
38  
39  
40   typedef itk::CurvatureFlowImageFilter< InternalImageType, InternalImageType >
41     CurvatureFlowImageFilterType;
42   CurvatureFlowImageFilterType::Pointer smoothing =
43                          CurvatureFlowImageFilterType::New();
44  
45   typedef itk::IsolatedConnectedImageFilter<InternalImageType,
46                                        InternalImageType> ConnectedFilterType;
47   //使用 New( ) 方式对这个类的一个文件进行结构化
48   ConnectedFilterType::Pointer isolatedConnected = ConnectedFilterType::New();
49   //现在连接管道
50   smoothing->SetInput( reader->GetOutput() );
51   isolatedConnected->SetInput( smoothing->GetOutput() );
52   caster->SetInput( isolatedConnected->GetOutput() );
53   writer->SetInput( caster->GetOutput() );
54   /*IsolatedConnectedImageFilter 期望用户指定一个门限和两个种子。在这个例子中,我们
55   从命令行得到它们*/
56   smoothing->SetNumberOfIterations(4);
57   smoothing->SetTimeStep( 0.125 );
58  
59   InternalImageType::IndexType  indexSeed1;
60   //白质种子点
61   indexSeed1[0] = atoi( "61" );
62   indexSeed1[1] = atoi( "140" );
63   indexSeed1[2] = atoi("2");
64   //下门限值(要分割的白质的下门限值)
65   const InternalPixelType lowerThreshold = atof( "150" );
66  
67   InternalImageType::IndexType  indexSeed2;
68   //灰质种子点
69   indexSeed2[0] = atoi( "63" );
70   indexSeed2[1] = atoi( "43" );
71   indexSeed2[2] = atoi("2");
72   /*由于在 ConnectedThresholdImageFilter 中,现在我们就必须指定在区域中能被输出像素所
73   接受的亮度值以及至少一个种子点来定义最初的区域*/
74   isolatedConnected->SetLower(  lowerThreshold  );
75   isolatedConnected->AddSeed1( indexSeed1 );
76   isolatedConnected->AddSeed2( indexSeed2 );
77  
78   isolatedConnected->SetReplaceValue( 255 );
79   /*writer 上的 Updata() 方法触发管道的运行。通常在出现错误和抛出异议时, 从一个 try / catch
80   模块调用 updata*/
81   try
82     {
83     writer->Update();
84     }
85   catch( itk::ExceptionObject & excep )
86     {
87     std::cerr << "Exception caught !" << std::endl;
88     std::cerr << excep << std::endl;
89     }
90   /*这个亮度值允许我们对两个区域进行分割,使用 GetIsolatedValue() 方式可以对区域进行恢复*/
91   std::cout << "Isolated Value Found = ";
92   std::cout << isolatedConnected->GetIsolatedValue()  << std::endl;
93   return EXIT_SUCCESS;
94 }

标签:typedef,InternalImageType,itk,isolatedConnected,MHA,New,脑部,include,ITK
From: https://www.cnblogs.com/ybqjymy/p/17634940.html

相关文章

  • 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......
  • ITK 实例7 向量图像(将一个向量存储到一个图像像素中)
    1#include"itkVector.h"//向量类的头文件2#include"itkImage.h"34intmain(int,char*[])5{6/*向量类的使用是在基于空间中代表坐标和维数的类型之上进行模板化的。在此例中,向7量的长度和图像长度相匹配,但是并不是完全相同。我们可以用一个三维的向......
  • ITK 实例6 RGB图像像素色彩成分的访问
    1#include"itkImage.h"2#include"itkImageFileReader.h"3//为了使用itk::RGBPixel类,包含头文件4#include"itkRGBPixel.h"5//在ITK中如何表示RGB图像。6intmain(int,char*argv[])7{8//RGBPixeld类的使用是基于用来代表红、绿和蓝的像素......
  • ITK 实例8 从缓冲器中输入图像数据
    1#include"itkImage.h"2#include"itkImportImageFilter.h"//包含ImportImageFilter(图像像素数据导入缓冲器)类的头文件3#include"itkImageFileWriter.h"4//这个例子阐述了如何将数据输入到itk::Image类中。这在同其他软件系统相连时更加有5//用。许多......
  • ITK 实例1 ITK环境测试
    1#include"itkImage.h"//包含图像类的头文件2#include<iostream>34intmain()5{6//创建一个三维、像素是无符号短字符数据类型的图像7typedefitk::Image<unsignedshort,3>ImageType;8//调用New()操作创建图像并将结果分配到itk::......
  • ITK 实例2 创建图像(手动创建一个itk::Image类)
    1#include"itkImage.h"//图像类的头文件23//这个例子阐述了如何人为地创建一个itk::Image类,下面是对图像类进行实例化、声明4//和创建的最简单程序代码。56intmain(int,char*[])7{8//创建一个三维、像素是无符号短字符数据类型的图像9typ......
  • python打包库nuitka测试 是否和c++的速度差不多
    nuitka一个打包py脚本的库原理是把py代码转成c++代码再重新编译宣传的优点是打包的程序速度快占用空间小用了一些时间了突然想测试一下性能是否和宣传的一样写了一个输出一百万以内素数个数的脚本 打包成exe结果  不打包执行 说实话挺失望还剩一个优点空间......