两种点云分割(一)— RANSAC分割平面
点云分割的目的是将点云中属于不同部分的点加以区分。最直接的点云分割方法就是聚类,八种点云聚类方法(一)— DBSCAN_Coding的叶子的博客-CSDN博客这个在前面几节之中已经进行了详细介绍。本节将简要介绍另外几种点云分割的方法。采用深度学习的点云分割方法将在深度学习章节中进行介绍。
1 RANSAC分割平面
RANSAC为Random Sample Consensus的缩写,即随机抽样一致性,它是根据一组包含异常数据的样本数据集,计算出数据的数学模型参数,得到有效样本数据的算法。RANSAC算法的基本理论基础是大数定律,也就是当采样数达到一定数量后采样的数据就会符合它自身原有的概率属性。这是一种通过概率的方式来进行拟合。
以RANSAC平面分割为例,由于三个点可以确定一个平面,因此RANSAC会随机选择三个点来构建一个平面,并用点云中实际上有多少个点落到这个平面上来作为评估这个平面的正确程度。当随机抽样的次数足够多时,我们有较大概率获得所需要的平面。平面方程如下所示:
(1)
2 open3d RANSAC
open3d中RANSAC分割平面的函数为segment_plane,主要参数有三个。distance_threshold定义了一个点到一个估计平面的最大距离,这些距离内的点被认为是内点(inlier),ransac_n定义了使用随机抽样估计一个平面的点的个数,num_iterations定义了随机平面采样和验证的频率(迭代次数)。这个函数返回(A,B,C,D)作为一个平面,对于平面上每个点(x,y,z)满足上面的平面方程。这个函数还会返回内点索引的列表。
pcd.segment_plane(distance_threshold=0.1, ransac_n=10, num_iterations=1000)
3 程序样例
pcd文件请参考:pcd格式点云样例文件-深度学习文档类资源-CSDN下载。
# -*- coding: utf-8 -*-
"""
@author: https://blog.csdn.net/suiyingy
"""import open3d as o3d
import numpy as npif __name__ == '__main__':file_path = 'rabbit.pcd'pcd = o3d.io.read_point_cloud(file_path)# pcd = pcd.uniform_down_sample(50)#每50个点采样一次pcd.paint_uniform_color([0.5, 0.5, 0.5])#指定显示为灰色print(pcd)plane_model, inliers = pcd.segment_plane(distance_threshold=0.2, ransac_n=10, num_iterations=5000)[A, B, C, D] = plane_modelprint(f"Plane equation: {A:.2f}x + {B:.2f}y + {C:.2f}z + {D:.2f} = 0")colors = np.array(pcd.colors)colors[inliers] = [0, 0, 1]#平面内的点设置为蓝色pcd.colors = o3d.utility.Vector3dVector(colors[:, :3])o3d.visualization.draw_geometries([pcd], #点云列表window_name="RANSAC平面分割",point_show_normal=False,width=800, # 窗口宽度height=600) # 窗口高度
4 平面分割效果
处于分割平面的点用蓝色表示,其他点用灰色表示。
python三维点云从基础到深度学习_Coding的叶子的博客-CSDN博客_3d点云 python从三维基础知识到深度学习,将按照以下目录持续进行更新。https://blog.csdn.net/suiyingy/article/details/124017716
两种点云分割(一)— RANSAC分割平面相关推荐
- [算法]iOS 视频添加水印,合成视频两种方案(整体渲染和分割渲染)
现手机里有一段视频,通过APP给他添加一个水印.iOS提供了在视频上添加layer的接口,添加一个水印还是很方便的(添加水印).添加完水印有一个渲染过程,在手机这种设备上还是比较慢的,比如:对1分钟的 ...
- 两种点云地面去除方法
目录 1.基于角度分割的地面.非地面分割 1.1 PCL基本入门 1.1.1 在ROS项目中引入PCL库 1.2 编写节点进行Voxel Grid Filter 1.2.1 验证效果 1.3 点云地面 ...
- PCL 点云分割与分类 Segmentation RANSAC随机采样一致性 平面模型分割 欧氏距离分割 区域聚类分割算法 最小分割算法 超体聚类 渐进式形态学滤波器
点云分割 博文末尾支持二维码赞赏哦 _ 点云分割是根据空间,几何和纹理等特征对点云进行划分, 使得同一划分内的点云拥有相似的特征,点云的有效分割往往是许多应用的前提, 例如逆向工作,CAD领域对零件的 ...
- pytorch 语义分割loss_关于pytorch语义分割二分类问题的两种做法
形式1:输出为单通道 分析 即网络的输出 output 为 [batch_size, 1, height, width] 形状.其中 batch_szie 为批量大小,1 表示输出一个通道,heigh ...
- 解码中的AnnexB和avcC两种分割数据方式
目前 H.264 流行的包装方式有两种,一种叫做 AnnexB,一种叫做 avcC.对于这两种格式,各家的支持程度也不太一样,例如,Android 硬解码 MediaCodec 只接受 AnnexB ...
- 数字分割(拆数字)的两种方法
最近做了下蓝桥杯的初赛训练题,发现经常需要用到数字分割(例如把一个数字1234拆成1,2,3,4) 所以总结了两种常用的拆分数字的方法:一个是while循环方法,一个是递归方法 //数字分割,whil ...
- pdf怎么分割成多个文件?有两种方式
pdf怎么分割成多个文件?遇到这种问题的小伙伴应该是手头上的文件过大或者需要分章节展示部分文件,PDF一般来说并不好编辑修改,但可以借助一些编辑软件来处理.下面就给大家介绍两种分割方式,解决这一问题. ...
- split分割字符串(按两种符号分割)
动机:在处理生物方面的语料时,出现类似的情况:CD4+CD25-, 需要以"+"和"-"分割字符串 以下给出两种方式: String str1[] = s1.s ...
- PDF分割成一页一页的怎么做?分享两种分割页面小妙招
如何将PDF文件分割成一页一页的呢?大家在使用PDF文件的过程中,肯定会遇到需要编辑文件的时候,有时是文件的内容出现了错误,有时是需要合并或者分割页面,就比如我们遇到需要将PDF文件分割成一页一页的时 ...
最新文章
- C# 3.0/3.5语法新特性示例汇总[转]
- top命令详解-性能分析
- 微信小程序发送验证码60秒倒计时
- VS 团队资源管理 强制解锁锁定文件
- 八十四、Python | Leetcode回溯算法系列
- Java并发编程—JUC的Lock锁
- 深度学习笔记——基于传统机器学习算法(LR、SVM、GBDT、RandomForest)的句子对匹配方法
- IT桔子分布式项目1
- jenkins中使用rsync, scp命令
- 通过Bigtop编译Hadoop组件的rpm包
- 朴素贝叶斯(naive Bayes) 二
- 程序员如何探索新技术
- Linux 设备驱动的固件加载【转】
- java 新浪博客_Java
- 【Tools】常用PDF转Word工具
- Dev cpp出现段错误的原因之一
- 魅族 刷机android 6.0,魅族MX6如何刷机升级 魅族MX6升级方法【详解】
- 腾讯与新浪微博开放平台之比较
- c语言随机抽奖小程序,基于C#实现简单的随机抽奖小程序
- SEO前端篇(二)关键词