CGAL的最优传输曲线重构

1、介绍

        此程序包实现了一种重建和简化二维点集的方法输入是一组具有质量属性的二维点,可能受到噪声和离群值的干扰。输出是一组线段和孤立点,它们近似于输入点,如下图所示。质量属性与每个点的近似重要性有关。

左:输入点集受到噪声的阻碍。右图:由线段组成的相应重建形状。 

        在内部,该算法从所有输入点构建一个初始的二维Delaunay三角剖分,然后简化三角剖分,使三角剖分的边和顶点子集近似于输入点。近似是指基于最优运输的鲁棒距离。三角剖分通过半边折叠、边翻转和顶点重定位运算符的组合简化。三角剖分在简化过程中保持有效,即既没有重叠也没有折叠。

        重建算法的输出是三角剖分的边和顶点的子集。下图描绘了一个例子,其中输出由绿色边和一个孤立顶点组成。绿色边被认为是相关的,因为它们很好地近似了许多输入点。灰色显示的边称为虚边,被丢弃,没有近似任何输入点。红色显示的边称为不相关,也被丢弃,近似了一些输入点,但不足以被认为是相关的。

(a) 输入点。(b) 输入点的Delaunay三角剖分。(c) 简化后,重影边为灰色,相关边为绿色,不相关边为红色。(d)最终重建由多条边和一个孤立顶点组成。 

        输出重构的目标边缘数量与近似误差的概念之间没有直接关系。因此,简化算法可以通过与距离相同的最大容限误差来停止。更具体地说,公差被指定为每单位质量运输成本的最大平方根,在一定距离内是均匀的。

        请注意,公差是在Wasserstein距离的意义上给出的(请参见Wasserstein距)。这不是豪斯多夫公差:这并不意味着输入样本和输出多段线之间的距离保证小于公差。这意味着每质量运输成本的平方根(在一定距离内是均匀的)最多是公差。

        重建的输出可以通过两种方式获得:要么作为2D点和线段的序列,要么作为对线段的连通性进行编码的索引格式,因此称为顶点和边。索引格式记录点的列表,然后在所述列表中记录边的点索引对,以及隔离顶点的点索引。

2、API

        向用户公开的唯一类是Optimal_transportation_reportion_2类。

2.1、示例调用

Optimal_transportation_reconstruction_2<K>otr2(points.begin(), points.end());
otr2.run(100); // perform 100 edge collapse operators

        如果输入不仅仅是没有质量的点,则可以提供与该输入匹配的特性映射。 

Optimal_transportation_reconstruction_2<K, Point_property_map, Mass_property_map>otr2(points.begin(), points.end(), point_pmap, mass_pmap);
otr2.run(100); 

        除了调用run(),还可以调用run_until()并指定要保留的输出顶点数. 

        来自分别由2000、400和200个输入点组成的数据集的20个顶点重建的示例。这些示例说明了当输入点密度降低时算法的行为。 

        最后,当输出边的数量未知时,调用run_under_wasserstein_tolerance()允许用户根据距离标准运行算法。

 otr2.run_under_wasserstein_tolerance(0.1);//执行折叠,直到在公差范围内无法再执行为止

        具有不同Wasserstein耐受阈值的重建示例。顶部:输入点设置和重建,公差为0.005。底部:公差为0.05和0.1的重建。 

2.2、全局点重定位

        由于噪声和丢失的数据可能会阻止重建的形状在正确的位置具有尖角,因此该算法提供了重新定位重建的所有点的功能:

otr2.relocate_all_points();

        请注意,这些点与基础三角剖分的顶点重合。此函数可以在一次简化后调用,也可以与多次简化交错调用。

        新的点位置被选择为使得输出分段和孤立点对输入点的近似被提高。更具体地说,重新定位过程在计算给定当前重建的最佳运输计划和在保持当前运输计划不变的情况下重新定位三角测量顶点之间迭代。顶点被重新定位,以最大限度地减少当前运输计划引起的运输成本。

左:点重定位前。右图:点重定位后。 

3、参数

        该算法的行为通过以下参数来控制。

3.1、边翻转

        在简化内部三角剖分过程中,需要一些递归边翻转算子来确保在应用半边折叠算子时三角剖分保持有效。调用set_use_flip(false)可防止算法使用边翻转,以次优结果为代价产生更短的计算时间,因为并非所有边缘都可以被认为是可折叠的。

         边缘翻转。左图:蓝色边会产生折叠,因为阻挡边显示为黑色。中间:运行递归翻转边过程后,蓝色边是可折叠的。右图:边塌陷后的三角剖分。

3.2、边缘相关性

        从近似观点来看,如果一个边(1)很长,(2)近似很多点(或在点具有质量属性时近似大量质量),并且(3)近似误差很小,则该边是相关的。更具体地说,相关性的概念定义为m(e)*|e|²/cost(e),其中m(e)表示由边近似的点的质量,|e|表示边的长度,cost(e)表示其近似误差。由于误差由质量时间平方距离定义,因此相关性是无单位的。默认值为1,因此所有近似某些输入点的边都被认为是相关的。较大的相关性值为我们提供了增加对异常值鲁棒性的手段。

3.3、随机样本大小

        默认情况下,简化依赖于抽取期间半边缘折叠算子的穷举优先级队列。为了提高效率,严格大于0的参数样本大小切换到多选择方法,即,在大小样本大小的边缘折叠算子的随机样本中的最佳选择。样本大小的典型值是15,但当目标是非常粗略的简化时,必须放大此值。

3.4、本地点迁移

        除了上述全局重定位功能外,Optimal_transportation_reconstruction_2 类构造函数的一个可选参数提供了一种在每次边折叠操作后(可能结合边翻转)在本地重定位点的手段。本地在此处意味着仅在每个边折叠操作周围的三角剖分中重定位局部模板的顶点,其过程类似于上述全局重定位函数中描述的过程。将局部模板选择为折叠边后剩余顶点的单环邻域。重定位过程是迭代的,一个参数控制重定位步骤的数量。

3.5、详细输出

        verbose参数介于0和2之间,用于确定算法生成的控制台输出量。0值不生成标准输出的输出。大于0的值将生成标准输出std::cerr的输出。

4、健壮性

        该算法的优点是其对噪声和异常值的鲁棒性。下图显示,只要异常值的密度与输入点的密度相比较小,算法的输出就几乎不受噪声和/或异常值的影响,因此算法的输出是稳健的。

        对噪声和异常值的鲁棒性。左:无噪波点集。中间:噪声点集。右图:点集受到噪声和异常值的阻碍。 

5、变密度

        下图说明了算法在具有均匀质量属性的点集上相对于可变密度的行为。由于该算法更加重视密集采样区域,这转化为密集采样区域上的较小边缘。在稀疏采样的区域上,该算法最初通过一个孤立的顶点对每个点进行近似,然后逐渐用边对这些点进行近似。

6、混合维度

        描绘了对一组线段和实心区域进行采样的输入点集。根据输出中的目标点数,实体区域由一组均匀采样的孤立顶点近似。

7、可变质量

        质量属性提供了一种调整每个点的重要性以进行近似的方法。图描述了阈值处理后灰度图像的重建,其中像素的灰度被用作质量属性。

        可变质量。左:输入灰度图像。中:阈值处理后的图像,以减少用作质量为非零的点的像素数。右:最终重建。 

8、它是如何工作的?

        这里要解决的任务是从R2中的噪声点集S重建一个形状,即给定平面上的一个点集,找到一组点和线段(更正式地说,一个0-1单纯形复形),它最接近S。

        近似误差来自几何测度之间的最优传输理论。更具体地说,输入点集被视为离散测度,即一组逐点质量。目标是找到一个0-1单纯形复杂体,其中边是分段均匀连续测度的支撑(即线密度质量),顶点是离散测度的支撑。在我们的上下文中,近似输入点集转化为用由线段和点组成的另一种测度来近似输入离散测度。

8.1、Waterstone距离

        直观地说,最优传输距离(在我们的上下文中为Wasserstein-2距离)测量将输入度量传输到三角测量的顶点和边上所需的工作量,其中度量在每个边上被约束为均匀(且大于或等于零),在每个顶点上仅大于或等于0。请注意,Wasserstein距离是对称的。

        当三角测量的所有顶点与输入点重合时(在完全初始化后),由于每个输入点免费重新定位到一个顶点,并且重建仅由孤立的顶点进行,因此总传输成本为零。

        现在假设输入点集由在线段上均匀采样的10个点(每个点的质量为1)组成,并且三角测量包含与线段重合的单个边。尽管从点到边缘的(单侧欧几里得)距离为零(反之不为零),但从点到边的Wasserstein距离为非零,因为我们将边的质量密度约束为均匀,并且边的总质量(密度积分)等于10,即输入点的总质量。因此,输入点应在边缘上切向传输,以匹配均匀密度,输入点的最佳传输计划被描述为覆盖边缘的具有相等长度的较小线段。

        如果现在在同一边缘上均匀地采样20个点(每个点的质量为0.5),则Wasserstein距离较小(尽管总质量与以前一样为10),因为运输计划由较小的线段描述。在20个输入点具有不同质量的略微不同的配置中,最佳运输计划由小线段描述,其长度与相关输入点的质量成比例。当输入点不严格位于边缘时,运输计划既有切线分量,也有法线分量。

        换言之,当输入点密集且均匀地对输入点的边缘进行采样时,通过单个边缘很好地近似该输入点。因此,除了对称性之外,Wasserstein距离的一个优点是量化从点到边的偏差和该边上点的不均匀性。当这些异常值的质量与输入点的总质量相比很小时,该距离对异常值(远离边缘的点)也有弹性。

8.2、重建

        该算法对三角剖分进行从细到粗的简化。它首先在输入点S周围构建一个盒子,并在S的全部或子集上计算Delaunay三角剖分T0。T0是第一个输出的单形,在后续迭代中通过重复的边折叠进行简化。为了选择下一个边,对所有可行的边(即在三角剖分中既不引入重叠也不引入折叠的边)模拟边折叠算子。根据T∖e的运输计划的总成本选择下一个要折叠的边e,其中最便宜的总成本是首选。由于忽略不保持三角剖分嵌入的边会严重影响贪婪方法对最优运输的性能,因此通过添加使每个边可折叠的局部翻转过程来修改折叠算子。

        通过将每个输入点临时分配给最近的单形边来近似运输计划。在将输入点相对于边进行划分之后,如果且仅当相应的运输成本小于边两个端点中每个端点的运输成本,则临时分配给给定边的所有点将被永久分配给它。否则,每个点被分配给两个端点中最便宜的端点。重复边折叠和运输计划更新的过程,直到达到用户指定的所需顶点数量。

        在过程结束时,可以过滤掉质量较小的边缘,剩余的相关边缘和孤立顶点被报告为重建输入形状。

9、其他

        Wasserstein距离,又称Wasserstein距离、Earth-Mover距离,是一种衡量两个概率分布之间的距离的度量方法。

        在定义Wasserstein距离时,首先需要定义两个概率分布之间的所有可能的联合分布的集合。对于每一个可能的联合分布,可以从中采样得到一个样本x和y,并计算出这对样本的距离||x−y||。然后,可以计算该联合分布下样本对距离的期望值E(x,y)∼γ[||x−y||]。在所有可能的联合分布中能够对这个期望值取到的下界就是Wasserstein距离。

        直观上可以把E(x,y)∼γ[||x−y||]理解为在γ这个路径规划下把土堆P1挪到土堆P2所需要的消耗。而Wasserstein距离就是在最优路径规划下的最小消耗。

CGAL 6.0 - Optimal Transportation Curve Reconstruction: User Manual

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/222833.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

@德人合科技——天锐绿盾|电脑文件防止泄密|文件、文档、图纸、源代码等透明加密保护,防泄密软件系统

德人合科技——天锐绿盾提供了一种企业办公电脑文件防止泄密的解决方案&#xff0c;该方案对文件、文档、设计图纸、源代码等进行了透明加密保护。 pc访问地址&#xff1a; https://isite.baidu.com/site/wjz012xr/2eae091d-1b97-4276-90bc-6757c5dfedee 透明加密是一种保护文…

基于ssm生活缴费系统及相关安全技术的设计与实现论文

摘 要 互联网发展至今&#xff0c;无论是其理论还是技术都已经成熟&#xff0c;而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播&#xff0c;搭配信息管理工具可以很好地为人们提供服务。针对生活缴费信息管理混乱&#xff0c;出错率高&#xff0c;信息安全性差…

[PyTorch][chapter 7][李宏毅深度学习][深度学习简介]

前言&#xff1a; 深度学习常用的开发平台 TensorFlow torch theano caffe DSSTNE mxnet libdnn CNTK 目录&#xff1a; 1&#xff1a; 深度学习发展历史 2&#xff1a; DeepLearning 工程简介 3&#xff1a; DNN 简介 一 发展历史 二 DeepLearning 工程简介 深度学习三…

STM32--Wi-Fi插座_风扇_灯

项目需求 两个互相通信的双方&#xff0c;波特率必须相同!!!!!! 通过 ESP8266 模块&#xff0c;实现手机控制 wifi 插座 / 风扇 / 灯。 项目设计 串口 1 用于与 ESP8266 通讯&#xff0c;串口 2 连接 PC &#xff0c;用于打印 log &#xff0c;查看系统状态。 项目实现 注意&a…

【计算思维】第14届蓝桥杯省赛计算思维U12组真题试卷

第14届蓝桥杯省赛计算思维U12组真题试卷 选择题 第 1 题 单选题 晶晶在注册一个学习网站时&#xff0c;需要设置密码。 网站提示&#xff1a; 密码必须由8~16个字符组成&#xff0c;可以包含数字、大写字母、小写字母、特殊符号这4种字 符类型。 包含4种不同类型字符的…

《数据结构、算法与应用C++语言描述》-最大高度优先左高树-C++实现

左高树 完整可编译运行代码见&#xff1a;Github::Data-Structures-Algorithms-and-Applications/_26maxHblt 定义 (大顶堆和小顶堆)堆结构是一种隐式数据结构(implicit data structure)。用完全二叉树表示的堆在数组中是隐式存储的(即没有明确的指针或其他数据能够用来重塑…

数据结构从入门到入土——初识泛型

目录 一&#xff0c;包装类 1.基本数据类型和对应的包装类 2.装箱和拆箱 3.自动装箱和自动拆箱 二&#xff0c;什么是泛型&#xff1f; 三&#xff0c;引出泛型 语法 四&#xff0c;泛型类的使用 1.语法 2.类型推导(Type Inference) 五&#xff0c;裸类型(Raw Type) …

数据结构与算法:冒泡排序

原理 从前到后&#xff0c;连续相连两个数对比&#xff0c;如果前一个数大于后一个数&#xff0c;则交换。 第一次&#xff1a; arr[0] 和 arr[1] 对比&#xff0c;若arr[0] 大于 arr[1]&#xff0c; 交换两个值。 arr[1] 和 arr[2]对比&#xff0c;若arr[1] 大于 arr[2]&…

Three.js中文网1-12入门案例

Three.js中文网 <template><div id"webgl"></div> </template><script setup> import * as THREE from three; import { OrbitControls } from three/addons/controls/OrbitControls.js;// 创建3D场景对象Scene const scene new THR…

智能优化算法应用:基于原子搜索算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于原子搜索算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于原子搜索算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.原子搜索算法4.实验参数设定5.算法结果6.…

Rocket MQ 架构介绍

文章目录 为什么选择Rocket MQ基本概念优点缺点架构图编程模型发送者发送消息固定步骤消费者消费消息固定步骤 为什么选择Rocket MQ Rocket MQ是阿帕奇顶级的开源项目&#xff0c;由阿里开发并开源。它的研发背景是Active MQ与Kafka不能很好的解决当时的业务场景。官网上是这么…

JVM调优:参数(学习笔记)

一、jvm的运行参数 标准参数 -help、-version、-D参数 jvm的标准参数&#xff0c;一般都是很稳定的&#xff0c;在未来的JVM版本中不会改变&#xff0c;可以使用java -help 检索出所有的标准参数。 通过以下命令查看&#xff1a; 命令&#xff1a;java -help 可以看到我们经常…

react经验8:使用antd的checkbox实现全选与半选控制

预期实现的效果 列表项部分选中时&#xff0c;checkall处于半选状态&#xff0c;点击checkall要么全选&#xff0c;要么全不选。 实现步骤 列表项类型 declare type TableRow {key: Keytitle: stringisSelected?: boolean }示范数据 const [tabledata, setTabledata] u…

一篇文章讲透TCP/IP协议

1 OSI 7层参考模型 2 实操连接百度 nc连接百度2次&#xff0c;使用命令netstat -natp查看就会重新连接一次百度 请求百度 3 三次握手、socket 应用层协议控制长连接和短连接 应用层协议->传输控制层&#xff08;TCP UDP&#xff09;->TCP&#xff08; 面向连接&am…

流程控制之条件判断

目录 流程控制之条件判断 2.1.if语句语法 2.1.1单分支结构 2.1.2双分支结构 2.1.3多分支结构 2.2.案例 例一: 例2: 例3: 例4: 例5: 例6: 例7: 例8: 例9: 2.3.case多条件判断 2.3.1.格式 2.3.2.执行过程 例10: 流程控制之条件判断 2.1.if语句语法 2.1.1单分…

Linux ed命令教程:如何使用ed命令编辑文本文件(附案例详解和注意事项)

Linux ed命令介绍 ed命令是Linux中的一个简单文本编辑器。它是一种基于行的文本编辑器&#xff0c;用于创建、修改和操作文本文件。它是Unix中最早的编辑器&#xff0c;后来被vi和emacs文本编辑器所取代。 Linux ed命令适用的Linux版本 ed命令在大多数Linux发行版中都可以使…

【Docker五】使用Harbor搭建Docker私有仓库

目录 一、harbor概述 1、harbor概念&#xff1a; 2、harbor的特性 3、harbor的组件&#xff1a; 二、harbor实验&#xff1a; 1、搭建harbor 2、远程主机使用docker-harbor&#xff1a; 3、镜像同步&#xff1a; 一、harbor概述 1、harbor概念&#xff1a; harbor&…

C_11练习题答案

一、单项选择题(本大题共20小题,每小题2分,共40分。在每小题给出的四个备选项中,选出一个正确的答案,并将所选项前的字母填写在答题纸的相应位置上。) 以下叙述中正确的是(C)A.C语言不是一种高级语言 B.C语言不用编译就能被计算机执行 C.C语言能够直接访问物理地址和进行位…

ES日志分析在Win系统上的安装和使用

Es日志分析三件套ElasticSearch、Kibana、logstash。 ElasticSearch 下载 官方下载地址 选择自己想要的版本下载即可。这个地方有可能下载会比较慢。可以结合迅雷做下载。 分词器下载 官方分词器下载 如果GIthub加载不出来。可以看看我的这个文章GitHub上不去怎么办&…

【C++练级之路】【Lv.4】类和对象(下)(初始化列表,友元,static成员,编译器的优化)

目录 一、再谈构造函数1.1 构造函数体赋值1.2 初始化列表1.3 explicit关键字 二、static成员2.1 概念2.2 特性 三、友元3.1 引入3.2 友元函数3.2.1 概念3.2.2 特性 3.3 友元类3.3.1 概念3.3.2 特性 四、内部类4.1 概念4.2 特性 五、匿名对象六、编译器的优化6.1 传参优化6.1.1 …