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;信息安全性差…

XXL-JOB的一些概念

XXL-JOB任务调度中心 路由策略 路由策略&#xff1a;当执行器集群部署时&#xff0c;选择哪一台机器进行执行job任务 第一个&#xff1a; 当选择该策略时&#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种不同类型字符的…

英语六级作文好句

目录 开头 中间 结尾 开头 1. It has triggered heat discussion 2. some students think that .... while other think that.... I,m in line with/I firmly convinced that the former one/the later one. 3. With the proliferation of... 4. It is of great importance…

《数据结构、算法与应用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) …

​xml.dom.minidom --- 最小化的 DOM 实现​

源代码: Lib/xml/dom/minidom.py xml.dom.minidom 是文档对象模型接口的最小化实现&#xff0c;具有与其他语言类似的 API。 它的目标是比完整 DOM 更简单并且更为小巧。 对于 DOM 还不十分熟悉的用户则应当考虑改用 xml.etree.ElementTree 模块来进行 XML 处理。 警告 xml.do…

PHP中如何进行单元测试和集成测试?

在 PHP 中&#xff0c;进行单元测试和集成测试通常使用测试框架来实现。以下是两个常用的 PHP 测试框架以及简要的介绍&#xff1a; PHPUnit&#xff08;单元测试&#xff09;&#xff1a; 安装 PHPUnit&#xff1a; 可以使用 Composer 安装 PHPUnit。 composer require --dev …

mysql binlog_ignore_db参数的效果详解

​ 我们知道 binlog 会记录数据库所有执行的 DDL 和 DML 语句(除了数据查询语句select、show等)。 我们可以在mysql配置文件中关闭binlog [mysqld] skip-log-bin注意默认情况下会记录所有库的操作,那么如果我们有另类需求,比如说只让某个库记录 binglog 或排除某个库记录…

<DB2>《DB2表空间状态说明列表》

十六进制值十进制值状态State0x00正常&#xff08;请参阅 sqlutil.h 中的定义 SQLB_NORMAL&#xff09;Normal (see the definition SQLB_NORMAL in sqlutil.h)0x11停顿&#xff1a;SHAREQuiesced: SHARE0x22停顿&#xff1a;UPDATEQuiesced: UPDATE0x44停顿&#xff1a;EXCLUS…

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

原理 从前到后&#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…

openCV图像SIFT特征

SIFT&#xff08;尺度不变特征变换&#xff09;是一种用于计算图像局部特征的算法&#xff0c;它对图像的尺度、旋转和亮度变化具有不变性。SIFT特征在计算机视觉领域被广泛应用于目标识别、图像配准、三维重建等任务中。 SIFT特征的计算包括以下几个步骤&#xff1a; 尺度空…

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

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

C++ 教程 - 03 函数篇

文章目录 函数定义函数案例函数xx 函数定义 函数是将一部分代码进行封装&#xff0c;便于重用、维护&#xff0c;使得代码更加的整洁。 定义函数格式 类型 函数名&#xff08;形参类型 形参名称&#xff0c;…&#xff09;{ 函数体&#xff1b; return 类型值&#xff1b;} 函…

Android RecycleView实现平滑滚动置顶和调整滚动速度

目录 一、滑动到指定位置&#xff08;target position&#xff09;并且置顶 1. RecycleView默认的几个实现方法及缺陷 2. 优化源码实现置顶方案 3. 其他实现置顶的方案 二、调整平移滑动调速 在实际项目里&#xff0c;RecycleView 可以说是我们最常用到的组件&#xff0c;…

检查网络连通性的几种方法

检查网络连通性的几种方法 检查网络连通性是确保计算机或设备能够与其他设备或互联网通信的重要步骤。以下是一些用于检查网络连通性的方法&#xff1a; Ping命令&#xff1a; 在命令提示符&#xff08;Windows&#xff09;或终端&#xff08;Linux/macOS&#xff09;中&#…