itk中的数据细化算法

来源:互联网 发布:linux grub引导 编辑:程序博客网 时间:2024/06/06 11:45
细化算法一般都对二值图像的骨架提取,这是一个从面变成线,还要保持原有图像形态的过程。是一个渐变的过程,少不了的迭代,就像对一棵树一层一层的剥皮,最后就剩下芯(sorry,我这里的说法有错误,也有一次产生骨架的算法,不迭代,之前的认知是错误的!)。

细化算法的差异在于迭代的方法,理论知识大家自行搜索,都是基础算法。这里,itk中的类叫做itkBinaryThinningImageFilter(这类只是针对2D图像用的,还有一个3D升级版叫做:itkBinaryThinningImageFilter3D),用法依然很easy,如下: 
typedef itk::BinaryThinningImageFilter <ImageType, ImageType> ImageFilterType;ImageFilterType::Pointer binaryThinningImageFilter = ImageFilterType::New();binaryThinningImageFilter->SetInput(input_data);binaryThinningImageFilter->Update();

接下来看下itk官方是怎么写的细化算法,所有的算法都在一个叫做“ComputeThinImage”的函数中,150行就搞定了~
1.代码段1:
  typedef typename NeighborhoodIteratorType::OffsetType OffsetType;  OffsetType o2 = {{0,-1}};  OffsetType o3 = {{1,-1}};  OffsetType o4 = {{1,0}};  OffsetType o5 = {{1,1}};  OffsetType o6 = {{0,1}};  OffsetType o7 = {{-1,1 }};  OffsetType o8 = {{-1,0}};  OffsetType o9 = {{-1,-1}};
看到了么,是不是很熟悉的8邻域?(几乎所有的基础图像算法都是从这里开始的)
2.代码段2:
  // These tests correspond to the conditions listed in Gonzalez and Woods  bool testA;  bool testB;  bool testC;  bool testD;
看注释!ABCD分别是在 Gonzalez and Woods 中列出的四种条件,是不是很熟悉?觉得不熟悉的人请回去重新读大一,谢谢~ 冈萨雷斯认识不?
这四种条件的详细解释请看这里
最终经过多次迭代,就得到了细化结果,说了这么多,其实原型就是传说中的"快速zhang并行算法"。

以上是迭代细化,接下来研究下直接细化方法。
1. 欧几里得距离变换,将二值图像变成灰度图像。反复对原图进行“减细”,将减细结果与中间结果做算术“叠加”,其终止条件是:“若对原图再减细,则将成为全零矩阵”:
itkApproximateSignedDistanceMapImageFilter
itkSignedMaurerDistanceMapImageFilter
itkDanielssonDistanceMapImageFilter
itkSignedDanielssonDistanceMapImageFilter:distanceMap,voronoiMap,distanceVectors
itkFastChamferDistanceImageFilter
itkIsoContourDistanceImageFilter
typedef  itk::ApproximateSignedDistanceMapImageFilter< ImageType, FloatImageType  > ImageFilterType;ImageFilterType::Pointer ImageFilter =  ImageFilter ::New();ImageFilter ->SetInput(image);ImageFilter ->SetInsideValue(255);ImageFilter ->SetOutsideValue(0);ImageFilter ->Update();

2. 骨架图就是从变换图中提取出具有相对最大灰度值的那些像素所组成的图像:
itkValuedRegionalMaximaImageFilter
itkMinimumMaximumImageCalculator
itkRegionalMaximaImageFilter
typedef itk::RegionalMaximaImageFilter <ImageType, ImageType > ImageFilter; ImageFilter::Pointer filter   = ImageFilter::New ();filter->SetInput(image);


这段单行旅程,走一走,停一停,看一看,想一想。
参考文献:
1.http://blog.csdn.net/roslei/article/details/52232359
2.http://www.cnblogs.com/mikewolf2002/p/3321732.html
3.http://blog.csdn.net/jia20003/article/details/8932489





原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 猪高烧不退不吃怎么办 苹果6刷机失败怎么办 uc能看不能下怎么办 苹果6s铃声太小怎么办 苹果6铃声声音小怎么办 苹果7来电铃声小怎么办 红米手机声音小怎么办 微信安装不上去怎么办 6s无法安装微信怎么办 苹果4微信版本低怎么办 新手机没有微信怎么办 新手机登陆微信怎么办 新号码被注册过怎么办 微信注册不了怎么办啊 苹果4铃声不响怎么办 苹果6黑屏没反应怎么办 苹果7卡机黑屏了怎么办 苹果7手机铃声小怎么办 支付宝发现套现怎么办 空调滴水管断了怎么办 地漏下水管断了怎么办 脸上长白色糠疹怎么办 腋下长白色的毛怎么办 饥荒电羊死光了怎么办 6s储存空间虚满怎么办 大胸下垂穿婚纱怎么办 美团签约成功后怎么办 拍婚纱照笑不出来怎么办 长得丑拍婚纱照怎么办 失恋了怎么办才能最快走出来 眼镜大了往下掉怎么办 眼镜带着往下掉怎么办 眼镜腿松了怎么办妙招 眼镜框大了总掉怎么办 吃不下饭恶心想吐怎么办 买到苹果翻新机怎么办 欠装修款不给怎么办 老板欠工资跑了怎么办 挖机老板欠工资怎么办 欠工程款耍赖不给怎么办 辞工后不给工资怎么办