itk中的特征提取算法(三)

xiaoxiao2021-02-28  50

在图像处理过程中,目标物体给我们最直观的信息,除了形状,可能就是灰度了(抱歉,由于总是和医学图像相关,这里只讨论灰度图像,暂时不关注RGB)。本文要实现的目标是提取图像中灰度最大的点和最小的点。 itk给我们提供的类叫做:itkMinimumMaximumImageCalculator。看类名就知道,itk中的最大值最小值图像计算器。该计算器计算图像的最大值和最小值。类的设计依赖于itk的图像模版。提供了3个计算函数: 1.ComputeMaximum():计算最大值 2.ComputeMinimum():计算最小值 3.Compute():计算最大值和最小值 0..h中的私有成员变量: PixelType m_Minimum;//最大点灰度值 PixelType m_Maximum;//最小点灰度值 ImageConstPointer m_Image;//图像容器 IndexType m_IndexOfMinimum;//最大点坐标点 IndexType m_IndexOfMaximum;//最小点坐标点 RegionType m_Region;//算法执行de区域空间 bool m_RegionSetByUser;//自动/手动 区域空间标志位 1.构造函数: template<class TInputImage>//itk模版 MinimumMaximumImageCalculator<TInputImage> ::MinimumMaximumImageCalculator() { m_Image = TInputImage::New();//初始化输入图像内存空间 //注意以下两句,比较有意思 //最大值初始化为一个小数,最小值初始化为一个大数 //这样些是不是很规范呢? m_Maximum = NumericTraits<PixelType>::NonpositiveMin(); m_Minimum = NumericTraits<PixelType>::max(); //点坐标矩阵中用0填充 m_IndexOfMinimum.Fill(0); m_IndexOfMaximum.Fill(0); //默认自动选择区域空间(其实就是整个图像size) m_RegionSetByUser = false; } 2.Compute方法: template<class TInputImage> void MinimumMaximumImageCalculator<TInputImage> ::Compute(void) { if( !m_RegionSetByUser ) { m_Region = m_Image->GetRequestedRegion(); } //ImageRegionConstIteratorWithIndex很重要,迭代器 //注意迭代器中的 ImageRegionConstIteratorWithIndex< TInputImage > it( m_Image, m_Region ); //下面两句在初始化中出现过了,我猜是容错处理 m_Maximum = NumericTraits<PixelType>::NonpositiveMin(); m_Minimum = NumericTraits<PixelType>::max(); //开始扫描图像矩阵,从第一个点开始,到最后一个点结束 while( !it.IsAtEnd() ) { //获得当前点的灰度值 const PixelType value = it.Get(); //如果比当前的最大值大,交换 if (value > m_Maximum) { m_Maximum = value; m_IndexOfMaximum = it.GetIndex(); } //如果比当前的最小值小,交换 if (value < m_Minimum) { m_Minimum = value; m_IndexOfMinimum = it.GetIndex(); } //继续下一个点 ++it; } } 3.ComputeMaximum和ComputeMinimum方法都与Compute大同小异,略过。 4.最后一个有用的函数,设置区域: template<class TInputImage> void MinimumMaximumImageCalculator<TInputImage> ::SetRegion( const RegionType & region ) { m_Region = region;//输入区域 m_RegionSetByUser = true;//如果人工输入,标志位则true } 话说,这个特征点提取是不是太easy了点? 嗯,是的。但要记住,这里主要是分析itk官方源码,功能的实现是其次的。随时都要提醒自己,鱼和渔的区别,不要本末倒置,一叶障目,不见泰山。
转载请注明原文地址: https://www.6miu.com/read-76466.html

最新回复(0)