轮廓树

轮廓树用来描述某个特定轮廓的内部特征。注意:轮廓树跟轮廓是一一对应的关系;轮廓树不用于描述多个轮廓之间的层次关系。

轮廓树的创建过程:

从一个轮廓创建一个轮廓树是从底端(叶子节点)到顶端(根节点)的。首先搜索三角形突出或者凹陷的形状的周边(轮廓上的每一个点都不是完全和它的相邻点共线的)每个这样的三角形被一条线段代替,这条线段通过连接非相邻点的两点得到;因此实际上三角形或者被削平或者被填满。每个这样的替换都把轮廓的顶点减少,并且给轮廓树创建一个新节点。如果这样的一个三角形的两侧有原始边,那么她就是得到的轮廓树的叶子;如果一侧已是一个三角形,那么它就是那个三角形的父节点。这个过程的迭代最终把物体的外形简称一个四边形,这个四边形也被剖开;得到的两个三角形是根节点的两个子节点。

结果的二分树最终将原始轮廓的形状性比编码。每个节点被它所对应的三角形的信息所注释。

这样建立的轮廓树并不太鲁棒,因为轮廓上小的改变也可能会彻底改变结果的树,同时最初的三角形是任意选取的。为了得到较好的描述需要首先使用函数cvApproxPoly()之后将轮廓排列(运用循环移动)成最初的三角形不怎么收到旋转影响的状态。
    可以用函数cvCreateContourTree来构造轮廓树。

用树的形式比较两个轮廓。cvMatchContourTrees函数实现了轮廓树的对比。

轮廓的成对几何直方图
    成对几何直方图(pairwise geometrical histogram PGH)是链码编码直方图(chain code histogram CCH)的一个扩展或者延伸。CCH是一种直方图,用来统计一个轮廓的Freeman链码编码每一种走法的数字。这种直方图的一个优良性质为当物体旋转45度,那么新直方图是老直方图的循环平移。这样就可以不受旋转影响。

(1)轮廓保存的是一系列的顶点,轮廓是由一系列线段组成的多边形。对于看起来光滑的轮廓(例如圆),只是线段条数比较多,线段长度比较短而已。实际上,电脑中显示的任何曲线都由线段组成。
    (2)每两条线段之间都有一定的关系,包括它们(或者它们的延长线)之间的夹角,两条线段的夹角范围是:(0,180)。
    (3)每两条线段上的点之间还有距离关系,包括最短(小)距离、最远(大)距离,以及平均距离。
    (4)成对几何直方图所用的统计数据包括了夹角和距离。
  在得到轮廓的成对几何直方图之后,可以使用直方图对比的方法来进行匹.

图像形状特征(四)--轮廓树及PGH相关推荐

  1. 使用Python,OpenCV从图像中删除轮廓

    使用Python,OpenCV从图像中删除轮廓 1. 效果图 2. 步骤 3. 源码 4. 参考 1. 使用Python.OpenCV计算轮廓的中心并标记 2. 使用Python.OpenCV检测轮廓 ...

  2. python使用matplotlib可视化线图(line plot)、自定义可视化图像的四个边框的色彩、可以分别设置矩形每一条边的色彩(change the axis color)

    python使用matplotlib可视化线图(line plot).自定义可视化图像的四个边框的色彩.可以分别设置矩形每一条边的色彩(change the axis color of a plot ...

  3. opencv补全边缘_为什么OpenCV中绘制的轮廓不能填充图像边缘的轮廓?

    编辑:我绕过了这个问题,在图像中添加了一个2位帧,然后使用我的代码,最后剪切图像以删除多余的帧.这是一个丑陋的解决方案,但它的工作! 我遇到了一个问题,我不确定这是一个错误还是我缺乏经验.我会尽量把它 ...

  4. OpenCV之imgproc 模块. 图像处理(5)在图像中寻找轮廓 计算物体的凸包 创建包围轮廓的矩形和圆形边界框 为轮廓创建可倾斜的边界框和椭圆 轮廓矩 多边形测试

    在图像中寻找轮廓 目标 在这个教程中你将学到如何: 使用OpenCV函数 findContours 使用OpenCV函数 drawContours 原理 例程 教程的代码在下面给出. 你也可以从 这里 ...

  5. ITK:从图像中提取轮廓

    ITK:从图像中提取轮廓 内容提要 输出结果 C++实现代码 内容提要 从图像中提取轮廓. 输出结果 There are 2 contoursContour 0: [10.5, 19] [10.460 ...

  6. OpenCV演示代码以查找图像中的轮廓(附完整代码)

    OpenCV演示代码以查找图像中的轮廓 OpenCV演示代码以查找图像中的轮廓 OpenCV演示代码以查找图像中的轮廓 #include "opencv2/imgcodecs.hpp&quo ...

  7. OpenCV在图像中寻找轮廓的实例(附完整代码)

    OpenCV在图像中寻找轮廓的实例 OpenCV在图像中寻找轮廓的实例 OpenCV在图像中寻找轮廓的实例 #include "opencv2/imgcodecs.hpp" #in ...

  8. OpenCV在图像中寻找轮廓

    OpenCV在图像中寻找轮廓 在图像中寻找轮廓 目标 代码 结果 在图像中寻找轮廓 目标 在本教程中,您将学习如何: 使用OpenCV函数cv :: findContours 使用OpenCV函数cv ...

  9. 细品以太坊的“四棵树”——Merkle Patricia Trie

    目录 1. 基础算法 1.1 Merkle Tree 1.2 Trie 1.3 Patricia Trie 2. Merkle Patricia Trie 2.1 节点类型 2.2 Key 定义 2. ...

最新文章

  1. nginx 添加自定义头部信息
  2. 将C4C Service Request中的summary和其他附件同步到ERP的Billing Request去
  3. C语言宏定义##连接符和#符的使用及其它宏定义注意事项
  4. leetcode 633. 平方数之和(双指针)
  5. git远程分支修改名字
  6. centos7 安装jdk_Centos 7安装和配置 ElasticSearch入门小白
  7. 经常有职场上的朋友问我,要怎么去轻资产创业?
  8. IntelliJ IDEA 文件夹重命名--解决重命名后js文件引用找不到路径报404错误
  9. Python中的unittest模块(入门学习款)
  10. java 宿舍管理系统教学,java学校宿舍管理系统
  11. 用qt建立自定义对话框的方法,含vc2015 vc版本中使用
  12. PHP叫号系统,排队叫号系统
  13. python箱形图各部分含义_箱形图以及python实践
  14. 逆水寒2021最新服务器,【图片】《逆水寒》2021年1月21日更新公告【逆水寒ol吧】_百度贴吧...
  15. 【Redis】五种数据类型
  16. flatten层的作用
  17. java中lock底层实现_Synchronized与Lock的底层实现解析
  18. 【珠穆朗玛峰编程练习题】
  19. 从典型软件来看 SaaS 的私有化部署方式
  20. 数据库MySQL最大连接数、最大活跃连接数、最大并发数、并发会话数区别

热门文章

  1. Mac下编译OpenCV for android
  2. 使用Kmeans聚类分析对复杂的数据进行分类
  3. “后序遍历二叉运算树进行Lambda演算的化简”带来的联系
  4. Docker-学习笔记
  5. linux修改文件系统属性,实用技巧:修改Linux操作系统的文件属性
  6. python django项目实例_【Django】项目实例
  7. springboot 指定 logback_spring boot与日志
  8. 通过内网穿透 将本地端口 使其外网可以进行访问 使用花生壳内网穿透 网站访问
  9. spring学习--完全注解开发(不需要xml)
  10. Smoke Test Ad hoc Test