点云下采样是对点云以一定的采样规则重新进行采样,目的是在保证点云整体几何特征不变的情况下,降低点云的密度,进而可以降低相关处理的数据量和算法复杂度。下面介绍三种点云下采样方式。最远点采样等方法后续会在深度学习章节中进行详细介绍。

1 体素下采样

体素是将三维空间划分成一个个小的立体网格,相关介绍请参考:点云体素介绍_Coding的叶子的博客-CSDN博客。体素下采样就是把落在每个体素中的点用一个点来表示。这个点的坐标取值就是体素中所有点坐标的平均值。这个点也就是体素中各个点的质心。

open3d中体素下采样的函数为voxel_down_sample,其参数为体素的尺寸大小。体素尺寸越大,则下采样的倍数越大,点云也就会变得更加稀疏。

voxel_down_sample(voxel_size=0.1)

除了voxel_down_sample之外,voxel_down_sample_and_trace也是采用相同的体素下采样方法。但函数的输入输出有一定差别。voxel_down_sample_and_trace输入除了voxel_size体素尺寸外,还有min_bound、max_bound和approximate_class。

voxel_down_sample_and_trace(self, voxel_size, min_bound, max_bound, approximate_class=False)
输入:
voxel_size ( float ) -- 要下采样的体素大小。
min_bound ( numpy.ndarray [ numpy.float64 [ 3 , 1 ] ] ) – 体素边界的最小坐标
max_bound ( numpy.ndarray [ numpy.float64 [ 3 , 1 ] ] ) - 体素边界的最大坐标
approximate_class(布尔,可选,默认=假)–输出:
1、稀疏后点云坐标
2、稀疏后点云中各个点在原点云中的索引

由于点云不是充满整个点云空间,只是占用一部门的点云空间,因而可以用min_bound和max_bound来限制需要下采样的点云范围。min_bound和max_bound分别对应点云范围的下边界和上边界。也就是可以用min_bound和max_bound指定点云需要下采样的部分,从而实现对局部进行下采样。get_min_bound()和get_max_bound()函数可以直接获取整个点云的上下边界。【这个解释似乎并不正确,没有验证成功,等待后续纠正】

open3d中的pcd格式数据可以为点云中每个点分配特定的颜色,例如可以为点云属于不同的部分赋予不同的颜色。approximate_class就是用来控制采样后的点云颜色。当approximate_class=True时,体素采样后的点的颜色由体素中大多数点的颜色决定。当approximate_class=False时,体素采样后的点的颜色由体素中所有点的平均颜色决定。

输出包含如下两部分:
        (1)稀疏后点云坐标
        (2)稀疏后点云中各个点在原点云中的索引

2 python open3d 体素下采样

pcd文件请参考:pcd格式点云样例文件-深度学习文档类资源-CSDN下载。

# -*- coding: utf-8 -*-
"""
乐乐感知学堂公众号
@author: https://blog.csdn.net/suiyingy
"""import open3d as o3d
from copy import deepcopyif __name__ == '__main__':file_path = 'rabbit.pcd'pcd = o3d.io.read_point_cloud(file_path)pcd.paint_uniform_color([0.5, 0.5, 0.5])#指定显示为灰色print(pcd)pcd1 = deepcopy(pcd)pcd1.paint_uniform_color([0, 0, 1])#指定显示为蓝色pcd1.translate((20, 0, 0)) #整体进行x轴方向平移pcd1 = pcd1.voxel_down_sample(voxel_size=1)print(pcd1)pcd2 = deepcopy(pcd)pcd2.paint_uniform_color([0, 1, 0])#指定显示为绿色pcd2.translate((0, 20, 0)) #整体进行y轴方向平移res = pcd2.voxel_down_sample_and_trace(1, min_bound=pcd2.get_min_bound()-0.5, max_bound=pcd2.get_max_bound()+0.5, approximate_class=True)pcd2 = res[0]print(pcd2)# 点云显示o3d.visualization.draw_geometries([pcd, pcd1, pcd2], #点云列表window_name="体素下采样",point_show_normal=False,width=800,  # 窗口宽度height=600)  # 窗口高度

3 体素下采样效果

灰色图片为原始点云,蓝色为voxel_down_sample体素下采样结果,绿色为voxel_down_sample_and_trace下采样结果。

python三维点云从基础到深度学习_Coding的叶子的博客-CSDN博客_3d点云 python从三维基础知识到深度学习,将按照以下目录持续进行更新。https://blog.csdn.net/suiyingy/article/details/124017716

更多三维、二维感知算法和金融量化分析算法请关注“乐乐感知学堂”微信公众号,并将持续进行更新。

三种点云下采样方法(一) — open3d python相关推荐

  1. OpenCV函数应用:基于二值图像的三种孔洞填充方法记录(附python,C++代码)

    系列文章目录 函数系列: OpenCV函数简记_第一章数字图像的基本概念(邻域,连通,色彩空间) OpenCV函数简记_第二章数字图像的基本操作(图像读写,图像像素获取,图像ROI获取,图像混合,图形 ...

  2. 最佳实践丨三种典型场景下的云上虚拟IDC(私有池)选购指南

    简介:业务上云常态化,业务在云上资源的选购.弹性交付.自助化成为大趋势.不同行业的不同客户,业务发展阶段不一样,云上资源的成本投入在业务整体成本占比也不一样,最小化成本投入.最大化业务收益始终是不同客 ...

  3. 【玩转STM32】:串口唤醒低功耗的三种方式/低功耗下打印数据

    在使用STM32做低功耗项目时,大概率会遇到一个问题:低功耗模式下想打印数据怎么办? 今天,学长给大家另辟蹊径,介绍一种使用串口唤醒低功耗的案例.方法.可设置三种唤醒方式:检测到起始位唤醒.检测到 R ...

  4. linux文件编辑器的三种模式,Linux中文本编辑器三种工作模式切换及vi编辑器三种工作模式下命令详解...

    文本编辑器的作用 创建或修改文本文件 维护Linux系统中的各种配置文件 Linux中最常用的文本编辑器 Linux中最常用的文本编辑器 vi:类UNIX操作系统的默认文本编辑器 vim:vim时vi ...

  5. 图像灰度化的三种方法(matlab、C++、Python实现)

    灰度化处理就是将一幅色彩图像转化为灰度图像的过程.彩色图像分为R,G,B三个分量,分别显示出红绿蓝等各种颜色,灰度化就是使彩色的R,G,B分量相等的过程.灰度值大的像素点比较亮(像素值最大为255,为 ...

  6. C++中public/private/protected三种继承方式下基类成员对派生类的可见性探讨

     原文: http://blog.csdn.net/zgjxwl/article/details/4804233 1.public继承方式下 #include <iostream>   ...

  7. Datatable中对某列求和,三种不同情况下的方法 .

    C# code 方法一. object sumObject = DataTable.Compute("sum(Qty)", "TRUE"); 直接对数据表中的字 ...

  8. 典型电商网站的站点导航的布局结构实现,及运用三种方式实现下拉效果

    由于jquery2.0及以下不再支持IE6/7/8,因此选择jquery1.x版本中较新的一个 推荐一个各种插件URL地址的公共库:https://www.bootcdn.cn/ CDN加载jquer ...

  9. 三种方法在当前目录下打开cmd命令窗口

    概述 总结了三种在当前目录下直接打开cmd窗口的方法,供以后开发时参考,相信对其他人也有用. 方法一 在当前目录上面的路径显示框中输入CMD,然后回车即可. 方法二 在当前目录按住shift再右键. ...

最新文章

  1. JSP-03-实现数据传递
  2. 047_Object对象
  3. 从绘画和雕塑中了解板甲的设计思路
  4. jquery 滚动条插件
  5. cassandra可视化_容器化Spring Data Cassandra应用程序
  6. docker集群管理
  7. java共享锁排它锁_java 实现共享锁和排它锁
  8. 转转集团Q4手机行情:二手市场iPhone交易量今年以来首次“反弹”
  9. js替换问题replace和replaceAll
  10. UCINET软件使用简介 ——主菜单功能简介1
  11. (原創) 如何使用ThinkPad的TrackPoint(小紅點)? (NB) (ThinkPad)
  12. uniapp使用阿里字体图标库
  13. 全网最全python教程,从零到精通(学python有它就够必收藏)
  14. Hosts文件拒绝访问
  15. 提升NexusPHP解析种子文件性能(优化benc.php)
  16. 亚马逊后台付款表(Custom Transaction)详解
  17. 3D建模一个月的真实收入,当作副业在家就能月入过万?
  18. ICP许可证过期了还能补办吗
  19. 酒店智能联网门锁解决方案
  20. 03-04年度国家级精品课程一览

热门文章

  1. Android:手机关闭相机拍照声音
  2. android 6.0 小米note,润物细无声,小米Note手机已悄然获Android 6.0更新
  3. 前端开发中79条不可忽视的知识点汇总
  4. java面试突击_两个月!终于把《JavaGuide面试突击》v3.0肝出来了!
  5. 7.嵌入式控制器EC实战 ACPI规范中的电源管理通道PMC(Power Management Channel)
  6. 涨价或对新能源汽车造成新一轮打击,促使消费者选购燃油车
  7. 机器学习 —— Boosting算法
  8. 如何快速、批量导出谷歌浏览器里的历史记录
  9. [编程题] 彩色瓷砖
  10. Java接入支付宝支付教程