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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SWPU NSS新生赛

&#x1f60b;大家好&#xff0c;我是YAy_17&#xff0c;是一枚爱好网安的小白&#xff0c;正在自学ing。 本人水平有限&#xff0c;欢迎各位大佬指点&#xff0c;一起学习&#x1f497;&#xff0c;一起进步⭐️。 ⭐️此后如竟没有炬火&#xff0c;我便是唯一的光。⭐️ 最近…

网页图标素材免费下载网站

这里是几个可以免费下载网页图标素材的的网站。这些个网站里的图表和素材&#xff0c;应该是都可以免费下载的。&#xff08;至少我下载了几个素材是没有花钱的&#xff09; Flaticon iconArchive freepik 4. iconmonstr 5. Icons and Photos For Everything 如果想下载图片&a…

在项目中,使用drawio创建一个共享协作看板

在项目中&#xff0c;使用drawio创建一个共享协作看板 drawio是一款强大的图表绘制软件&#xff0c;支持在线云端版本以及windows, macOS, linux安装版。 如果想在线直接使用&#xff0c;则直接输入网址draw.io或者使用drawon(桌案), drawon.cn内部完整的集成了drawio的所有功…

【C语言(十一)】

C语言内存函数 一、memcpy使用和模拟实现 void * memcpy ( void * destination, const void * source, size_t num ); • 函数memcpy从source的位置开始向后复制num个字节的数据到destination指向的内存位置。 • 这个函数在遇到 \0 的时候并不会停下来。 • 如果sourc…

【每日一题】【12.14】2132.用邮票贴满网格图

&#x1f525;博客主页&#xff1a; A_SHOWY&#x1f3a5;系列专栏&#xff1a;力扣刷题总结录 数据结构 云计算 数字图像处理 力扣每日一题_ 2132. 用邮票贴满网格图https://leetcode.cn/problems/stamping-the-grid/ 今天的每日一题又是一道恶心的困难题目&#xff0c;花…

【数据结构期末复习】完善中

文章目录 二叉树的三种遍历方式怎么看遍历结果相关题目&#xff1a;已知一颗二叉树的后续遍历序列为&#xff1a;GFEDCBA;中序遍历序列为&#xff1a;FGAEBDC。画出这棵二叉树思路代码版 先序线索树二叉树转树、或森林树转二叉树二叉树转树二叉树转森林森林转二叉树 二叉树的三…

Java之BigDecimal详解

一、BigDecimal概述 Java在java.math包中提供的API类BigDecimal&#xff0c;用来对超过16位有效位的数进行精确的运算。双精度浮点型变量double可以处理16位有效数&#xff0c;但在实际应用中&#xff0c;可能需要对更大或者更小的数进行运算和处理。一般情况下&#xff0c;对…

阿里云人工智能平台PAI多篇论文入选EMNLP 2023

近期&#xff0c;阿里云人工智能平台PAI主导的多篇论文在EMNLP2023上入选。EMNLP是人工智能自然语言处理领域的顶级国际会议&#xff0c;聚焦于自然语言处理技术在各个应用场景的学术研究&#xff0c;尤其重视自然语言处理的实证研究。该会议曾推动了预训练语言模型、文本挖掘、…

【基于卷积神经网络的疲劳检测与预警系统的设计与实现】

基于卷积神经网络的疲劳检测与预警系统的设计与实现 引言数据集介绍技术与工具1. OpenCV2. TensorFlow3. 卷积神经网络&#xff08;CNN&#xff09; 系统功能模块1. 视频采集模块2. 图像预处理模块3. 人脸识别模块4. 疲劳程度判别模块5. 报警模块 系统设计创新点1. 实时监测与预…

js解析.shp文件

效果图 原理与源码 本文采用的是shapefile.js工具 这里是他的npm地址 https://www.npmjs.com/package/shapefile 这是他的unpkg地址&#xff0c;可以点开查看源码 https://unpkg.com/shapefile0.6.6/dist/shapefile.js 这个最关键的核心问题是如何用这个工具&#xff0c;网上…

如何正确使用缓存来提升系统性能

文章目录 引言什么时候适合加缓存&#xff1f;示例1示例2&#xff1a;示例3&#xff1a; 缓存应该怎么配置&#xff1f;数据分布**缓存容量大小&#xff1a;**数据淘汰策略 缓存的副作用总结 引言 在上一篇文章IO密集型服务提升性能的三种方法中&#xff0c;我们提到了三种优化…

如何在iPad Pro上实现SSH远程连接服务器并进行云端编程开发【内网穿透】

文章目录 前言1. 在iPad下载Code APP2.安装cpolar内网穿透2.1 cpolar 安装2.2 创建TCP隧道 3. iPad远程vscode4. 配置固定TCP端口地址4.1 保留固定TCP地址4.2 配置固定的TCP端口地址4.3 使用固定TCP地址远程vscode 前言 本文主要介绍开源iPad应用IDE如何下载安装&#xff0c;并…

京微齐力:基于H7的平衡控制系统(一、姿态解析)

目录 前言一、关于平衡控制系统二、实验效果三、硬件选择1、H7P20N0L176-M2H12、MPU6050 四、理论简述五、程序设计1、Cordic算法2、MPU6050采集数据3、fir&iir滤波4、姿态解算 六、资源消耗&工程获取七、总结 前言 很久之前&#xff0c;就想用纯FPGA做一套控制系统。可…

9.2 Linux LED 驱动开发

一、Linux 下的 LED 驱动原理 Linux 下的任何驱动&#xff0c;最后都是要配置相应的硬件寄存器。 1. 地址映射 MMU 全称叫做 MemoryManage Unit&#xff0c;也就是内存管理单元。 现在的 Linux 支持无 MMU 处理器。MMU 主要完成的功能为&#xff1a; 1、完成虚拟空间到物理空间…

香港科技大学数据建模(MSc DDM)硕士学位项目(2024年秋季入学)招生宣讲会-四川大学专场

时间&#xff1a;2023 年 12 月 26 日&#xff08;周二&#xff09; 14:30 地点&#xff1a;四川大学望江校区基础教学楼 C 座 102 嘉宾教授&#xff1a;潘鼎 教授 项目旨在培养科学或工程背景的学员从数据中提取信息的数据建模能力&#xff0c;训练其拥有优秀的解难和逻辑思…

旅游景区文旅地产如何通过数字人开启数字营销?

随着元宇宙的发展&#xff0c;为虚实相生的营销带来更多的可能性。基于虚拟世界对于现实世界的模仿&#xff0c;通过构建沉浸式数字体验&#xff0c;增强现实生活的数字体验&#xff0c;强调实现真实体验的数字化&#xff0c;让品牌结合数字人开启数字化营销。 *图片源于网络 …

谷歌浏览器怎么关闭自动更新?

文章目录 一、方式一 谷歌浏览器安装完成后&#xff0c;每天都会自动更新到最新的版本&#xff0c;但是对于有些程序的驱动&#xff0c;浏览器一更新就不能自动启动浏览器&#xff0c;会给我们带来很多困扰。下面我们介绍怎么将谷歌浏览器自动更新关闭&#xff0c;如果需要更新…

# 和 $ 的区别②

上节博客说了使用 # 的时候,如果参数为 String ,会自动加上单引号 但是当参数为String 类型的时候,也有不需要加单引号的情况,这时候用 # 那就会出问题 比如根据 升序(asc) 或者 降序(desc) 查找的时候,加了单引号那就会报错 这个时候我们就只能使用 $ 如果看不懂代码,就去…

Android Studio实现俄罗斯方块

文章目录 一、项目概述二、开发环境三、详细设计3.1 CacheUtils类3.2 BlockAdapter类3.3 CommonAdapter类3.4 SelectActivity3.5 MainActivity 四、运行演示五、项目总结 一、项目概述 俄罗斯方块是一种经典的电子游戏&#xff0c;最早由俄罗斯人Alexey Pajitnov在1984年创建。…

Rask AI引领革新,推出多扬声器口型同步技术,打造本地化内容新纪元

“ Rask AI是一个先进的AI驱动视频和音频本地化工具&#xff0c;旨在帮助内容创作者和公司快速、高效地将他们的视频转换成60多种语言。通过不断创新和改进产品功能&#xff0c;Rask AI正塑造着未来媒体产业的发展趋势。 ” 在多语种内容创作的新时代&#xff0c;Rask AI不断突…