谷歌draco
来源:互联网 发布:java 整型类型 编辑:程序博客网 时间:2024/06/16 15:07
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>intmain (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);}
如有问题可以与我交流,同时欢迎指正,谢谢
微信公众号号可扫描二维码一起共同学习交流
- 谷歌draco
- Draco:谷歌开源3D数据压缩工具
- 3D文件压缩库——Draco简析
- Xamarin的Kimono以及Google的Guetzli和Draco
- 谷歌开源 3D 数据压缩算法 Draco以及代码分析
- 基于谷歌draco项目的测试---三维模型数据压缩方案
- 点云压缩入门篇(2)谷歌开源点云压缩draco平台编译
- Draco代码分析(一) —— Encode过程&探究其数据编码方式
- 谷歌
- 谷歌
- 谷歌
- 谷歌.....
- 谷歌
- 谷歌
- 谷歌
- 谷歌
- 谷歌
- 谷歌
- PCL点云曲面重建(1)
- PCL点云变换与移除NaN
- PCL点云配准(1)
- 业务与产品
- PCL点云配准(2)
- 谷歌draco
- K-means算法及OpenCV实现
- PCL的PNG文件和计算点云重心
- BZOJ4197: [Noi2015]寿司晚宴 状压DP
- 图片处理(一)
- PCL法线估计
- 活字格V3.0版本强势发布,企业Web应用案例大赛火热进行中
- linux使用<二> 常用命令
- PCL几种采样方法