图像形状特征(四)--轮廓树及PGH
轮廓树
轮廓树用来描述某个特定轮廓的内部特征。注意:轮廓树跟轮廓是一一对应的关系;轮廓树不用于描述多个轮廓之间的层次关系。
轮廓树的创建过程:
从一个轮廓创建一个轮廓树是从底端(叶子节点)到顶端(根节点)的。首先搜索三角形突出或者凹陷的形状的周边(轮廓上的每一个点都不是完全和它的相邻点共线的)每个这样的三角形被一条线段代替,这条线段通过连接非相邻点的两点得到;因此实际上三角形或者被削平或者被填满。每个这样的替换都把轮廓的顶点减少,并且给轮廓树创建一个新节点。如果这样的一个三角形的两侧有原始边,那么她就是得到的轮廓树的叶子;如果一侧已是一个三角形,那么它就是那个三角形的父节点。这个过程的迭代最终把物体的外形简称一个四边形,这个四边形也被剖开;得到的两个三角形是根节点的两个子节点。
结果的二分树最终将原始轮廓的形状性比编码。每个节点被它所对应的三角形的信息所注释。
这样建立的轮廓树并不太鲁棒,因为轮廓上小的改变也可能会彻底改变结果的树,同时最初的三角形是任意选取的。为了得到较好的描述需要首先使用函数cvApproxPoly()之后将轮廓排列(运用循环移动)成最初的三角形不怎么收到旋转影响的状态。
可以用函数cvCreateContourTree来构造轮廓树。
用树的形式比较两个轮廓。cvMatchContourTrees函数实现了轮廓树的对比。
轮廓的成对几何直方图
成对几何直方图(pairwise geometrical histogram PGH)是链码编码直方图(chain code histogram CCH)的一个扩展或者延伸。CCH是一种直方图,用来统计一个轮廓的Freeman链码编码每一种走法的数字。这种直方图的一个优良性质为当物体旋转45度,那么新直方图是老直方图的循环平移。这样就可以不受旋转影响。
(1)轮廓保存的是一系列的顶点,轮廓是由一系列线段组成的多边形。对于看起来光滑的轮廓(例如圆),只是线段条数比较多,线段长度比较短而已。实际上,电脑中显示的任何曲线都由线段组成。
(2)每两条线段之间都有一定的关系,包括它们(或者它们的延长线)之间的夹角,两条线段的夹角范围是:(0,180)。
(3)每两条线段上的点之间还有距离关系,包括最短(小)距离、最远(大)距离,以及平均距离。
(4)成对几何直方图所用的统计数据包括了夹角和距离。
在得到轮廓的成对几何直方图之后,可以使用直方图对比的方法来进行匹.
图像形状特征(四)--轮廓树及PGH相关推荐
- 使用Python,OpenCV从图像中删除轮廓
使用Python,OpenCV从图像中删除轮廓 1. 效果图 2. 步骤 3. 源码 4. 参考 1. 使用Python.OpenCV计算轮廓的中心并标记 2. 使用Python.OpenCV检测轮廓 ...
- python使用matplotlib可视化线图(line plot)、自定义可视化图像的四个边框的色彩、可以分别设置矩形每一条边的色彩(change the axis color)
python使用matplotlib可视化线图(line plot).自定义可视化图像的四个边框的色彩.可以分别设置矩形每一条边的色彩(change the axis color of a plot ...
- opencv补全边缘_为什么OpenCV中绘制的轮廓不能填充图像边缘的轮廓?
编辑:我绕过了这个问题,在图像中添加了一个2位帧,然后使用我的代码,最后剪切图像以删除多余的帧.这是一个丑陋的解决方案,但它的工作! 我遇到了一个问题,我不确定这是一个错误还是我缺乏经验.我会尽量把它 ...
- OpenCV之imgproc 模块. 图像处理(5)在图像中寻找轮廓 计算物体的凸包 创建包围轮廓的矩形和圆形边界框 为轮廓创建可倾斜的边界框和椭圆 轮廓矩 多边形测试
在图像中寻找轮廓 目标 在这个教程中你将学到如何: 使用OpenCV函数 findContours 使用OpenCV函数 drawContours 原理 例程 教程的代码在下面给出. 你也可以从 这里 ...
- ITK:从图像中提取轮廓
ITK:从图像中提取轮廓 内容提要 输出结果 C++实现代码 内容提要 从图像中提取轮廓. 输出结果 There are 2 contoursContour 0: [10.5, 19] [10.460 ...
- OpenCV演示代码以查找图像中的轮廓(附完整代码)
OpenCV演示代码以查找图像中的轮廓 OpenCV演示代码以查找图像中的轮廓 OpenCV演示代码以查找图像中的轮廓 #include "opencv2/imgcodecs.hpp&quo ...
- OpenCV在图像中寻找轮廓的实例(附完整代码)
OpenCV在图像中寻找轮廓的实例 OpenCV在图像中寻找轮廓的实例 OpenCV在图像中寻找轮廓的实例 #include "opencv2/imgcodecs.hpp" #in ...
- OpenCV在图像中寻找轮廓
OpenCV在图像中寻找轮廓 在图像中寻找轮廓 目标 代码 结果 在图像中寻找轮廓 目标 在本教程中,您将学习如何: 使用OpenCV函数cv :: findContours 使用OpenCV函数cv ...
- 细品以太坊的“四棵树”——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. ...
最新文章
- nginx 添加自定义头部信息
- 将C4C Service Request中的summary和其他附件同步到ERP的Billing Request去
- C语言宏定义##连接符和#符的使用及其它宏定义注意事项
- leetcode 633. 平方数之和(双指针)
- git远程分支修改名字
- centos7 安装jdk_Centos 7安装和配置 ElasticSearch入门小白
- 经常有职场上的朋友问我,要怎么去轻资产创业?
- IntelliJ IDEA 文件夹重命名--解决重命名后js文件引用找不到路径报404错误
- Python中的unittest模块(入门学习款)
- java 宿舍管理系统教学,java学校宿舍管理系统
- 用qt建立自定义对话框的方法,含vc2015 vc版本中使用
- PHP叫号系统,排队叫号系统
- python箱形图各部分含义_箱形图以及python实践
- 逆水寒2021最新服务器,【图片】《逆水寒》2021年1月21日更新公告【逆水寒ol吧】_百度贴吧...
- 【Redis】五种数据类型
- flatten层的作用
- java中lock底层实现_Synchronized与Lock的底层实现解析
- 【珠穆朗玛峰编程练习题】
- 从典型软件来看 SaaS 的私有化部署方式
- 数据库MySQL最大连接数、最大活跃连接数、最大并发数、并发会话数区别
热门文章
- Mac下编译OpenCV for android
- 使用Kmeans聚类分析对复杂的数据进行分类
- “后序遍历二叉运算树进行Lambda演算的化简”带来的联系
- Docker-学习笔记
- linux修改文件系统属性,实用技巧:修改Linux操作系统的文件属性
- python django项目实例_【Django】项目实例
- springboot 指定 logback_spring boot与日志
- 通过内网穿透 将本地端口 使其外网可以进行访问 使用花生壳内网穿透 网站访问
- spring学习--完全注解开发(不需要xml)
- Smoke Test Ad hoc Test