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
相关文章:

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

使用Docker本地安装部署Draw.io绘图工具并实现远程访问协作办公
前言 提到流程图,大家第一时间可能会想到Visio,不可否认,VIsio确实是功能强大,但是软件为收费,并且因为其功能强大,导致安装需要很多的系统内存,并且是不可跨平台使用。所以,今天给…...

流程图、泳道图的介绍和示例分享,以及自定义元件库的介绍
目录 一. 流程图介绍 二. Processon使用 新建一个流程图 图形的使用 三. 流程图示例 登录界面 门诊业务流程图 住院业务流程图 药房业务流程图 会议OA流程图 四. 泳道图介绍 五. 自定义元件库 5.1 新建一个元件库 5.2 创建元件 5.3 使用自定义元件库 一. 流程图介…...

RabbitMq的详细使用
消息队列RabbitMQ详细使用 文章目录 消息队列RabbitMQ详细使用MQ 的相关概念什么是MQ为什么要用MQMQ 的分类MQ 的选择 RabbitMQRabbitMQ 的概念四大核心概念各个名词介绍安装RabbitMQWeb管理界面及授权操作Docker 安装Hello world简单示例 Work Queues轮训分发消息消息应答自动…...

软件设计师——软件工程(二)
📑前言 本文主要是【软件工程】——软件设计师——软件工程的文章,如果有什么需要改进的地方还请大佬指出⛺️ 🎬作者简介:大家好,我是听风与他🥇 ☁️博客首页:CSDN主页听风与他 🌄…...

阿里云RDS MySQL 数据如何快速同步到 ClickHouse
云数据库 RDS MySQL 和 云数据库 ClickHouse 是阿里云推出的两个备受欢迎的数据库解决方案,它们为用户提供了可靠的数据存储方案、分析数仓方案,本文介绍如何快速将 RDS MySQL 的数据同步到云数据库 ClickHouse。 如何快速将RDSMySQL的数据同步到云数据库…...

HINet技术要点
《HINet: Half Instance Normalization Network for Image Restoration》发表于CVPR2021,是旷视科技&复旦大学&北大在图像复原方面的的最新进展,所提方案取得了NTIRE2021图像去模糊Track2赛道冠军。 下面谈谈该文章的主要技术点。 1. HIN&#…...

IntelliJ IDEA2023学习教程
详细介绍idea开发工具及使用技巧 1. 2023版安装1.1删除老版本1.2 下载及安装 3.快捷技巧4. 创建各种model 1. 2023版安装 1.1删除老版本 如果以前装有idea需要先删除,以避免冲突,在idea安装目录/bin/Uninstall.exe双击1.2 下载及安装 最新版本 https:/…...
MATLAB基础应用精讲-【数模应用】神经网络(补充篇)
目录 前言 几个相关概念 反向传播 梯度下降 损失函数 优化函数...
洛谷题单【算法1-7】搜索
P1135 奇怪的电梯 一开始以为深搜肯定没问题,从a点出发,衍生出一个二叉树,遍历所有情况就好了,但是会重复,所以加了一个vis防止重复,但是只拿了64pts,因为有可能某个点并不是最短被到达的&…...

WordPress主题Lolimeow v8.0.1二次元风格支持erphpdown付费下载
WordPress国人原创动漫主题lolimeow免费下载 lolimeow是一款WordPress国人原创主题,风格属于二次元、动漫、可爱萝莉风,带有后台设置,支持会员中心。该主题为免费主题。 1.侧栏/无侧栏切换! 2.会员中心(配套Erphpdown…...
WTN6xxx系列OTP语音芯片:智能语音解决方案的可靠之选
在智能语音交互领域,唯创知音的WTN6xxx系列OTP语音芯片以其独特的特性成为声音播放提示IC的可靠之选。本文将深入探讨WTN6xxx系列OTP语音芯片的应用优势,展示其在各个方面的卓越性能。 一、低成本、高性能 1.经济实惠: WTN6xxx系列OTP语音芯…...

腾讯云Elasticsearch Service产品体验
基本介绍 产品概述 腾讯云 Elasticsearch Service(ES)是云端全托管海量数据检索分析服务,拥有高性能自研内核,集成X-Pack。ES 支持通过自治索引、存算分离、集群巡检等特性轻松管理集群,也支持免运维、自动弹性、按需…...

SQLE 3.0 部署实践
来自 1024 活动的投稿系列 第一篇《SQLE 3.0 部署实践》 . 作者:张昇,河北东软软件有限公司高级软件工程师,腾讯云社区作者。 爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。 本文共 32…...

爬虫的分类
爬虫的分类 网络爬虫按照系统结构和实现技术,大致可分为4类,即通用网络爬虫、聚焦网络爬虫、增量网络爬虫和深层次网络爬虫。 1.通用网络爬虫:搜索引擎的爬虫 比如用户在百度搜索引擎上检索对应关键词时,百度将对关键词进行分析…...

简说vue-router原理
vue-router原理 hash模式 实现原理 改变描点监听描点变化 history模式 实现原理 改变url监听url变化 abstracthash 和 history 模式有什么区别? url 不一样原理不同 其他总结扩展 history 出现404错误 vue-router原理 vue-router是vue项目的重要组成部分&#x…...
什么是 Spring 框架?
Spring 框架是一个开源的、轻量级的企业级应用框架,用于构建 Java 应用程序。它提供了全面的基础设施支持,以简化企业级应用的开发。Spring 的核心目标是通过促进良好的设计原则和编程习惯来提高 Java 开发人员的效率和系统的可维护性。 Spring 框架的主…...

Vue2.x源码:new Vue()做了啥
例子1new Vue做了啥?new Vue做了啥,源码解析 initMixin函数 初始化 – 初始化Vue实例的配置initLifecycle函数 – 初始化生命周期钩子函数initEvents – 初始化事件系统初始化渲染 initRender初始化inject选项 例子1 <div id"app"><div class"home&…...

iOS 借助DSYMTools工具定位到闪退的具体行数和方法名
1、下载 dSYMTools-master 工具,下载安装后,如下图: 2、通过Bugly或友盟等异常记录工具,找到闪退的内存地址和偏移量信息上图是Bugy记录的闪退信息,友盟的参考如下: 关于工具的原理和其他描述,…...

分布式解决方案与实战
分布式多线程性能调优 使用多线程优化接口 //下单业务public Object order( long userId){long start System.currentTimeMillis();//方法的开始时间戳(ms)JSONObject orderInfo remoteService.createOrder(userId);Callable<JSONObject> calla…...
前端倒计时误差!
提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...

相机从app启动流程
一、流程框架图 二、具体流程分析 1、得到cameralist和对应的静态信息 目录如下: 重点代码分析: 启动相机前,先要通过getCameraIdList获取camera的个数以及id,然后可以通过getCameraCharacteristics获取对应id camera的capabilities(静态信息)进行一些openCamera前的…...
Linux云原生安全:零信任架构与机密计算
Linux云原生安全:零信任架构与机密计算 构建坚不可摧的云原生防御体系 引言:云原生安全的范式革命 随着云原生技术的普及,安全边界正在从传统的网络边界向工作负载内部转移。Gartner预测,到2025年,零信任架构将成为超…...

C# 类和继承(抽象类)
抽象类 抽象类是指设计为被继承的类。抽象类只能被用作其他类的基类。 不能创建抽象类的实例。抽象类使用abstract修饰符声明。 抽象类可以包含抽象成员或普通的非抽象成员。抽象类的成员可以是抽象成员和普通带 实现的成员的任意组合。抽象类自己可以派生自另一个抽象类。例…...
高防服务器能够抵御哪些网络攻击呢?
高防服务器作为一种有着高度防御能力的服务器,可以帮助网站应对分布式拒绝服务攻击,有效识别和清理一些恶意的网络流量,为用户提供安全且稳定的网络环境,那么,高防服务器一般都可以抵御哪些网络攻击呢?下面…...
Go 语言并发编程基础:无缓冲与有缓冲通道
在上一章节中,我们了解了 Channel 的基本用法。本章将重点分析 Go 中通道的两种类型 —— 无缓冲通道与有缓冲通道,它们在并发编程中各具特点和应用场景。 一、通道的基本分类 类型定义形式特点无缓冲通道make(chan T)发送和接收都必须准备好࿰…...
6个月Python学习计划 Day 16 - 面向对象编程(OOP)基础
第三周 Day 3 🎯 今日目标 理解类(class)和对象(object)的关系学会定义类的属性、方法和构造函数(init)掌握对象的创建与使用初识封装、继承和多态的基本概念(预告) &a…...

《信号与系统》第 6 章 信号与系统的时域和频域特性
目录 6.0 引言 6.1 傅里叶变换的模和相位表示 6.2 线性时不变系统频率响应的模和相位表示 6.2.1 线性与非线性相位 6.2.2 群时延 6.2.3 对数模和相位图 6.3 理想频率选择性滤波器的时域特性 6.4 非理想滤波器的时域和频域特性讨论 6.5 一阶与二阶连续时间系统 6.5.1 …...

Python异步编程:深入理解协程的原理与实践指南
💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 持续学习,不断…...

uni-app学习笔记二十七--设置底部菜单TabBar的样式
官方文档地址:uni.setTabBarItem(OBJECT) | uni-app官网 uni.setTabBarItem(OBJECT) 动态设置 tabBar 某一项的内容,通常写在项目的App.vue的onLaunch方法中,用于项目启动时立即执行 重要参数: indexnumber是tabBar 的哪一项&…...