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

边界是图像的基本特征之一,同时也是图像的研究热点。本文的内容是对二值图像的边界识别。

itk中的特征提取算法(二)_第1张图片

常用的基本方法有以下几种:
1.基于边界搜索的方法:
光栅扫描法:设定一定的阈值进行多次行扫描和列扫描;
边缘跟踪法:先检测到一个边缘点,然后沿着边缘点跟踪计算,直到回到边缘点;其中,八邻域搜索的边界跟踪算法,又叫标签处理算法;
虫随法:进入黑色区域,左转,进入黑色区域,右转,一直回到运动起始点。
2.基于数学形态学的方法:
先腐蚀再相减
针对边界提取,itk中也有几个不同的类,分别都依托与不同的理论基础。
itkBinaryErodeImageFilter 和 itkSimpleContourExtractorImageFilter 中用的原理是先腐蚀再相减;
itkContourExtractor2DImageFilter 中的原理是"marching squares",类似三维重建面绘制中的"marching cube";
itkCannyEdgeDetectionImageFilter 是依附于canny算子的边缘搜索;
itkBinaryContourImageFilter 和 itkLabelContourImageFilter 貌似比较特殊,在像素扫描的同时加入了多线程,在速度方面有一定的优势。

下面看itkBinaryContourImageFilter的用法:

typedef itk::BinaryContourImageFilter< ImageType, ImageType> FilterType;
FilterType::Pointer binaryContourFilter= FilterType::New();
binaryContourFilter->SetInput( intput_data);
binaryContourFilter->FullyConnectedOn();//开启26邻域单连通 
binaryContourFilter->SetForegroundValue(0);//设置前景色
binaryContourFilter->SetBackgroundValue(255);//设置背景色
binaryContourFilter->Update();

(其他几个类的用法都很简单,都是SetInput->Update->GetOutput,就不一一列举了。可能由于兼容高维度的原因,itk的这几个类有写得好烦,各种迭代套循环~~有时间自己写一个试试)
-------这里先留坑------

itk中的特征提取算法(二)_第2张图片
边界算法原理并不复杂,就是迭代套循环,大部分的算法目标优化都集中在时间和效率。设计出好的跟踪方法,将迭代的步数减少,效率自然提高(拼硬件不算!)。


参考文献:
1. https://itk.org/Wiki/ITK/Examples/EdgesAndGradients/BinaryContourImageFilter
2. https://itk.org/Wiki/ITK/Examples/EdgesAndGradients/BinaryBoundaries
3. http://blog.csdn.net/wqvbjhc/article/details/2299066
4. 《二值图像中目标物体轮廓的边界跟踪算法》

你可能感兴趣的:(ITK医学图像处理)