itk中的数据孔洞填充

itk提供了两个的补洞类:

itkGrayscaleFillholeImageFilter(针对灰度图像), itkBinaryFillholeImageFilter(针对二值图像)

具体用法不要太简单:

typedef itk::GrayscaleFillholeImageFilter FillHoleType;
//typedef itk::BinaryFillholeImageFilter FillHoleType;
FillHoleType::Pointer fillHoleFilter = FillHoleType::New();
fillHoleFilter->SetInput(input_data);
fillHoleFilter->Update();

思路:
0. 什么是孔洞?
一般是在二值图像中,一种特征被另一种特征完全包围。
1.怎么找孔洞?
遍历图像,将符合特征的点都找出来,做标记或者直接修正;
2.怎么遍历?
XYZ逐渐扫描。
3.怎么找特征?
一般都是Flood fill,网上一搜一大片。
4.怎么标记?
容器啊。
5.怎么修正?
修改特征值,比如修改灰度值。

以上012345中,除了3,别的方法基本都是确定的。所以孔洞填充算法的差异就在于3的计算能力。网上基本都是针对二维图像的,可这里的医学图像都是三维的,运算速度明显下降一倍啊,先将就吧。
Flood fill A: 6邻域/26邻域
Flood fill B: XYZ三个方向依次扫描

这里的孔洞填充必须遍历整个图像,是因为预先无法定位孔洞的位置,如果预先提供一个seed告知位置,那么孔洞填充算法瞬间变成了图像分割算法中的区域生长;
如果将每次扫描新到的孔洞放在不同的容器里,容器的数据就是孔洞的数量,那么孔洞填充算法瞬间变成了图像特征识别中的自动数羊;
如果把每个容器的点数都统计出来,通过spacing做变换,那么孔洞填充算法瞬间变成了自动体积(面积)测量;
如果计算每个容器的重心出来,那么孔洞填充算法瞬间变成了自动定位系统;
如果把容器中的特征都保存下来做参数分析,对下一次的算法做校正,那么孔洞填充算法很快就变成了人工智能。。。我怀疑,还有什么是它不能变的?
 

你可能感兴趣的:(ITK,itk)