ITK库梳理总结:
1、数据的表示与访问类:基类:itk::Image, itk::Mesh 和 itk::PointSet.
1)图像数据类:
- 基类:itk::Image ITK支持多种像素类型、多种空间维度图像进行操作。itk::ImageRegion:图像区域类:由itk::Index和itk::Size类定义;可以通过使用图像的起始索引和大小初始化该区域。成员函数:SetSize()、SetIndex()、SetRegions();
- 图像的读写类:itk::ImageFileReader、itk::ImageFileWriter;
- 像素数据访问:与itk::PointSet类可是实现交互
- 位置与间距定义类:利用itk::Image类中成员函数实现
SetOrigin()和GetOrigin():设置和检索图像的原点;
SetSpacing()和GetSpacing():将数组分配给图像、以及从图像中检索Spacing信息;
SetDirection()和GetDirection():设置与检索图像方向;
TransformPhysicalPointToIndex():计算最接近提供点的像素索引。
- RGB图像类:
结合RGB点集类对RGB图像进行操作;同时,允许自己创建属于自己的像素类型;
- 向量类型图像:
2)点集操作类
- 集类:itk::PointSet是itk::Mesh的一个基类提供点集操作方法,其旨在利用N维空间中的一组点集来表示几何形状。例如:SetPoint():将点插入PointSet中。GetPoint():从PointSet中读取点;GetNumberOfPoints():可以查询PointSet以确定已插入多少点; PointsContainer类型取决于PointSet类型:其中动态PointSet使用itk :: MapContainer;静态PointSet使用itk :: VectorContainer;同时,itk::PointSet与itk::Image可以实现交互;例如:SetPointData():将数据插入PointSet;GetPointData():从PointSet中读取数据;
- RGB像素类型点集类:itk::RGBPixel
- 向量像素类型:itk::Vector
- 法线像素类型:itk::CovariantVector
3)Mesh类:itk::PointSet类的派生类,用以表示空间形状;
- 单元格类型类:itk::Mesh在表示空间形状时候可以包含多种单元格类型。例如:itk::LineCell、itk::TriangleCell、itk::QuadrilateralCell、itk::TetrahedronCell和itk::PolygonCell,必须包含此类的头文件。
简单操作:SetCellData():将与单元格关联的数据插入到网格。对应有GetCellData();CellDataContainer中内置的Iterators可以更有效的访问单元格数据;
- 可以通过单元格管理数据
- 通过itk::DefaultStaticMeshTraits可以自定义网格;
- 拓扑结构数据
- SetBoundaryAssignment():可实现类似为四面体单元格分配了四个顶点以作为维数为零的边界等任务;
- 查询四面体单元以获取有关其边界特征的信息:GetNumberOfBoundaryFeatures()获得每个维度的边界特征数量;GetBoundaryAssigment()可恢复边界分配;
- 折线表示:
- 利用零点与一维像元类:itk::VertexCell和itk::LineCell可以表示;
- Cell的遍历
4)Path类:itk::PolyLineParametricPath:常用于以简洁的方式表示2D图像分割算法的输出,同时也可以用于将N维中的任何打开或闭合曲线表示为线性分段近似。
2、空间对象类:基类itk::SpatialObject;
1)基类:itk::SpatialObjects
- 函数AddChild():第二个对象添加到第一个对象;
- GetChildren()可访问该对象的子级列表;
- 以及其他函数RemoveChild()、GetNumberOfChildren()、RemoveAllChildren()
2)空间转换的函数:以实现Object Spatial与 WorldSpace的转换;
3)空间对象
- Arrow空间对象:itk::ArrowSpatialObject派生于基类itk::SpatialObject
- Blob空间对象:itk::BlobSpatialObject类源于itk::itkPointBasedSpatialObject类
- Ellipse空间对象:itk::EllipseSpatialObject派生于基类itk::SpatialObject
- Gaussian空间对象:itk::GaussianSpatialObject类
- Group空间对象:itk:: GroupSpatialObject
- Image空间对象:itk::ImageSpatialObject包含一个itk::Image,但添加了空间变换和父子层次结构的概念。
- ImageMask空间对象:itk:: ImageMaskSpatialObject
- Landmark空间对象:itk:: LandmarkSpatialObject
- Line空间对象:itk:: LineSpatialObject
- Mesh空间对象:itk:: MeshSpatialObject包含指向itk :: Mesh的指针,但添加了空间变换和父子层次结构的概念。
- Surface空间对象:itk:: SurfaceSpatialObject
- Tube空间对象:itk:: TubeSpatialObject
- DTITube空间对象:itk:: DTITubeSpatialObject源自于itk:: TubeSpatialObject
4)空间对象读写:itk::SpatialObjectReader、itk::SpatialObjectWriter
3、图像迭代器:迭代器是内存指针的抽象,用于容器值的迭代,顺序访问。 迭代器出现在for和while循环构造中,依次访问每个数据点。 例如,C指针是迭代器的一种。 它可以在内存中向前(递增)和向后(递减)移动,以顺序引用数组的元素。 许多迭代器实现都具有类似于C指针的接口。
1)图像Region迭代器:itk::ImageRegionIterator
2)具有索引的图像Region迭代器:itk::ImageRegionIteratorWithIndex
3)具有索引的图像线性迭代器:itk::ImageLinearIteratorWithIndex
4)具有索引的图像切片迭代器:itk::ImageSliceIteratorWithIndex
5)具有索引的图像随机常量迭代器:itk::ImageRandomConstIteratorWithIndex
4、图像适配器(Iamge Adaptors):基类:itk::ImageAdaptor;目的是使一个图像看起来像另一幅图像,可能是不同的像素类型。例如将像素类型为unsigned char的图像,并将其显示为像素类型为float的图像。另外,可以执行轻量级的像素操作,从而取代了对滤镜的需求。itk::ExpImageAdaptor、itk::SinImageAdaptor、itk::CosImageAdaptor
1)实现RGB图像适配;
2)实现Vector图像适配
5、图像读写类:itk::ImageFileReader、itk::ImageFileWriter,读写特定文件格式的实际低层任务是由一连串的itk :: ImageIO类在后台完成的。函数:SetFileName()、SetInput()将这些读取器和写入器连接到过滤器以创建管道。
1)Pluggable Factories:通过将文件名传递给类itk :: ImageIOFactory,并要求其标识能够读取或写入用户指定文件的ImageIO的任何子类来完成。
2)读写RGB:需要包含RGB图像的点操作itk::RGBPixel
3)读、投影、写图像时候由于涉及到图像强度调整:itk :: RescaleIntensityImageFilter用于线性重新缩放图像值;
4)提取图像区域与切片:利用区域图像滤波类itk::RegionOfInterestImageFilter,itk:: ExtractImageFilter
5)向量图像的读写:需结合点集操作中的itk::Vector类;
6)矢量图像中提取标量图像:滤波器类中itk :: VectorIndexSelectionCastImageFilter类;
7)读写图像Series:
- itk::ImageSeriesReader,itk::ImageSeriesWriter;
- 利用itk::NumericSeriesFileNames类生成文件名;
- 也可以完成RGB图像Series的读写,可利用点集类中的itk::RGBPixel
8)读和写DICOM图像:需要利用itk::GDCMImageIO类,它封装了基础GDCM库的连接。
- itk::GDCMSeriesFileNames类可以生成文件名
- 成员函数实现具体的操作:SetDirectory(),SetUseSeriesDetails(true)、AddSeriesRestriction()
6、图像滤波类:
1)阈值滤波:itk::BinaryThresholdImageFilter、itk::ThresholdImageFilter。其中包括高通、低通、带通、带阻等;
2)边界检测:主要是坎尼边界检测itk::CannyEdgeDetectionImageFilter.
3)Casting and Intensity Mapping(投影与强度映射):
- 线性映射:itk::CastImageFilter:输入图像进行逐像素处理,将每个像素转换为输出图像的类型;itk::RescaleIntensityImageFilter:线性缩放像素值:将输入的最小值和最大值映射到用户提供的最小值和最大值itk::ShiftScaleImageFilter:对强度做映射;itk::NormalizeImageFilter:正则化图像滤波;
- 线性映射:itk::SigmoidImageFilter;
4)梯度:
- 梯度幅度图像滤波(锐化):itk::GradientMagnitudeImageFilter;(数字图像中的空域滤波算子)
- 梯度幅度图像滤波(平滑):itk::GradientMagnitudeRecursiveGaussianImageFilter
- Derivative 图像滤波:itk::DerivativeImageFilter
5)二阶导数(图像微分):
- 高斯滤波:itk:: RecursiveGaussianImageFilter
- 拉普拉斯滤波:itk::RecursiveGaussianImageFilter
6)邻域滤波:
- 均值滤波:itk::MeanImageFilter
- 中值滤波:itk::MedianImageFilter
- 形态学滤波:itk:: BinaryErodeImageFilter、itk:: BinaryDilateImageFilter、itk::GrayscaleErodeImageFilter、itk::GrayscaleDilateImageFilter
- 投票滤波器:二进制中值滤波itk:: BinaryMedianImageFilter;孔洞填充:itk::VotingBinaryHoleFillingImageFilter;迭代孔洞填充:itk:: VotingBinaryIterativeHoleFillingImageFilter;
7)平滑滤波
- 模糊:离散高斯:itk::DiscreteGaussianImageFilter;二项式模糊:itk::BinomialBlurImageFilter;递归高斯:itk::RecursiveGaussianImageFilter
- 局部模糊:
- 边界保留平滑:itk::GradientAnisotropicDiffusionImageFilter;itk::CurvatureAnisotropicDiffusionImageFilter;itk::CurvatureFlowImageFilter;itk::MinMaxCurvatureFlowImageFilter;itk::BilateralImageFilter
8)距离映射:itk::DanielssonDistanceMapImageFilter.
- 均值滤波:itk::MeanImageFilter
- 中值滤波:itk::MedianImageFilter
9)几何变换:
- 翻转:itk::FlipImageFilter
- 重采样:itk::ResampleImageFilter
10)频域:
- FFT:基类itk::ForwardFFTImageFilter;派生类:itk::VnlForwardFFTImageFilter;itk::FFTWRealToComplexConjugateImageFilter
- 中值滤波:itk::MedianImageFilter
11)Extracting Surfaces:itk::Mesh
12)其他图像滤波类:可用于某些特定的图像配准任务中
- 重采样图像滤波:itk::ResampleImageFilter
- 直方图匹配图像滤波:itk::HistogramMatchingImageFilter
- Cast图像滤波:itk::CastImageFilter
- Warp图像滤波:itk::WarpImageFilter
7、图像配准类:常用的基类:itk::ImageRegistrationMethodv4
1)Monitoring配准:itk::Object、itk::Command和itk::EventObject;其中Object是大多数ITK对象的基类。此类维护指向事件观察器的指针的链接列表。 Command类扮演观察员的角色,可向对象注册,声明他们有兴趣在特定事件发生时接收通知。 EventObject类表示一组事件层次结构表示(开始,结束,进度和迭代)
2)中心初始化:
- 刚性配准:itk::Euler2DTransform类可以执行2D刚性配准
- 类itk::CenteredTransformInitializer可用于其他维度的刚性配准
- 类itk::ImageMomentsCalculator可用于计算图像质心
3)转换:
- Identity转换:itk::IdentityTransform类主要用于调试,具体的配准任务中不常用;
- Translation转换:itk::TranslationTransform简单但最有用的转换之一,通过向其添加向量来映射所有点;
- Scale转换:itk::ScaleTransform表示向量空间的简单缩放;
- Scale对数转换:itk::ScaleLogarithmicTransform类是itk::ScaleTransform的变种,可以对itk::ScaleTransform类中的参数进行优化;
- Euler2D转换:itk :: Euler2DTransform实现了2D刚性转换;
- Euler3D转换:itk::Euler3DTransform
- CenteredRigid2D转换:itk :: CenteredRigid2DTransform在2D中实现刚性转换,可以指定任意旋转中心,而Euler2DTransform只可以利用原点作为旋转中心;
- Similarity2D转换:itk :: Similarity2DTransform可看作是与各向同性缩放因子结合的刚性变换,并保留线之间的角度。2D实现中结合了itk :: ScaleTransform和itk :: Euler2DTransform的特征;
- Similarity3D转换:itk :: Similarity3DTransform
- 四元刚性转换:itk::QuaternionRigidTransform,主要是实现3D的刚性变换;
- Versor转换:itk::VersorTransform该类是对itk::QuaternionRigidTransform的旋转部分,且主要针对2D;
- Versor刚性3D转换:itk::VersorRigid3DTransform
- 刚性3D透视转换:itk::Rigid3DPerspectiveTransform在3D空间中实现了刚性变换,通过透视投影。
- Affine转换:itk::AffineTransform,利用线性表示实现转换;
- BSpline形变转换:用于解决形变套准问题,等效于生成变形场,其中将变形矢量分配给空间中的每个点;
- Kernel 转换:利用不同的核函数实现转换;Itk ::ElasticBodySplineKernelTransform;Itk ::ElasticBodyReciprocalSplineKernelTransform;Itk ::ThinPlateSplineKernelTransform;Itk ::ThinPlateR2LogRSplineKernelTransform;Itk ::VolumeSplineKernelTransform
3)内插器:
- 最近邻内插:itk::NearestNeighborInterpolateImageFunction
- 线性内插:itk::LinearInterpolateImageFunction
- B-Spline内插:itk::BSplineInterpolateImageFunction类使用B-Spline基函数表示图像强度,输入图像首先连接到插值器时,将使用递归滤波计算B-Spline系数。
- 窗口Sinc内插:itk::WindowedSincInterpolateImageFunction,离散网格中数字化的数据的最佳内插器,基于傅里叶变换;
4)度量器:基类:itk::ImageToImageMetricv4;其中又包括ITKv3与ITKv4两种;
ITKv3:
- 均方itk::MeanSquaresImageToImageMetricv4
- 相关性:itk::CorrelationImageToImageMetricv4
- Mattes互信息:itk::MattesMutualInformationImageToImageMetricv4
- 联合直方图互信息:itk::JointHistogramMutualInformationHistogramImageToImageMetricv4
- Demons度量:itk::DemonsImageToImageMetricv4
- ANTS邻域相关性度量itk::ANTSNeighborhoodCorrelationImageToImageMetricv4;
ITKv3:
- 均方:itk :: MeanSquaresImageToImageMetric
- 归一化相关:itk :: NormalizedCorrelationImageToImageMetric
- 均方差:itk :: MeanReciprocalSquareDifferenceImageToImageMetric
- Viola and Wells互信息:itk :: MutualInformationImageToImageMetric
- Mattes互信息:itk :: MattesMutualInformationImageToImageMetric
- Kullback和Liebler的Kullback Liebler距离度量:itk :: KullbackLeiblerCompareHistogramImageToImageMetric
- 标准化互信息:itk :: NormalizedMutualInformationHistogramImageToImageMetric
- 均方直方图:itk: :: MeanSquaresHistogramImageToImageMetric
- 相关系数直方图:itk :: CorrelationCoefficientHistogramImageToImageMetric
- 基数匹配指标:itk :: MatchCardinalityImageToImageMetric
- Kappa统计量度:itk :: KappaStatisticImageToImageMetric
- 梯度差:itk :: GradientDifferenceImageToImageMetric
5)优化器:
- Amoeba优化器:itk :: AmoebaOptimizerv4
- 梯度下降法:itk :: GradientDescentOptimizerv4
- 梯度下降线搜索:tk :: GradientDescentLineSearchOptimizerv4
- 共轭梯度下降法:itk :: ConjugateGradientLineSearchOptimizerv4
- 拟牛顿法:itk::QuasiNewtonOptimizerv
- LBFGS优化:itk::LBFGSOptimizerv4
- LBFGSB优化:itk::LBFGSBOptimizerv4
- 一加一优化:itk::OnePlusOneEvolutionaryOptimizerv4
- Regular Step梯度下降:itk::RegularStepGradientDescentOptimizerv4
- Powell优化:itk::PowellOptimizerv4
- Exhausive优化器: itk::PowellOptimizerv4参数空间上对网格进行完全采样。这个优化器是等效于在参数空间上定义的离散网格中进行穷举搜索。
6)配准方法类:
- 点集配准类:itk:PointSetToPointSetRegistrationMethod
7)配准滤波:
- 有限元配准滤波:itk::FEMRegistrationFilter
- 水平集配准滤波:tkLevelSetMotionRegistrationFilter
- Demon配准滤波:Itk::DemonsRegistrationFilter:itk::FlipImageFilter
- SymmetricForces配准滤波:itkSymmetricForcesDemonsRegistrationFilter
- 利用多分辨率参数图像滤波类:itk::MultiResolutionPyramidImageFilter can:
8、图像分割:
1)区域生长:
- itk::ConnectedThresholdImageFilter;
- itk::OtsuThresholdImageFilter
- itk::NeighborhoodConnectedImageFilter
- itk::ConfidenceConnectedImageFilter
- tk::IsolatedConnectedImageFilter
- itk::VectorConfidenceConnecte
2)基于分水岭的分割:
- itk::WatershedImageFilter
3)基于水平集的分割:
- itk::FastMarchingImageFilter;
- itk::ShapeDetectionLevelSetImageFilter;
- itk::GeodesicActiveContourLevelSetImageFilter;
- itk::ThresholdSegmentationLevelSetImageFilter;
- itk::CannySegmentationLevelSetImageFilter;
- itk::LaplacianSegmentationLevelSetImageFilter;
- itk::GeodesicActiveContourShapePriorLevelSetFilter
4)特征提取:
- itk::HoughTransform2DLinesImageFilter;
- itk::HoughTransform2DCirclesImageFilter;
9、统计:itk::Statistics
1)数据容器:
- 样本接口:itk::Statistics::Sample
- 样本适配器:itk::Statistics::ImageToListSampleAdaptor;itk::Statistics::PointSetToListSampleAdaptor
- 直方图:itk::Statistics::Histogram
- Sub样本:itk::Statistics::Subsample
- Membership样本:itk::Statistics::MembershipSample
2)常见的算法与函数:
- 样本统计:itk::Statistics::ListSample
- 样本生成:
- 概率密度函数:itk::Statistics::GaussianMembershipFunction
- 距离度量:itk::Statistics:: DistanceMetric
- 欧几里得距离:itk::Statistics::EuclideanDistance
- 决策规则:
最大决策:itk::MaximumDecisionRule
最小决策:itk::MinimumDecisionRule
最大比率决策:itk::MaximumRatioDecisionRule.
- 随机变量生成:
正则化变量生成(高斯分布):itk::Statistics::NormalVariateGenerator
3)统计在图像中应用:
- 图像直方图操作:
- 图像信息论:
4)分类:
- k-d树:itk::Statistics::KdTree
- 基于k-d树的k-均值聚类:itk::Statistics::KdTreeBasedKmeansEstimator
- k-均值聚类分类:itk::Statistics::ScalarImageKmeansImageFilter
- 贝叶斯分类器:利用高斯密度函数
- 期望最大化混合模型估计:
itk::Statistics::ExpectationMaximizationMixtureModelEstimator
- 随机森林:itk::Statistics::MRFImageFilter
10、其他:
1)Bridge类:VTK、NumPy等;
2)兼容性:解决不同模块之间的兼容性
- 图像转换:itk::ImageTransformer
- 向量投影图像滤波:itk::VectorCastImageFilter
- 条件变量:itk::Condition Variable
3)IO接口类:BioRad、BMP、CSV、GDCM、GE、ImageBase、Meta、TransformMINC等
4)Numerics:Eigen、有限元(FEM)、优化器、统计等;
5)第三方类:
6)视频处理类:OpenCVd 链接、滤波、视频IO接口等;
GPU类梳理:
1.核心GPU并行:
1)GPU公共类:
- 基于GPU的核管理器:itk::GPUKernelManager使用OpenCL实现的GPU内核管理器,此类负责管理GPU内核和命令队列。
- 基于GPU的上下文管理器:itk::GPUContextManager
- 基于GPU的数据管理器:itk::GPUDataManager 使用OpenCL实现GPU内存管理,是GPUImage类必须;
- GPUFunctor图像滤波的基本Functor类:itk::GPUFunctorBase;其中的成员函数SetGPUKernelArguments()可以设置GPU核函数的参数;
- itk::GPUImageDataManagerGPUImage的数据管理,将负责CPU映像和GPU映像之间的数据同步。
- itk::GPUImage n-维图像模板化GPU执行类;GPU图像滤波一起使用,隐式管理CPU和GPU内存。
- itk::GPUImageOps:提供一些基本的GPU图像操作的内核;
- itk::GPUInPlaceImageFilter:GPU滤波器的基类;父类为InPlaceImageFilter;
- itk::GPUImageToImageFilter:接受CPU和GPU图像作为输入和输出,并相应地使用滤波器。 如果可以使用GPU,则将调用GPUGenerateData()。 否则,将调用父类(即ImageToImageFilter)中的GenerateData()。
- itk::GPUUnaryFunctorImageFilter:使用GPU在一张图像上实现逐像素操作,一元函子图像滤波器的GPU版本;
- itk::GPUReduction:GPU版本的降维算法;
- itk::OpenCLUtil
2)GPU有限差分类:
- itk::GPUFiniteDifferenceFunction:GPU有限差分函数基类,与大多数GPU类不同,GPUFiniteDifferenceFunction没有相应的CPU父类,而仅以CPU类FiniteDifferenceFunction作为其基类。
- itk::GPUFiniteDifferenceImageFilter:GPU版本的有限差分滤波
- itk::GPUDenseFiniteDifferenceImageFilter:GPU版密集有限差分图像过滤器
2、配准GPU并行:
1)GPU公共类:
- itk::GPUPDEDeformableRegistrationFunction执行形变配准算法的所有偏微分方程(PDE)函数的抽象基类, PDEDeformationRegistrationFilter子类使用它来计算输出变形字段,该字段将运动图像映射到固定图像。
- itk::GPUPDEDeformableRegistrationFilter:GPUPDEDeformableRegistrationFilter算法通过计算变形场来两副图像配准,该变形场会将运动图像映射到固定图像上。
2)GPUPDE形变类:
- itk::GPUDemonsRegistrationFunction封装了Demons配准算法,DemonsRegistrationFilter使用它来计算输出变形字段,该字段将运动图像映射到固定图像。
- itk::GPUDemonsRegistrationFilter:此类封装了demons配准PDE算法,DemonsRegistrationFilter使用它来计算输出变形场,将运动图像映射到固定图像。
3、滤波GPU并行:
1)GPUAnisotropic平滑滤波:
- itk::GPUScalarAnisotropicDiffusionFunction
- itk::GPUAnisotropicDiffusionFunction:基于GPU的Anisotropic扩撒函数类,提供GPU版的有限差分函数的计算更新方法和计算平均梯度幅度方差;
- GPUAnisotropic滤波tk::GPUAnisotropicDiffusionImageFilter类也是AnisotropicDiffusionImageFilter的GPU基类;可以通过InitializeIteration调用GPU计算平均梯度幅度平方函数(GPU Calculate Average Gradient Magnitude Squared())
- itk::GPUGradientNDAnisotropicDiffusionFunction:为GPU上的标量值图像实现了经典的Perona-Malik各向异性扩散方程的N维版本。
- itk::GPUGradientAnisotropicDiffusionImageFilter该类利用GPUGradientNDAnisotropicDiffusionFunction实现的经典Perona-Malik基于梯度幅度的方程式,对标量itk :: Image进行各向异性扩散。
2)GPU图像滤波基类:
- itk::GPUBoxImageFilterBox邻域中GOU滤波的基类,和itk::GPUBoxImageFilter类相对应。
- itk::GPUNeighborhoodOperatorImageFilter利用GPU将单个NeighborhoodOperator用于图像滤波,通过GPU计算NeighborhoodOperator和NeighborhoodIterator之间的连续内积,该乘积扫过图像区域中的每个像素。
- itk::GPUcastImageFilter:
3)GPU平滑滤波:
- Itk::GPUDiscreteGaussianImageFilter:通过GPU实现离散高斯图像滤波;
- Itk::GPUMeanImageFilter:通过GPU实现均值滤波,全局内存中读取邻域像素。
4)GPU阈值化:
- itk::Functor::GPUBinaryThreshold:成员函数:SetGPUKernelArguments():设置该functor的GPU的核参数;SetInsideValue ()、SetOutsideValue ():设置内部外部参数;SetLowerThreshold ()、SetUpperThreshold ()设置上下限阈值;
- itk::GPUBinaryThresholdImageFilter:其中包含了GPU、CPU超类
- itk::GPUBinaryThresholdImageFilterFactory类:是对GPUBinaryThresholdImageFilter类的实现;