对Open CV 中的平面划分相关函数使用探索

本文探讨了Open CV中Delaunay三角剖分的应用,包括理解四方边缘结构、获取三角形连接关系的方法,并展示了在Delaunay和Voronoi划分后的结果。通过对Open CV提供的数据结构和算法的解析,帮助读者更好地掌握平面划分技术。
摘要由CSDN通过智能技术生成

任意点集的三角网格化(triangulation)问题一直是人们密切关注的问题。三角网格化问题在许多领域有广泛应用。Delaunay 三角剖分是目前研究应用最广的一种剖分方法,因其具备很多优点,以下简单列举两条:

空外接圆性质:在由点集V-生成的D-三角网中,每个三角形的外接圆均不包含该点集的其他任意点。

最大最小角度性质:在由点集V-生成的D-三角网中,所有三角形中的最小角度是最大的。

Open CV中有Delaunay的实现,极大地方便了广大科研工作者。尽管Open CV提供了详细的文档,并且提供了相关sample,但是由于对原文档及参考书籍[1,3,4]的理解上的不足,笔者在使用过程中仍然遇到很多问题,下面将自己的一些理解及探索进行总结,谬误之处望大家批评指正。请注意,这里并不会详细介绍Open CV如何进行delaunay划分,请参考Open CV自带的示例程序delaunay.c.

1. 也说“四方边缘(Quad-edge)”结构

图1 边e以及与边e相关的边(该图来自Open CV文档)

这个结构图非常难懂(对我而言),但是非常关键,是Open CV 平面划分的最基本元素,数据结构如下:

01. /* quad-edge structure fields */
02. #define CV_QUADEDGE2D_FIELDS()     \
03. int flags;                     \
04. struct CvSubdiv2DPoint* pt[4]; \
05. CvSubdiv2DEdge  next[4];
06.  
07. typedef struct CvQuadEdge2D
08. {
09. CV_QUADEDGE2D_FIELDS()
10. }
11. CvQuadEdge2D;

这个结构的关键数据是数组next[4],其按顺序存放四条边(代码):e,eRot以及它们的反向边。注:我这里用“边代码”,原因是Open CV是用long型的代码来表示平面划分的一条边。

eLnext: e的左方区域(或上方区域)是一个多边形,e是其中一条边,eLnext是指向这个区域的另一条边,这个描述有点类似于数据结构中的十字链表的表示法,与e是连接在一起的;

eRnext: 理解同eLnext,只不过是指向e的右方区域(或下方区域)的另一条边,与e是连接在一起的;

eDnext: 与e共“目的点”的另一条边;

eOnext: 与e共“出发点”的另一条边;

eRot: e的对偶边,这就没什么好解释的了。

在了解这些知识点后,我们可以获得如下的应用:

2. 应用1-在Delaunay划分结束后获取三角形连接关系

(1) 首先,以边e开始循环查找与其相连的两条边就可以找到一个三角形,对所有边进行相同操作,就可以找到许多三角形,注意,这其中有许多重复的边,需要进行判断。主要代码如下:

01. for( i = 0; i < total; i++ ) // total是边数目,可以参考Open CV示例程序delaunay.c
02. {
03.
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值