当前位置: 首页 > news >正文

CGAL 点云上采样

目录

  • 一、算法原理
    • 1、主要函数
    • 2、参数解析
  • 二、代码实现
  • 三、结果展示

一、算法原理

  该方法对点集进行逐步上采样,同时根据法向量信息来检测边缘点,需要输入点云具有法线信息。在点云空洞填充和稀疏表面重建中具有较好的应用。

1、主要函数

头文件

#include <CGAL/edge_aware_upsample_point_set.h> // 上采样

函数

OutputIterator CGAL::edge_aware_upsample_point_set  ( const PointRange &  points,  OutputIterator  output,  const NamedParameters &  np = parameters::default_values()  ) 

  这种方法逐步向上采样点集,同时接近边缘奇点(通过法线变化检测),这从输入点集产生一个更密集的点集。这在基于点的渲染、孔填充和稀疏表面重建中有应用。点的法线需要作为输入。

  • sharpness_angle(s_angle):控制输出结果的平滑度,值越大越平滑,取值范围[0,90]。
  • edge_sensitivity(edge_s): 边缘的敏感性取值范围[0,1],边缘敏感度越大,在尖锐边缘处插入点的有限度越高
  • neighbor_radius(n_radius) :邻域点的个数,如果提供,查询点的邻域是用一个固定的球面计算的半径,而不是固定数量的邻居。在这种情况下,参数k用于限制每个球邻域返回点的数量(避免高密度区域的点过多)
  • number_of_output_points(n_out)) 上采样后的点数

2、参数解析

edge_sensitivity
   此参数控制新点插入的位置。边缘敏感值越大,沿尖锐特征插入点的优先级越高。如下图所示,想要在尖锐的特征上插入更多的点时,高值是可取的,这些地方的局部梯度很高,如尖点、折痕和角等。相反,当edge_sensitivity设置为0时,点是均匀插入的。取值范围为[0,1]。
在这里插入图片描述
sharpness_angle
   这个参数控制尖锐特征的平滑程度。
在这里插入图片描述
neighbor_radius
   通常,采样点的邻域至少应该包括一个相邻采样点环。使用小的邻域可能无法插入新的点。使用大的邻域可以填补小的洞,但插入边缘的点可能是不规则的。如果该参数值设置为默认值或小于零,函数将使用邻域点的密度进行估计。
在这里插入图片描述

二、代码实现

#include <vector>
#include <fstream>
#include <CGAL/Simple_cartesian.h>
#include <CGAL/IO/read_points.h>
#include <CGAL/IO/write_points.h>
#include <CGAL/edge_aware_upsample_point_set.h> // 上采样
// types
typedef CGAL::Simple_cartesian<double> Kernel;
// 用于存储点坐标和法向量的pair容器
typedef std::pair<Kernel::Point_3, Kernel::Vector_3> PointVectorPair;int main(int argc, char* argv[])
{const std::string input_filename = CGAL::data_file_path("cgal//before_upsample.xyz");const char* output_filename("cgal//after_upsample.xyz");// -----------------------读取包含点坐标和法向量的.xyz点云-------------------std::vector<PointVectorPair> points;if (!CGAL::IO::read_points(input_filename,std::back_inserter(points),CGAL::parameters::point_map(CGAL::First_of_pair_property_map<PointVectorPair>()).normal_map(CGAL::Second_of_pair_property_map<PointVectorPair>()))){std::cerr << "Error: cannot read file " << input_filename << std::endl;return -1;}// ---------------------------------参数设置---------------------------------const double s_angle = 25;                   // 平滑度,值越大越平滑,取值范围[0,90]const double edge_s = 0;                     // 边缘的敏感性取值范围[0,1]const double n_radius = 0.25;                // 邻域点搜索半径const std::size_t n_out = points.size() * 10; // 上采样后的点数// ----------------------------------上采样----------------------------------CGAL::edge_aware_upsample_point_set<CGAL::Parallel_if_available_tag>(points,std::back_inserter(points),CGAL::parameters::point_map(CGAL::First_of_pair_property_map<PointVectorPair>()).normal_map(CGAL::Second_of_pair_property_map<PointVectorPair>()).sharpness_angle(s_angle).        // 控制输出结果的平滑度,值越大越平滑,取值范围[0,90]。edge_sensitivity(edge_s).        // 边缘的敏感性取值范围[0,1],边缘敏感度越大,在尖锐边缘处插入点的有限度越高neighbor_radius(n_radius).       // 邻域点的个数,如果提供,查询点的邻域是用一个固定的球面计算的半径// 而不是固定数量的邻居。在这种情况下,参数k用于限制每个球邻域返回点的数量(避免高密度区域的点过多)number_of_output_points(n_out)); // 上采样后的点数std::cout << "上采样完毕!!!" << std::endl;// ----------------------------------保存结果--------------------------------if (!CGAL::IO::write_points(output_filename, points,CGAL::parameters::point_map(CGAL::First_of_pair_property_map<PointVectorPair>()).normal_map(CGAL::Second_of_pair_property_map<PointVectorPair>()).stream_precision(6))){std::cerr << "保存失败!!!" << std::endl;return -1;}	return 0;
}

三、结果展示

1、原始点云
在这里插入图片描述
2、上采样
在这里插入图片描述

相关文章:

CGAL 点云上采样

目录一、算法原理1、主要函数2、参数解析二、代码实现三、结果展示一、算法原理 该方法对点集进行逐步上采样&#xff0c;同时根据法向量信息来检测边缘点&#xff0c;需要输入点云具有法线信息。在点云空洞填充和稀疏表面重建中具有较好的应用。 1、主要函数 头文件 #inclu…...

阿里云短信验证码实战

一、创建阿里云短信权限用户 1、登陆阿里云之后我们点击头像&#xff0c;接着点击AccessKey: 2、选择开始使用子用户 &#xff1a; 3、我们先要创建一个用户组&#xff1a; 4、依次点击新建的用户组——授权管理&#xff0c;给用户组授权&#xff0c;开通短信验证码服务…...

Android APP隐私合规检测工具Camille使用

目录一、简介二、环境准备常用使用方法一、简介 现如今APP隐私合规十分重要&#xff0c;各监管部门不断开展APP专项治理工作及核查通报&#xff0c;不合规的APP通知整改或直接下架。camille可以hook住Android敏感接口&#xff0c;检测是否第三方SDK调用。根据隐私合规的场景&a…...

手把手学会DFS (递归入门)

目录 算法介绍 递归实现指数型枚举 递归实现排列型枚举 递归实现组合型枚举 算法介绍 &#x1f9e9;DFS 即 Depth First Search &#xff0c;中文又叫深度优先搜索&#xff0c;是一种沿着树的深度对其进行遍历&#xff0c;直到尽头之后再进行回溯&#xff0c;再走其他路线的…...

由《三体》太阳文明末日场景想到的……

《三体》电视剧正在热播&#xff0c;热度持续不退&#xff0c;豆瓣评分8.6&#xff0c;基本已经预定年度口碑最高的科幻题材剧&#xff1b;除了在国内多个平台播出外&#xff0c;还走出国门&#xff0c;成功“出海”&#xff0c;《人民日报》两会特刊都予以了高度赞扬。 上图红…...

es6的Proxy与Reflect

Proxy是在对目标对象的读取时&#xff0c;架设一层拦截&#xff0c;可以在读取对象中的任意一个属性时做一些额外的操作 Proxy与Object.defineProperty方式设置setter、getter方法不同的是&#xff0c;Proxy是对目标对象的整体拦截&#xff0c;而Object.defineProperty注重对对…...

Linux环境部署vue项目 + nginx访问(包含nginx配置简介)

1、本地打包、上传 # 打包命令不同项目有略微差别&#xff0c;核心命令 npm run build# 我们项目前端给配了测试、生产环境&#xff0c;测试环境打包命令是 npm run build:stage# 建议先看一下项目的README文件打包之后&#xff0c;得到一个文件夹&#xff0c;一般叫dist、也有…...

到底什么是跨域,如何解决跨域(常见的几种跨域解决方案)?

文章目录1、什么是跨域2、解决跨域的几种方案2.1、JSONP 方式解决跨域2.2、CORS 方式解决跨域&#xff08;常见&#xff0c;通常仅需服务端修改即可&#xff09;2.3、Nginx 反向代理解决跨域&#xff08;推荐使用&#xff0c;配置简单&#xff09;2.4、WebSocket 解决跨域2.5、…...

pm3包1.4版本发布----一个用于3组倾向性评分的R包

目前&#xff0c;本人写的第二个R包pm3包的1.4版本已经正式在CRAN上线&#xff0c;用于3组倾向评分匹配&#xff0c;只能3组不能多也不能少。 可以使用以下代码安装 install.packages("pm3")什么是倾向性评分匹配&#xff1f;倾向评分匹配&#xff08;Propensity Sc…...

没有关系的话,那就去建立关系吧

今天给大家分享一道链表的好题--链表的深度拷贝&#xff0c;学会这道题&#xff0c;你的链表就可以达到优秀的水平了。力扣 先来理解一下题目意思&#xff0c;即建立一个新的单向链表&#xff0c;里面每个结点的值与对应的原链表相同&#xff0c;并且random指针也要指向新链表中…...

Vue项目

package.json : 描述这个NPM包的所有相关信息&#xff0c;包括作者、简介、包依赖、构建等信息&#xff0c;格式是严格的JSON格式。和java的maven的pom文件作用一样。 node_modules: 依赖需要下载后才能使用&#xff0c;存在依赖包的地方。使用npm install 安装依赖 babel.co…...

【webrtc】ICE 到VCMPacket的视频内存分配

ice的数据会在DataPacket 构造是进行内存分配和拷贝而后DataPacket 会传递给rtc模块处理rtc模块使用DataPacket 构造rtp包最终会给到OnReceivedPayloadData 进行rtp组帧。吊炸天的是DataPacket 竟然没有声明析构方法。RtpVideoStreamReceiver::OnReceivedPayloadData 的内存是外…...

进阶C语言——指针(二)【题目练习】

文章目录1.指针和数组概念的理解2.指针和数组笔试题解析一维数组字符数组二维数组1.指针和数组概念的理解 指针和数组 数组&#xff1a;能够存放一组相同类型的元素&#xff0c;数组的大小取决于数组的元素个数和元素类型指针&#xff1a;也是地址或指针变量&#xff0c;大小是…...

Ajax简介

Ajax简介和使用 1.简介 AJAX Asynchronous JavaScript and XML&#xff08;异步的 JavaScript 和 XML&#xff09;。 AJAX 是一种在无需重新加载整个网页的情况下&#xff0c;能够更新部分网页的技术。 Ajax 不是一种新的编程语言&#xff0c;而是一种用于创建更好更快以及…...

ChatGPT 4 测试 两数比较大小问题。

按&#xff1a; 上次用3.5 测试了ChatGPT的两数比较大小问题&#xff0c;结果失败了。我要求不能用if语句&#xff0c;它避免不了。这次终于成功了&#xff0c;看来是进步很大。对话记录如下&#xff08;英文&#xff09; MaraSun Compare two 2 numbers in C# , but IF is no…...

SSM-CRUD整合视频教程:Spring、SpringMVC、MyBatis、bootstrap、pagehelper、JSR303后端校验

1、项目说明 1.1、业务说明 SSM:SpringMVCSpringMyBatisCRUD&#xff1a; Create&#xff08;创建&#xff09;Retrieve&#xff08;查询&#xff09;Update&#xff08;更新&#xff09;Delete&#xff08;删除) 总结&#xff1a;通过SSM框架来完成一个CRUD的操作。 1.2、功…...

Linux常用命令——基于Ubuntu22.04

本文介绍了一些Linux的常用命令。为了便于快速检索命令位置&#xff0c;文章二级标题都以“命令&#xff1a;命令的作用”展示&#xff0c;有些命令会先介绍命令的几个常用参数&#xff0c;然后结合具体的操作展示命令的使用。为了便于记忆&#xff0c;也会提到命令是由哪些短语…...

Sentinel

SentinelSentinel介绍什么是Sentinel?为什么需要流量控制&#xff1f;为什么需要熔断降级&#xff1f;一些普遍的使用场景本文介绍参考&#xff1a;Sentinel官网《Spring Cloud Alibaba 从入门到实战.pdf》Sentinel下载/安装项目演示构建项目控制台概览演示之前需先明确&#…...

再也不想去字节跳动面试了,6年测开面试遭到这样打击.....

前几天我朋友跟我吐苦水&#xff0c;这波面试又把他打击到了&#xff0c;做了快6年软件测试员。。。为了进大厂&#xff0c;也花了很多时间和精力在面试准备上&#xff0c;也刷了很多题。但题刷多了之后有点怀疑人生&#xff0c;不知道刷的这些题在之后的工作中能不能用到&…...

【深度解刨C语言】符号篇(全)

文章目录一.注释二.续行符与转义符1.续行符2.转义符三.回车与换行四.逻辑操作符五.位操作符和移位操作符六.前置与后置七.字符与字符串八./和%1.四种取整方式2.取模与取余的区别和联系3./两边异号的情况1.左正右负2.左负右正九.运算符的优先级一.注释 注释的两种符号&#xff…...

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周&#xff0c;有很多同学在写期末Java web作业时&#xff0c;运行tomcat出现乱码问题&#xff0c;经过多次解决与研究&#xff0c;我做了如下整理&#xff1a; 原因&#xff1a; IDEA本身编码与tomcat的编码与Windows编码不同导致&#xff0c;Windows 系统控制台…...

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…...

UDP(Echoserver)

网络命令 Ping 命令 检测网络是否连通 使用方法: ping -c 次数 网址ping -c 3 www.baidu.comnetstat 命令 netstat 是一个用来查看网络状态的重要工具. 语法&#xff1a;netstat [选项] 功能&#xff1a;查看网络状态 常用选项&#xff1a; n 拒绝显示别名&#…...

【CSS position 属性】static、relative、fixed、absolute 、sticky详细介绍,多层嵌套定位示例

文章目录 ★ position 的五种类型及基本用法 ★ 一、position 属性概述 二、position 的五种类型详解(初学者版) 1. static(默认值) 2. relative(相对定位) 3. absolute(绝对定位) 4. fixed(固定定位) 5. sticky(粘性定位) 三、定位元素的层级关系(z-i…...

linux arm系统烧录

1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 &#xff08;忘了有没有这步了 估计有&#xff09; 刷机程序 和 镜像 就不提供了。要刷的时…...

MySQL 8.0 OCP 英文题库解析(十三)

Oracle 为庆祝 MySQL 30 周年&#xff0c;截止到 2025.07.31 之前。所有人均可以免费考取原价245美元的MySQL OCP 认证。 从今天开始&#xff0c;将英文题库免费公布出来&#xff0c;并进行解析&#xff0c;帮助大家在一个月之内轻松通过OCP认证。 本期公布试题111~120 试题1…...

Python基于历史模拟方法实现投资组合风险管理的VaR与ES模型项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档&#xff09;&#xff0c;如需数据代码文档可以直接到文章最后关注获取。 1.项目背景 在金融市场日益复杂和波动加剧的背景下&#xff0c;风险管理成为金融机构和个人投资者关注的核心议题之一。VaR&…...

20个超级好用的 CSS 动画库

分享 20 个最佳 CSS 动画库。 它们中的大多数将生成纯 CSS 代码&#xff0c;而不需要任何外部库。 1.Animate.css 一个开箱即用型的跨浏览器动画库&#xff0c;可供你在项目中使用。 2.Magic Animations CSS3 一组简单的动画&#xff0c;可以包含在你的网页或应用项目中。 3.An…...

Unity中的transform.up

2025年6月8日&#xff0c;周日下午 在Unity中&#xff0c;transform.up是Transform组件的一个属性&#xff0c;表示游戏对象在世界空间中的“上”方向&#xff08;Y轴正方向&#xff09;&#xff0c;且会随对象旋转动态变化。以下是关键点解析&#xff1a; 基本定义 transfor…...

Python训练营-Day26-函数专题1:函数定义与参数

题目1&#xff1a;计算圆的面积 任务&#xff1a; 编写一个名为 calculate_circle_area 的函数&#xff0c;该函数接收圆的半径 radius 作为参数&#xff0c;并返回圆的面积。圆的面积 π * radius (可以使用 math.pi 作为 π 的值)要求&#xff1a;函数接收一个位置参数 radi…...