三维点云处理-模型拟合

  以直线拟合为例,模型拟合常用的方法有Least Square(最小二乘)、Hough Transform(霍夫变换)、Random Sample Consensus(RANSAC)等。那么该如何区分和使用这几种方法呢?

  1. 情况1:已知 inlier 点,即已知哪些点可以用来拟合模型;(最小二乘)
  2. 情况2:如果数据中存在少量outliers?(①Robust 最小二乘,对loss fuction进行修改;②Hough变换; ③RANSAC;)
  3. 情况3:如果数据中存在大量outliers或者待拟合的模型不止一种?(①Hough变换;②RANSAC)
    image.png

1. 最小二乘

目标:给定一堆数据点 { p 1 , p 2 , . . . , p n } \{p_1,p_2,...,p_n \} {p1,p2,...,pn},如何找到一个和这些数据点最匹配的直线方程?
模型 a x + b y + c = 0 ax+by+c=0 ax+by+c=0
损失函数
E = ∑ i = 1 n ( a x i + b y i + c ) 2 E=\sum_{i=1}^n (ax_i+by_i+c)^2 E=i=1n(axi+byi+c)2
  其中: a x i + b y i + c ax_i+by_i+c axi+byi+c表示点 ( x i , y i ) (x_i,y_i) (xi,yi)到拟合直线的距离。
求解损失函数
image.png

1.1 最小二乘的几种形式:

  1. Ax=0
    image.png
    解为 A的最小特征值的特征向量(前提是A是一个列满秩矩阵,即 n ≥ m);

  2. Ax=b
    image.png
    解为 x ^ = ( A T A ) − 1 A T b \hat{x} = (A^T A)^{-1} A^Tb x^=(ATA)1ATb(前提是A是一个列满秩矩阵,即 n ≥ m);

  3. Ax=b, s.t., Cx = 0
    解法可以使用 拉格朗日乘值法。

1.2 Robust最小二乘

  由于最小二乘对噪声比较敏感:
image.png
  因此提出了Robust最小二乘:
image.png
  因为当待拟合数据中存在噪声点时, ( a x i + b y i + c ) (ax_i + by_i + c) (axi+byi+c)平方的值会比较大,因此采用 |s| 或取对数的方式来减小误差值,像Cauchy, Huber这样的鲁棒损失函数减少了异常值的影响。但此时这样的损失函数形式会导致问题不再是线性的,就无法直接使用最小二乘求解。

解决方法
  将Robust损失函数和线性LSQ耦合,满足最小二乘形式即可:
image.png
优化方法
  Gradient descent(梯度下降法)、Gauss-Newton(高斯牛顿法)、Levenberg-Marquardt(LM)

总结
  最小二乘法简单、速度快,但是对噪声比较敏感,无法拟合多个模型;

2. Hough变换

  核心思想:原始空间的点可以转化为参数空间的线,或者参数空间的线可以转化成原始空间的点。
image.pngimage.png
  当原始空间的函数相对复杂,无法直接获取参数k空间的交点时,可以使用 投票(most votes)的方式。如下图所示,以参数分辨率为最小单元建立网格,假设:
  在a方向:对于a=0.1,计算b=0.21,此时向下取整后标记(0.1, 0.2)对应的网格;同样的,对于a=0.2,计算b=0.26,标记(0.2, 0.2)对应的网格;
  在b方向:同样以最小分辨率标记对应网格。

  最终遍历所有网格点,存在两个标记点的网格点就是参数空间下的交点。(参数的准确性与网格的分辨率有关)
image.png
  需要注意的是,直线方程 y = a x + b y=ax+b y=ax+b是不均匀的,无法表示垂直线(a为无穷大的情况),因此考虑采用模型参数化的方法:
x c o s ( θ ) + y s i n ( θ ) = r x cos(\theta) + y sin(\theta) = r xcos(θ)+ysin(θ)=r
  其中, θ , r \theta, r θ,r表示模型参数。
  同样的采用投票(most votes)的方式,分别固定 r 和 𝜃。如果需要更高的精度,可以提高分辨率 r ,如果需要更快的速度,可以提高𝜃。
  小技巧:在搜索最高投票参数之前,可以在参数空间做一个高斯模糊,减少噪声的影响。

2.1 如果有3个参数呢?

( x − a ) 2 + ( y − b ) 2 = r 2 (x-a)^2 + (y-b)^2 = r^2 (xa)2+(yb)2=r2
步骤1:首先固定 r,设定最小的分辨率;
步骤2:均匀地对 𝜃 进行采样 { θ 1 , θ 2 , . . . , θ k } \{\theta_1,\theta_2,...,\theta_k \} {θ1,θ2,...,θk}
步骤3:用 𝜃 表示参数 a、b
image.png
步骤4:搜索投票为3的网格区域
image.png
总结-优点
  对噪声不敏感、所要求的数据点形状可以是不完整的、可以扩展到多种模型;
总结-缺点
  无法对多个参数进行拟合(一般只用在二维和三维空间,即模型参数在2-3个的情况下)。

3. RANSAC

  RANSAC模型拟合的效果与数据中inlier点的比例有关,且对模型参数的个数无明确要求。
基本思路:以求解模型所需的最小数据子集为标准进行采样。

  1. 随机选取一个样本(通常为求解模型参数所需的最小子集,如直线模型需要两个样本点)
    p 0 = ( x 0 , y 0 ) , p 1 = ( x 1 , y 1 ) p_0=(x_0,y_0), \space p1=(x_1,y_1) p0=(x0,y0), p1=(x1,y1)
  2. 计算模型参数:
    在这里插入图片描述
  3. 计算Consensus,即每个点 p i = ( x i , y i ) p_i =(x_i,y_i) pi=(xi,yi)的误差函数:

image.png

  1. 计算与当前模型相拟合的数据点,即“模型的支持者”: d i < τ ( i n l i e r ) d_i < \tau(inlier) di<τ(inlier)
  2. 重复迭代步骤1-4 N次,选择inlier最多的模型。

image.png

3.1 RANSAC参数选择

  RANSAC模型拟合过程中有两个参数需要确认:距离阈值 τ 和迭代次数 N。

  1. 距离阈值(τ)的选取

  一般通过实验测试得到 d,当然也可以通过卡方分布(Chi-square distribution χ 2 \chi^2 χ2)计算得到理论值(但该方法不实用,因为实际问题中通常无法提前知道数据分布信息)。

卡方分布:k 个独立的标准高斯分布的和。
  假设每个数据点到模型的距离符合高斯分布 d ∼ N ( 0 , σ 2 ) d \sim N(0,\sigma^2) dN(0,σ2)。假设希望95%的置信度来认为一个点是inlier点,那么 τ 的取值受卡方分布参数 k的 自由度的影响:
image.png

  1. 迭代次数(N)的选取

  选择一个N,使得N次迭代后,至少有一个模型没有outliers的概率 p,比如目标概率p=0.9/0.99 (取决于希望模型迭代 更快速or更准确)。
  如何确定N?

  • e:outlier ratio(所有数据点中outlier部分的比例)
  • s:模型解算所需的最少数据点数(如直线拟合需要最少2个点)
  • N:迭代次数
  • p:执行N次迭代后,至少有一个模型没有outlier的概率,即至少拿到一个好的sample的概率;

image.png
N = l o g ( 1 − p ) l o g ( 1 − ( 1 − e ) s ) N=\frac{log(1-p)}{log(1-(1-e)^s)} N=log(1(1e)s)log(1p)
  其中,比较关键的信息是数据点的outlier ratio — e。

3.2 应用技巧

  1. 提前终止迭代:(如当前拟合模型的inlier ratio已经达到了预期的效果)
    image.png
    即满足 T n t o t a l ≥ 1 − e \frac{T}{n_{total}} \ge 1-e ntotalT1e时就可以提前终止了。

  2. RANSAC + LSQ:使用RANSAC粗拟合获取inlier,再对inlier使用LSQ对模型进行优化。

image.png
总结-优点
  简单、通用性强,通常在实践中效果较好,在inlier ratio较低时也可以取得较好的效果;
总结-缺点
  需要进行多次实验来选取 τ,当inlier ratio很低时,迭代次数较多。

4. 实践练习

  基于Kitti数据集激光雷达点云数据,利用RANSAC方法拟合地面,筛选地面点和非地面点,并对非地面点进行聚类及可视化。

  1. 原始点云
    image.png

  2. 感兴趣区域点云提取
    image.png

  3. 地面点云提取
    image.png

  4. 障碍物点云聚类
    image.png

障碍物聚类-Peek 2024-05-07 19-00

参考链接

  1. 自动驾驶激光雷达物体检测技术
  2. 点云学习第四周(模型拟合)

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

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

相关文章

基于springboot实现夕阳红公寓管理系统项目【项目源码+论文说明】

基于springboot实现夕阳红公寓管理系统演示 摘要 如今社会上各行各业&#xff0c;都在用属于自己专用的软件来进行工作&#xff0c;互联网发展到这个时候&#xff0c;人们已经发现离不开了互联网。互联网的发展&#xff0c;离不开一些新的技术&#xff0c;而新技术的产生往往是…

深入理解Java虚拟机(JVM)

引言&#xff1a; Java虚拟机&#xff08;JVM&#xff09;是Java平台的核心组件&#xff0c;它负责将Java字节码转换成平台特定的机器指令&#xff0c;并在相应的硬件和操作系统上执行。JVM的引入使得Java语言具有“一次编写&#xff0c;到处运行”的跨平台特性。本文将深入探…

W801学习笔记二十一:英语背单词学习应用——上

英语背单词是比较常见的学习APP&#xff0c;参考唐诗宋词应用&#xff0c;本章做一个类似的应用。 一、单词数据清洗及格式转换 诗词数据的获取渠道很多&#xff0c;一般可以按照年级来分文件。如一到九年级&#xff0c;四六级&#xff0c;雅思等等。 1、先从网上某某地方下载…

【计算机科学速成课】笔记一

文章目录 写在前面1.计算机的早期历史2.电子计算机3.布尔运算和逻辑门4.二进制5.算术逻辑单元-ALU6.寄存器和内存 写在前面 所有的一切源于这样一个网站——CS自学指南。 这是新手小白入门计算机科学必要了解的知识——【计算机科学速成课】[40集全/精校] - Crash Course Comp…

HTML_CSS学习:尚硅谷——尚品汇

一、index.html <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>荣耀</title> <!-- 引入页签图标--><link rel"shortcut icon" href"./HONOR%20.ico" type&qu…

navicat premium16.3.9重置

软件下载 官网地址&#xff1a;https://navicat.com.cn/products/ # 准备脚本 1、建一个txt 2、复制以下代码 3、修改文件格式为bat 4、运行bat文件 5、重新打开navicat&#xff0c;试用期重置为14 经测试16.2.3以上版本均可用 echo off set dnInfo set dn2ShellFolder set r…

展开说说:Android线程池解析

何谓线程池&#xff1f;本人理解是存放和管理线程的一个容器。 线程池存在的意义是什么&#xff1f; 第一&#xff1a;前面博客提到过创建和销毁线程的操作本身是有性能开销的&#xff0c;如果把使用的线程对象存起来下次用的时候直接取出来用就省去了一次创建和销毁的成本&a…

0基础学PHP有多难?

php作为web端最佳的开发语言&#xff0c;没有华而不实&#xff0c;而是经受住了时间考验&#xff0c;是一门非常值得学习的编程语言。 目前市场上各种网站、管理系统、小程序、APP等&#xff0c;基本都是使用PHP开发的&#xff0c;也侧面反映了PHP的需求以及学习的必要性&…

程序员的神器指南!揭秘软件开发必备工具

在软件开发的广袤海洋中&#xff0c;程序员们像是驾驶着帆船探索未知的航海者。他们面对的不仅仅是代码的挑战&#xff0c;还有项目管理、协作沟通和时间限制的压力。为了应对这些挑战&#xff0c;程序员们需要一系列强大的工具&#xff0c;就像是海中的指南针&#xff0c;帮助…

4.4网安学习第四阶段第四周回顾(个人学习记录使用)

本周重点 ①Linux系统提权 ②Linux权限维持 ③Windows 提权 ④Windows权限维持 ⑤SSRF利用 ⑥内网环境 ⑦内网扫描 ⑧漏洞利用 ⑨内网代理 ⑩获取主机控制权其他方案 ⑩①vuln靶场 ⑩②CS代理与ICMP隧道 本周主要内容 ①Linux系统提权 系统提权是成功入侵系统之…

PHPStudy 下载PHP提示“当前网络不稳定,下载失败”

错误信息 当前网络不稳定&#xff0c;下载失败 获取下载链接失败&#xff0c;请检查网络 假查网络 问题原因 xp.cn服务器的网络不稳定&#xff0c;不是你电脑的网络问题。 解决办法 第一步&#xff1a;下载现成的PHP文件 直接下载现成的文件&#xff0c;放到php目录。 将…

SparkSql介绍

概述 SparkSQL&#xff0c;顾名思义&#xff0c;就是Spark生态体系中的构建在SparkCore基础之上的一个基于SQL的计算模块。SparkSQL的前身不叫SparkSQL&#xff0c;而叫Shark&#xff0c;最开始的时候底层代码优化&#xff0c;sql的解析、执行引擎等等完全基于Hive&#xff0c…

避雷!这本7.7分毕业神刊,影响因子狂涨6.179,最新分区上升,却沦为风险期刊!

近日&#xff0c;科睿唯安又连续对多本期刊进行重新评估&#xff0c;多本「JCR Q1」沦为风险期刊。 值得注意的是&#xff0c;又一本中科院顶刊COMPUTERS IN BIOLOGY AND MEDICINE被打上“On Hold”标签&#xff0c;这是目前“黑名单”收入的第三本中科院TOP刊。 此前&#xff…

【Qt QML】ComboBox组件

ComboBox 是一个组合的按钮和弹出列表。它提供了一种以最小的屏幕空间呈现选项列表给用户的方式。ComboBox 使用数据模型填充。数据模型通常是一个 JavaScript 数组、一个 ListModel 或一个整数&#xff0c;但也支持其他类型的数据模型。 下面是一个简单的使用方式。 import …

【Three.js基础学习】15.scroll-based-animation

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 前言 课程要点 结合html等场景 做滚动动画 1.遇到的问题&#xff0c; 在向下滚动时&#xff0c;下方会显白&#xff08;部分浏览器&#xff09; 解决&#xff1a;alpha:true …

【MATLAB源码-第204期】基于matlab的语音降噪算法对比仿真,谱减法、维纳滤波法、自适应滤波法;参数可调。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 语音降噪技术的目的是改善语音信号的质量&#xff0c;通过减少或消除背景噪声&#xff0c;使得语音更清晰&#xff0c;便于听者理解或进一步的语音处理任务&#xff0c;如语音识别和语音通讯。在许多实际应用中&#xff0c;如…

python中numpy库使用

array数组 生成array数组 将list转化为array数组 import numpy as np np.array([1,2],typenp.int32)其中dtype定义的是元素类型&#xff0c;np.int32指32位的整形 如果直接定义dtypeint 默认的是32位整形。 zeors和ones方法 zeros()方法&#xff0c;该方法和ones()类似&a…

网络 IO 模式

同步 IO 与异步 IO 同步 IO 和异步 IO 是关于数据读写方式的两种不同模式。 同步 IO 是指在程序读写数据时&#xff0c;需要等待操作完成后才能继续执行后面的程序。这种模式下&#xff0c;当程序使用阻塞式 IO 时&#xff0c;会一直等待IO操作完成&#xff0c;程序会暂停执行…

HarmonyOS实战开发-如何实现查询当前城市实时天气功能

先来看一下效果 本项目界面搭建基于ArkUI中TS扩展的声明式开发范式&#xff0c; 数据接口是和风&#xff08;天气预报&#xff09;&#xff0c; 使用ArkUI自带的网络请求调用接口。 我想要实现的一个功能是&#xff0c;查询当前城市的实时天气&#xff0c; 目前已实现的功能…

后仿真中的关于延时问题(物理特性角度)

大家都知道&#xff0c;后仿真讲究仿真时序。那么&#xff0c;在网表阶段&#xff0c;接触到后仿延时问题。今天总结一下。 一 延时概念和分类 1.1 分布式延迟&#xff08;Distributed Delays&#xff09; 一般用来指定模块内部信号通过逻辑单元或者线网耗费的时间。 1.2 模…