谷歌draco

简介: 前不久,谷歌开源的Draco关于点云的编码与压缩的源码,Draco 由谷歌 Chrome 媒体团队设计,旨在大幅加速 3D 数据的编码、传输和解码。因为研发团队的 Chrome 背景,这个开源算法的首要应用对象是浏览器。

前不久,谷歌开源的Draco关于点云的编码与压缩的源码,Draco 由谷歌 Chrome 媒体团队设计,旨在大幅加速 3D 数据的编码、传输和解码。因为研发团队的 Chrome 背景,这个开源算法的首要应用对象是浏览器。但既然谷歌把它开源,现在全世界的开发者可以去探索 Draco 在其他场景的应用,比如说非网页端。目前,谷歌提供了它的两个版本: JavaScript 和 C++。

Draco 可以被用来压缩 mesh 和点云数据。它还支持压缩点( compressing points),连接信息,纹理协调,颜色信息,法线( normals)以及其他与几何相关的通用属性。下面是谷歌官方发布的 Draco Mesh 文件压缩率,可以看出,它大幅优于 ZIP。

Draco 的算法既支持有损模式,也支持无损。这给普通消费者带来的好处还不太明显——毕竟大多数人对分辨率并没有强迫症,有损压缩带来的轻微画质改变完全在承受范 围之内。但对专业应用和科研应用的意义就很大了。这就好比  JPEG 之于 PNG。后者用于游戏和 VR 应用完全没有问题,降低的画质很难用肉眼察觉。但在科研点云数据中,任何信息都不能丢失。

如何使用draco?

github上简介:Draco is a library for compressing and decompressing 3D geometric meshes and point clouds. It is intended to improve the storage and transmission of 3D graphics.

(1)下载源码

git clone https://github.com/google/draco.git 

(2) cd  dracs

     mkdir build

     cmake ..

          如果提示你cmake的版本太低了,则需要升级cmake ,命令如下

            sudo add-apt-repository ppa:george-edison55/cmake-3.x

            sudo apt-get update

         如果你从来没装过cmake  则sudo apt-get install cmake(经过测试   即使装过还是用这个命令直接升级比较好)
         如果你装过cmake    则sudo apt-get upgrade

安装完后,用命令:cmake --version 查看当前的cmake版本,可以看到现在cmake的版本为3.2.2

之后就可以编译通过,make   一下傻等片刻就安装成功

那么就可以使用查看一下效果,为了可视化以下,所以还是使用强大的PCL库来对比以下,在PCL库中读取PLY文件也是有对应的函数的

class pcl::PCDReader()与class pcl::FLYReader() 分别是PCD,和FLY文件格式的接口的实现

class pcl::PCDWriter()与class pcl::FLYWriter()分别是对PCD,FLY文件写入接口的实现

查看发现它们的其他函数基本都是一样的,就是把PCD 换成FLY即可

所以我们就可以使用draco来编码FLY格式的点云数据,然后在解码生成FLY文件,再在点云库中可视化一下,并且查看编码前后编码后文件的大小,可以看看编码的效率

首先我们查看原始的文件以及它的大小3M

编码  生成了out.drc文件并查看文件大小113.KB的大小

并可视化原始点云

然后为了在可视化编码后再解码的效果,所以再查看解压后的大小为431.5KB

可视化的效果和之前的是一样的,同时为了查看有没有丢失点数,打印出来看一下,发现点云数目没有变化都是35947 data points

 总结以下,原来的文本是3M,编码后是113.KB文件,文件很小,压缩的效率非常高,为了再可视化,所以再解压,可视化的效果与原点云效果是一样的,

     

                     原点云                                                                                                                 解码后的点云

可视化的代码

#include <iostream>              //标准C++库中的输入输出的头文件
#include <pcl/io/pcd_io.h>       //PCD读写类相关的头文件
#include <pcl/point_types.h>     //PCL中支持的点类型的头文件
#include <pcl/io/ply_io.h>
#include <boost/thread/thread.hpp>
#include <pcl/visualization/pcl_visualizer.h>

int
main (int argc, char** argv)
{ 
   //创建一个PointCloud<pcl::PointXYZ>    boost共享指针并进行实例化
  pcl::PointCloud<pcl::PointXYZ>::Ptr cloud (new pcl::PointCloud<pcl::PointXYZ>);
  
  //打开点云文件
  if (pcl::io::loadPLYFile<pcl::PointXYZ> ("bun_zipper.ply", *cloud) == -1) 
  {
    PCL_ERROR ("Couldn't read file bun_zipper.ply \n");
    return (-1);
  }

std::cout << "Loaded "
            << cloud->width * cloud->height
            << " data points from bun_zipper.ply with the following fields: "
            << std::endl;

boost::shared_ptr<pcl::visualization::PCLVisualizer> viewer(new pcl::visualization::PCLVisualizer("cloud"));
viewer->addPointCloud<pcl::PointXYZ>(cloud,"cloud");

while(!viewer->wasStopped())
  {
 viewer->spinOnce(100);
boost::this_thread::sleep(boost::posix_time::microseconds(1000000));
 }
  return (0);
}

如有问题可以与我交流,同时欢迎指正,谢谢

 

微信公众号号可扫描二维码一起共同学习交流

相关文章
|
机器学习/深度学习 传感器 算法
【论文速递】AAAI2023 - BEVDepth: 用于多视图三维物体检测的可靠深度采集
【论文速递】AAAI2023 - BEVDepth: 用于多视图三维物体检测的可靠深度采集
|
网络协议 Windows
解决GitHub Pages制作的个人博客无法访问的问题
最近一段时间应该有很多小伙伴发现自己辛苦做的个人博客无法访问了吧。
|
边缘计算 开发框架 人工智能
C#/.NET/.NET Core优秀项目和框架2024年8月简报
C#/.NET/.NET Core优秀项目和框架2024年8月简报
217 0
|
SQL 分布式计算 大数据
大数据-91 Spark 集群 RDD 编程-高阶 RDD广播变量 RDD累加器 Spark程序优化
大数据-91 Spark 集群 RDD 编程-高阶 RDD广播变量 RDD累加器 Spark程序优化
165 0
|
安全 API 调度
「架构」嵌入式鸿蒙架构
**鸿蒙嵌入式架构概览** HarmonyOS,华为的分布式操作系统,应用于嵌入式设备,以微内核、跨平台能力和组件化设计著称。核心功能包括设备统一管理、分布式软总线及安全机制。特点:低时延、高安全性、易开发。优点在于灵活性、扩展性和性能,但需构建生态、增加开发者资源和争取市场认可。采用模块化设计,支持多语言开发,利用分布式通信协议和硬件抽象层,通过Huawei AppGallery推动应用生态。
824 0
|
消息中间件 存储 中间件
中间件使用统一的标准和协议
【6月更文挑战第2天】
255 1
|
小程序 前端开发 Java
基于微信小程序的鲜花预定系统的设计与实现
基于微信小程序的鲜花预定系统的设计与实现
583 0
|
编译器 C语言
gcc编译警告:warning: suggest parentheses around assignment used as truth value
gcc编译警告:warning: suggest parentheses around assignment used as truth value
935 0
|
前端开发 JavaScript
screenshot-to-code
screenshot-to-code
411 0
|
缓存 测试技术 Python
Pytest用例规范及运行
Pytest用例规范及运行
401 1