压缩点云数据

news2024/11/18 7:33:12

压缩分辨率参数

  • LOW_RES_ONLINE_COMPRESSION:低分辨率的在线压缩模式,不保留颜色信息。

  • MED_RES_ONLINE_COMPRESSION:中等分辨率的在线压缩模式,不保留颜色信息。

  • HIGH_RES_ONLINE_COMPRESSION:高分辨率的在线压缩模式,不保留颜色信息。

  • LOW_RES_OFFLINE_COMPRESSION:低分辨率的离线压缩模式,不保留颜色信息。

  • MED_RES_OFFLINE_COMPRESSION:中等分辨率的离线压缩模式,不保留颜色信息。

  • HIGH_RES_OFFLINE_COMPRESSION:高分辨率的离线压缩模式,不保留颜色信息。

  • LOW_RES_ONLINE_COMPRESSION_WITH_COLOR:低分辨率的在线压缩模式,保留颜色信息。

  • MED_RES_ONLINE_COMPRESSION_WITH_COLOR:中等分辨率的在线压缩模式,保留颜色信息。

  • HIGH_RES_ONLINE_COMPRESSION_WITH_COLOR:高分辨率的在线压缩模式,保留颜色信息。

  • LOW_RES_OFFLINE_COMPRESSION_WITH_COLOR:低分辨率的离线压缩模式,保留颜色信息。

  • MED_RES_OFFLINE_COMPRESSION_WITH_COLOR:中等分辨率的离线压缩模式,保留颜色信息。

  • HIGH_RES_OFFLINE_COMPRESSION_WITH_COLOR:高分辨率的离线压缩模式,保留颜色信息。

在线压缩vs离线压缩

在线压缩和离线压缩是指在不同的应用场景下进行点云数据压缩的方式。

  1. 在线压缩:在线压缩是指在数据生成的同时进行压缩。这种压缩方式通常应用于点云数据实时采集和传输的场景。在在线压缩中,点云数据被即时地压缩,然后通过网络或其他传输方式进行实时传输或实时处理。在线压缩通常需要快速的压缩算法和较低的压缩延迟,以适应实时的数据处理需求。

  2. 离线压缩:离线压缩是指在数据生成之后进行压缩。这种压缩方式通常应用于点云数据离线存储和分析的场景。在离线压缩中,点云数据在生成之后,通过离线的方式进行压缩和存储,然后在需要的时候进行解压缩和处理。离线压缩通常对压缩速度和压缩效率有更高的要求,允许较长的压缩时间以换取更好的压缩率。

在实际应用中,选择在线还是离线压缩需要根据具体场景和需求进行权衡。在线压缩适用于实时数据采集和传输,可以减小带宽需求和传输延迟;离线压缩适用于离线数据存储和批量处理,可以节省存储空间和提高数据处理效率。根据应用需求、存储/传输条件和处理效率等方面的考虑,选择相应的压缩方式有助于最大程度地满足点云数据的存储、传输和处理需求。

压缩点云代码

#include <iostream>
#include <pcl/point_cloud.h>
#include <pcl/point_types.h>
#include <pcl/io/pcd_io.h>
#include <pcl/compression/octree_pointcloud_compression.h>

int main()
{
    // 点云数据
    pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);

    cloud->width = 128;
    cloud->height =1;
    cloud->points.resize(cloud->width * cloud->height);

    for (size_t i=0; i<cloud->size(); i++){
        cloud->points[i].x = 1024.0f * rand() / (RAND_MAX + 1.0f);
        cloud->points[i].y = 1024.0f * rand() / (RAND_MAX + 1.0f);
        cloud->points[i].z = 1024.0f * rand() / (RAND_MAX + 1.0f);
    }

    //压缩参数
    pcl::io::compression_Profiles_e compressionProfile = pcl::io::MED_RES_OFFLINE_COMPRESSION_WITH_COLOR;
    double pointResolution = 0.001;


    // 创建压缩对象
    pcl::io::OctreePointCloudCompression<pcl::PointXYZ> compress(compressionProfile,
                                                                 true, // 是否进行体素网络下采样
                                                                 0.01);// 八叉树分辨率
    // 压缩点云数据
    std::stringstream compressData;
    compress.encodePointCloud(cloud, compressData);

    // 存储压缩数据
    std::ofstream outfile("compressed_cloud.pcc");
    outfile.write((char*)compressData.str().c_str(), compressData.str().length());
    outfile.close();

    // 解码压缩数据
    pcl::PointCloud<pcl::PointXYZ>::Ptr decodeCloud(new pcl::PointCloud<pcl::PointXYZ>);
    compress.decodePointCloud(compressData, decodeCloud);

    // 将解码后的点云数据保存为PCD文件
    pcl::io::savePCDFileASCII("decoded_cloud.pcd", *decodeCloud);
    std::cout << "Point cloud compression complete." << std::endl;
    return 0;


}

 

 解压缩点云代码

#include <iostream>
#include <pcl/point_cloud.h>
#include <pcl/point_types.h>
#include <pcl/io/pcd_io.h>
#include <pcl/compression/octree_pointcloud_compression.h>


// -------------------------
// 读取保存的压缩的点云数据文件
// ------------------------
int main()
{
    // 创建一个ifstream对象,准备从文件读取数据
    std::ifstream infile("compressed_cloud.pcc");

    // 检查文件是否成功打开
    if (!infile){
        std::cerr << "Cloud not open file." << std::endl;
        return  -1;
    }

    // stringstream对象,用于存储从文件读取到的数据
    std::stringstream decompressData;
    decompressData << infile.rdbuf(); // infile.rbuf()返回文件infile的内部缓冲区指针,<< 操作符将其内容存储到decompressDate

    // 创建一个pcl::io::OctreePointCloudCompression对象,用于对点云数据压缩和解压缩
    pcl::io::OctreePointCloudCompression<pcl::PointXYZ> compress;

    // 解压缩 (解码)
    pcl::PointCloud<pcl::PointXYZ>::Ptr decodeCloud(new pcl::PointCloud<pcl::PointXYZ>);
    compress.decodePointCloud(decompressData, decodeCloud);

    // 解压缩后数据保存为PCD文件
    pcl::io::savePCDFileASCII("decode_cloud.pcd", *decodeCloud);
    std::cout << "Point cloud compression complete." << std::endl;

    return 0;


}

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

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

相关文章

Nacos架构与原理 - Nacos-Sync

文章目录 概述官网系统模块架构同步任务管理页面注册中心管理页面使用场景 概述 NacosSync 是⼀个支持多种注册中心的同步组件,基于 Spring boot 开发框架,数据层采用Spring Data JPA &#xff0c;遵循了标准的 JPA 访问规范&#xff0c;支持多种数据源存储,默认使用Hibernate…

c++11 标准模板(STL)(std::basic_ostream)(二)

定义于头文件 <ostream> template< class CharT, class Traits std::char_traits<CharT> > class basic_ostream : virtual public std::basic_ios<CharT, Traits> 类模板 basic_ostream 提供字符流上的高层输出操作。受支持操作包含有格式…

float:right 浮动布局后怎么清除浮动对后面元素的影响

1 用overflow:hidden和overflow:auto 在父元素上 2 用伪元素进行清除浮动 ::after

Ubuntu20.04LTS下安装Intel Realsense D435i驱动与ROS运行D435i节点

Ubuntu20.04LTS下安装Intel Realsense D435i驱动与ROS运行D435i节点 1&#xff1a;RealSense的SDK安装 1.1&#xff1a;更新初始化 sudo apt-get update && sudo apt-get upgrade && sudo apt-get dist-upgrade1.2&#xff1a;注册服务器的公钥 sudo apt-k…

安卓水果店的设计与实现

1.项目概述 随着科学技术和社会经济的不断提高&#xff0c;人们对服务的快捷、便利性要求也越来越高&#xff0c;从而对智能手机上的应用软件提出了更高的要求。一个基于安卓技术的水果系统能够为用户提供一个方便日常操作的便捷点餐功能,它能够满足广大手机用户的对日常水果的…

【Java可执行命令】(七)C头文件创建工具 javah:以Java本机接口(JNI)规范创建C头文件,深入解析创建工具javah ~

Java可执行命令详解之javah 1️⃣ 概念2️⃣ 优势和缺点3️⃣ 使用3.1 语法格式3.1.1 可选参数&#xff1a;-o < file>3.1.2 可选参数&#xff1a;-classpath < path>3.1.3 可选参数&#xff1a;-jni 4️⃣ 应用场景5️⃣ 实现原理6️⃣ 注意事项&#x1f33e; 总结…

win系统安装配置minio笔记

win系统安装配置minio笔记 下载win64版本的minio.exe 可以去minio官网下载&#xff0c;也可以直接在csdn下载&#xff0c;这里提供一个下载地址 https://download.csdn.net/download/ThinkPet/87976200?spm1001.2014.3001.5501配置并启动minio.exe 可以在cmd命令里执行 m…

k8s calico ipip模式详解

一、简介 Calico 是一种容器之间互通的网络方案。在虚拟化平台中&#xff0c;比如 OpenStack、Docker 等都需要实现 workloads 之间互连&#xff0c;但同时也需要对容器做隔离控制。而在多数的虚拟化平台实现中&#xff0c;通常都使用二层隔离技术来实现容器的网络&#xff0c…

毕业喽 ! ——为赋新词强说愁

文章目录 一、引言二、回首六年三、腾讯实习四、遗憾和展望 一、引言 临近毕业&#xff0c;满头思绪&#xff0c;满腔感概&#xff0c;不知从何说起&#xff0c;对离别的不舍、对学生时代即将落幕的留恋和感慨、对即将只身踏入社会的迷茫和不安。果真应验了杜甫老先生的那句话—…

MATLAB散点图绘制

clfx linspace(-3*pi,3*pi,100);y sin(x);color linspace(1,10,length(x));scatter(x,y,25,color,filled);hold onscatter(x0.25*pi,y,100,[0 0 0],*); 大部分时候处理数据还是散点图用的比较多 这里主要是scatter函数&#xff0c;用法是&#xff1a; scatter&#xff08…

华为OD机试真题 Python 实现【机房布局】【2023Q1 200分】,附详细解题思路

目录 一、题目描述二、输入描述三、输出描述四、补充说明五、解题思路六、Python算法源码七、效果展示1、输入2、输出 一、题目描述 小明正在规划一个大型数据中心机房&#xff0c;为了使得机柜上的机器都能正常满负荷工作&#xff0c;需要确保在每个机柜边上至少要有一个电箱…

pytorch3d 安装报错 RuntimeError: Not compiled with GPU support pytorch3d

安装环境 NVIDIA GeForce RTX 3090 cuda 11.3 python 3.8.5 torch 1.11.0 torchvision 0.12.0 环境安装命令 conda install pytorch1.11.0 torchvision0.12.0 torchaudio0.11.0 cudatoolkit11.3 -c pytorch安装pytorch3d参考官网链接 https://github.com/facebookresearch/p…

Java 的拷贝(深拷贝、浅拷贝)

在对象的拷贝中&#xff0c;很多初学者可能搞不清到底是拷贝了引用还是拷贝了对象。在拷贝中这里就分为引用拷贝、浅拷贝、深拷贝进行讲述。 引用拷贝 引用拷贝会生成一个新的对象引用地址&#xff0c;但是两个最终指向依然是同一个对象。如何更好的理解引用拷贝呢&#xff1…

工具类之打印表格ByList

前言 昨天在测试应用的时候&#xff0c;因为要查看数据库表里面的数据&#xff0c;但是又懒得去看数据库里面查找那张表&#xff0c;反而直接代码查看更方便。于是做了一个打印List的工具类&#xff0c;可以将List里面的数据进行打印成一个表格展示&#xff0c;List里面的元素…

CH543乐得瑞单C口显示器方案(LDR6020)

首先显示器的种类很多&#xff0c;有桌面显示器&#xff0c;便携显示器&#xff0c;智能显示器&#xff0c;甚至AR眼镜也可以算是一个微型显示器。以往的显示器传输视频信号多为VGA和HDMI,当然DP也有&#xff0c;只是占少数&#xff0c;再早之前还有模拟信号接口等等&#xff0…

牛客网基础语法91~100题

牛客网基础语法91~100题&#x1f618;&#x1f618;&#x1f618; &#x1f4ab;前言&#xff1a;今天是咱们第九期刷牛客网上的题目。 &#x1f4ab;目标&#xff1a;对短除法的使用&#xff0c;对函数的递归使用熟练。 &#x1f4ab;鸡汤&#xff1a;绊脚石乃是进身之阶。先干…

手机便签软件推荐 有没有什么好用的手机便签软件app

在外出需要记事的时候&#xff0c;很多人会使用手机上的便签工具来完成。那手机便签软件推荐哪个比较好&#xff0c;有没有好用的手机便签软件app推荐呢&#xff1f;下面小编就为大家推荐一些用起来体验很不错的手机便签app软件。 一、敬业签 敬业签具备多种便签记事和提醒方式…

使用Spring Boot、MyBatis Plus和Elasticsearch配置的简单示例

下面是一个使用Spring Boot、MyBatis Plus和Elasticsearch的简单示例&#xff1a; 首先&#xff0c;在pom.xml文件中添加以下依赖&#xff1a; <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-elast…

本地文件如何复制到服务器上 180.188.22.X

当我们在远程服务器时&#xff0c;有时会想要直接在本地电脑上复制文本到服务器上&#xff0c;或者把服务器上的文本文件复制到电脑上却无法进行操作。当我们遇到这样的情况&#xff0c;应该如何处理呢。系统如果是Windows的情况下&#xff0c;可以进行以下操作&#xff1a;打开…

【MySQL】不允许你不了解如何分组数据

&#x1f3ac; 博客主页&#xff1a;博主链接 &#x1f3a5; 本文由 M malloc 原创&#xff0c;首发于 CSDN&#x1f649; &#x1f384; 学习专栏推荐&#xff1a;LeetCode刷题集&#xff01; &#x1f3c5; 欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指…