前面一篇教程中,我们实现了Zhang的快速并行细化算法,从算法原理上,我们可以知道,算法是基于像素8邻域的形状来决定是否删除当前像素。还有很多与此算法相似的细化算法,只是判断的条件不一样。在综述文章, Thinning Methodologies-A Comprehensive Survey中描述了各种细化算法的实现原理,有兴趣可以阅读一下。

下面看看图像细化的定义以及细化算法的分类:

图像细化(Image Thinning),一般指二值图像的骨架化(Image Skeletonization) 的一种操作运算。
     所谓的细化就是经过一层层的剥离,从原来的图中去掉一些点(通常是轮廓上的点),但仍要保持原来的形状,直到得到图像的骨架。

骨架,可以理解为图象的中轴,如下面的字母H,白色的线即为起中轴,该中轴也可以称作H的骨架。


好的细化算法一定要满足下面几个条件:

  • 收敛性;保证细化后细线的连通性;保持原图的基本形状;减少笔画相交处的畸变;细化结果是原图像的中心线;
    细化的快速性和迭代次数少。

依据是否使用迭代运算可以分为两类:
非迭代算法:一次即产生骨架,如基于距离变换的方法,游程编码细化等。
迭代算法:即重复删除图像边缘满足一定条件的像素,最终得到单像素宽带骨架。

迭代方法依据其检查像素的方法又可以再分成两类:
串行算法:是否删除像素在每次迭代的执行中是固定顺序的,它不仅取决于前次迭代的结果,也取决于本次迭代中已处理过像素点分布情况。
并行算法:像素点删除与否与像素值图像中的顺序无关,仅取决于前次迭代的结果。

常用的迭代算法包括:Hilditch、Pavlidis、Rosenfeld细化算法以及基于索引表查询的细化算法等等。

Hilditch算法使用于二值图像,该算法是并行串行结合的算法。
Pavlidis算法通过并行和串行混合处理来实现,用位运算进行特定模式的匹配,所得的骨架是8连接的,用于0-1二值图像。
Rosenfeld算法是一种并行细化算法,所得的骨架形态是8-连接的,使用于0-1二值图像。

索引表细化算法:经过预处理后得到待细化的图像是0、1二值图像。像素值为1的是需要细化的部分,像素值为0的是背景区域。基于索引表的算法就是依据一定的判断依据,所做出的一张表,然后根据要细化的点的八个邻域的情况查询,若表中元素是1,若表中元素是1,则删除该点(改为背景),若是0则保留。因为一个像素的8个邻域共有256中可能情况,因此,索引表的大小一般为256,索引表细化算法速度很快。

OpenCV学习(14) 细化算法(2)相关推荐

  1. OpenCV学习(13) 细化算法(1)(转)

    1.转载链接:http://www.cnblogs.com/mikewolf2002/p/3321732.html 程序编码参考经典的细化或者骨架算法文章: T. Y. Zhang and C. Y. ...

  2. OpenCV学习(17) 细化算法(5)

    本章我们看下Pavlidis细化算法,参考资料http://www.imageprocessingplace.com/downloads_V3/root_downloads/tutorials/con ...

  3. OpenCV学习(13) 细化算法(1)

    程序编码参考经典的细化或者骨架算法文章: T. Y. Zhang and C. Y. Suen, "A fast parallel algorithm for thinning digita ...

  4. OpenCV学习(19) 细化算法(7)

    最后再来看一种通过形态学腐蚀和开操作得到骨架的方法.http://felix.abecassis.me/2011/09/opencv-morphological-skeleton/ 代码非常简单: v ...

  5. 【opencv学习】Fast算法进行角点检测

    今天学习角点检测的一个Fast算法,顾名思义,很快! FAST 算法 1: 在图像中选择一个像素点p,得到其灰度值I_p 2: 以半径r为半径画圆,覆盖p点周围M个像素点,通常设置r=3,则M=16, ...

  6. 【opencv学习】RANSAC算法在图像拼接中的应用实战

    一:单应性变换 我们得到两张图像的图像后,可以通过BFMatcher得到匹配的点,其实就是一个暴力搜索来比较最相近的特征点(128维度的向量,求向量的近似度). 通过匹配的多个关键点的配对信息,我们能 ...

  7. OpenCV学习(21) Grabcut算法详解

    grab cut算法是graph cut算法的改进.在理解grab cut算之前,应该学习一下graph cut算法的概念及实现方式. 我搜集了一些graph cut资料:http://yunpan. ...

  8. 【OpenCV学习】Bresenham算法opencv实现

    作者:gnuhpc 出处:http://www.cnblogs.com/gnuhpc/ /** ==================================================== ...

  9. 【opencv学习】光流算法以及物体追踪算法(Lucas-Kanade算法)

    正所谓的光流估计,就是在视频的前后帧的分析中,能分析出图中的一些object的移动方向和速度,可以做目标追踪使用. Lucas-Kanade算法改进 经典的光流估计是Lucas-Kanade 算法,这 ...

最新文章

  1. 如何破解压缩文件密码-省时省力的方法
  2. JPA基础(一):全面阐释和精彩总结JPA
  3. 笑谈在工作中树立个人品牌的十大原则的个人观点
  4. 精简自己20%的代码
  5. mybatis完整增删改查入门实例
  6. 【开源项目】基于C++使用ffmpeg和QT开发播放器
  7. 数据库:MySQL和MariaDB的JDBC连接
  8. PHP header发送各种类型文件下载
  9. 使用 加载 顺序_SpringBoot系列教程之Bean加载顺序之错误使用姿势辟谣
  10. JS获取子节点、父节点和兄弟节点的方法实例总结
  11. python学习第八天--异常和异常处理
  12. Vibe算法简介、优缺点、代码
  13. 中国科学院大学2019年数学分析考研试题
  14. python爬虫运行时电脑无响应_Python爬虫爬资源时由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败。怎么破?...
  15. 云桌面到底是干什么的?
  16. 游戏对战匹配逻辑小结
  17. 康奈尔大学计算机交叉学专业,美国康奈尔大学EE专业设置的五大方向
  18. GEF(Graphical Editing Framework)介绍
  19. 网易云web安全工程师第一天
  20. 忘记,只需一朵花开的时间。

热门文章

  1. 如何在Swift中发出HTTP请求?
  2. 如何强制.NET应用程序以管理员身份运行?
  3. java manualbuffer_FlatBuffer Java Bean自由转换
  4. 仿制波形驱动机器人- SAW
  5. c语言发牌小游戏,大家想想怎么用c实现我们经常玩的斗地主游戏的发牌过程呢?...
  6. c++题目大坑:分数化小数
  7. python flask快速入门与进阶-Flask基础进阶与python flask实战bbs教程
  8. Halcon 一维码(条形码)
  9. 高级 Vue 组件模式 (6)
  10. 【7.17总结】 匈牙利算法(二分图最大匹配)