地面分割--Patchwork

news2025/1/10 23:56:57

文章目录

  • 1问题定义
  • 2同心区域模型
  • 3按照区域划分的平面拟合
  • 4地面点似然估计(GLE)
  • 总结

patchwork是一种比较优秀的地面分割方法。其过程主要分为三个部分:同心圆环区域(CZM:concentric Zone Model),按照区域划分的平面拟合(R-GPF:region-wise ground plane fitting),地面似然估计(GLE:Ground Likelihood estimation)

1问题定义

设所有点云为
P = { p 1 , p 2 , … , p k , … , p N } \mathcal{P}=\left\{\mathbf{p}_1, \mathbf{p}_2, \ldots, \mathbf{p}_k, \ldots, \mathbf{p}_N\right\} P={p1,p2,,pk,,pN}
设地面点为 G G G,非地面点为 G c G^c Gc, P = G ∪ G c \mathcal{P}=G\cup{G^c} P=GGc.
G ^ \hat{G} G^为算法估计的地面点, G c ^ \hat{G^c} Gc^为估计的非地面点。所以:
G ^ = T P ∪ F P  and  G c ^ = F N ∪ T N (1) \hat{G}=\mathrm{TP} \cup \mathrm{FP} \text { and } \hat{G^c}=\mathrm{FN} \cup \mathrm{TN}\tag{1} G^=TPFP and Gc^=FNTN(1)
T P : t r u e p o s i t i v e s , F P : f a l s e p o s i t i v e s , T N : t r u e n e g a t i v e , F N : f a l s e n e g a t i v e \mathrm{TP}:true positives,\mathrm{FP}:false positives,\mathrm{TN}:true negative,\mathrm{FN}:false negative TP:truepositives,FP:falsepositives,TN:truenegative,FN:falsenegative。并且同样的 P = G ^ ∪ G c ^ \mathcal{P}=\hat{G}\cup{\hat{G^c}} P=G^Gc^

2同心区域模型

大部分地面都不是平面的,因此大多数基于平面的估计的方法假设局部地面是平面的。大多数方法将点云按固定角度,沿径向方向划分为均匀网格S(如下图a)。
均匀网格有两个问题:首先在自动驾驶中大部分点云都在lidar附近,如果均匀网格会导致远处的点在网格中过于稀疏(网格中点太少),导致拟合平面失败。其次,离lidar太近的网格,网格太小会导致平面法向量估计失败或者错误。
因此,本文提出了一种非均匀的网格划分方法,记为CZM,简记为 C \mathcal{C} C,记所有网格为 ⟨ N ⟩ = { 1 , 2 , 3... N } \lang{N}\rang=\lbrace{1,2,3...N}\rbrace N={1,2,3...N}(如图b)。然后提出的模型可以表示为:
C = ⋃ m ∈ ⟨ N Z ⟩ Z m \mathcal{C}=\bigcup_{m \in\left\langle N_Z\right\rangle} Z_m C=mNZZm
Z m Z_m Zm表示 C \mathcal{C} C的第m个区域(zone). N Z N_Z NZ表示区域的数量。
$
\text { Let } Z_m=\left{\mathbf{p}{k} \in \mathcal{P} \mid L{\min , m} \leq \rho_k<L_{\max , m}\right}
$
L min ⁡ , m , L max ⁡ , m L_{\min , m},L_{\max , m} Lmin,m,Lmax,m分别表示 Z m Z_m Zm的最小和最大径向半径。 Z m Z_m Zm被划分为 N r , m × N θ , m N_{r,m}\times N_{\theta,m} Nr,m×Nθ,m个bins,并且每个区域的bin数量是不同的(按照离lidar的距离划分不均匀区域)。每个bin S i , j , m \mathcal{S}_{i, j, m} Si,j,m可以表示为:
S i , j , m = { p k ∈ Z m ∣ ( i − 1 ) ⋅ Δ L m N r , m ≤ ρ k − L min ⁡ , m < i ⋅ Δ L m N r , m , ( j − 1 ) ⋅ 2 π N θ , m − π ≤ θ k < j ⋅ 2 π N θ , m − π } . \begin{array}{r} \mathcal{S}_{i, j, m}=\left\{\mathbf{p}_k \in Z_m \mid \frac{(i-1) \cdot \Delta L_m}{N_{r, m}} \leq \rho_k-L_{\min , m}<\frac{i \cdot \Delta L_m}{N_{r, m}},\right. \\ \left.\frac{(j-1) \cdot 2 \pi}{N_{\theta, m}}-\pi \leq \theta_k<\frac{j \cdot 2 \pi}{N_{\theta, m}}-\pi\right\} . \end{array} Si,j,m={pkZmNr,m(i1)ΔLmρkLmin,m<Nr,miΔLm,Nθ,m(j1)2ππθk<Nθ,mj2ππ}.
其中, ρ k = x k 2 + y k 2 , θ k = a r c t a n 2 ( y k , x k ) \rho_k=\sqrt{{x_k}^2+{y_k}^2},\theta_k=arctan2({y_k,x_k}) ρk=xk2+yk2 θk=arctan2(yk,xk)。与均匀网格模型相比,提出的CZM模型能够减少网格数量,并且更好的表示点云。本文设置区域为4(即,图b中4个不同颜色区域)。
在这里插入图片描述

3按照区域划分的平面拟合

对每个区域中的bin进行平面拟合。这里采用PCA而不采用RANSAC计算平面的主要参数,是因为PCA速度更快一些。通过PCA得到法向量 n = [ a , b , c ] T n=[a,b,c]^T n=[a,b,c]T,平面系数 d = − n p ˉ d=-n\bar{p} d=npˉ, p ˉ \bar{p} pˉ是bin中所有点的坐标平均值。
S n S_n Sn为第n个bin中点云集合,记所有bin的数量为$N_{\mathcal{C}}=\sum_{m=1}^{N_{Z}} N_{r, m} \times N_{\theta, m} 。然后在每个 b i n 里面选择最低点,作为初始 ( 第一次迭代 ) 种子点,对于 。然后在每个bin里面选择最低点,作为初始(第一次迭代)种子点,对于 。然后在每个bin里面选择最低点,作为初始(第一次迭代)种子点,对于S_n$初始地面点,通过如下方式获取:
G ^ n 0 = { p k ∈ S n ∣ z ( p k ) < z ˉ init  + z seed  } \hat{G}_{n}^{0}=\left\{\mathbf{p}_{k} \in S_{n} \mid z\left(\mathbf{p}_{k}\right)<\bar{z}_{\text {init }}+z_{\text {seed }}\right\} G^n0={pkSnz(pk)<zˉinit +zseed }
z i n i t z_{init} zinit为种子点的平均高程值, z s e e d z_{seed} zseed为高差阈值。
G ^ n l \hat{G}_{n}^{l} G^nl为第l次迭代获取的地面点。 G ^ n l + 1 \hat{G}_{n}^{l+1} G^nl+1为第l+1次迭代获取的地面点, G ^ n l + 1 \hat{G}_{n}^{l+1} G^nl+1可以通过以下方式获得:
G ^ n l + 1 = { p k ∈ S n ∣ d n l − d ^ k < M d } \begin{align} \hat{G}_{n}^{l+1} & = \left\{\mathbf{p}_{k} \in S_{n} \mid d_{n}^{l}-\hat{d}_{k}<M_{d}\right\} \end{align} G^nl+1={pkSndnld^k<Md}
其中, d n l = − ( n n l ) T p ‾ n l d_{n}^{l}=-\left(\mathbf{n}_{n}^{l}\right)^{T} \overline{\mathbf{p}}_{n}^{l} dnl=(nnl)Tpnl, p ‾ n l \overline{\mathbf{p}}_{n}^{l} pnl G ^ n l \hat{G}_{n}^{l} G^nl的平均值。 d ^ k = − ( n n l ) T p k \hat{d}_{k}=-\left(\mathbf{n}_{n}^{l}\right)^{T} \mathbf{p}_{k} d^k=(nnl)Tpk
请注意,原始R-GPF[14]和我们的主要区别在于,我们的算法涉及使用自适应初始种子选择来防止R-GPF收敛到局部最小值。(没有理解这个自适应的点在哪)
为了应对离群点。我们利用了这样一个事实,即仅在Z1(最靠近传感器的那个区域)中的接地点的z值主要分布在−hs附近,其中hs表示传感器高度。因此,当估计 G ^ n 0 \hat{G}_{n}^{0} G^n0时,如果zk低于Mh·hs,则过滤掉属于Z1的Sn中的pk,其中Mh<−1是高度阈值。对于不属于Z1的Sn,自适应阈值随着m变大而减小,以避免对可能来自下坡的点(实际上是TP)进行不适当的滤波。

4地面点似然估计(GLE)

L ( θ ∣ X ) = f ( X ∣ θ ) = ∏ n f ( X n ∣ θ n ) \mathcal{L}(\theta \mid \mathcal{X})=f(\mathcal{X} \mid \theta)=\prod_{n} f\left(\mathcal{X}_{n} \mid \theta_{n}\right) L(θX)=f(Xθ)=nf(Xnθn)
X n , θ n \mathcal{X}_{n}, \theta_{n} Xn,θn表示每个 G ^ n \hat{G}_{n} G^n的参数。
f ( X n ∣ θ n ) ≡ ϕ ( v 3 , n ) ⋅ ψ ( z ˉ n , r n ) ⋅ φ ( ψ ( z ˉ n , r n ) , σ n ) f\left(\mathcal{X}_{n} \mid \theta_{n}\right) \equiv \phi\left(\mathbf{v}_{3, n}\right) \cdot \psi\left(\bar{z}_{n}, r_{n}\right) \cdot \varphi\left(\psi\left(\bar{z}_{n}, r_{n}\right), \sigma_{n}\right) f(Xnθn)ϕ(v3,n)ψ(zˉn,rn)φ(ψ(zˉn,rn),σn)
ϕ , ψ , φ \phi, \psi,\varphi ϕ,ψ,φ表示每个 G ^ n \hat{G}_{n} G^n对应的垂直度、高程和平面度, z ˉ n \bar{z}_{n} zˉn是高程平均值, r n r_{n} rn是lidar原点到 S n S_n Sn中心点的距离。 σ n = λ 3 , n λ 1 , n + λ 2 , n + λ 3 , n \sigma_n=\frac{\lambda_{3, n}}{\lambda_{1, n}+\lambda_{2, n}+\lambda_{3, n}} σn=λ1,n+λ2,n+λ3,nλ3,n
垂直度:
ϕ ( v 3 , n ) = { 1 ,  if  v 3 , n ⋅ z ∥ v 3 , n ∥ ∥ z ∥ > cos ⁡ ( π 2 − θ τ ) 0 ,  otherwise  \phi\left(\mathbf{v}_{3, n}\right)=\left\{\begin{array}{ll} 1, & \text { if } \frac{\mathbf{v}_{3, n} \cdot \mathbf{z}}{\left\|\mathbf{v}_{3, n}\right\|\|\mathbf{z}\|}>\cos \left(\frac{\pi}{2}-\theta_{\tau}\right) \\ 0, & \text { otherwise } \end{array}\right. ϕ(v3,n)={1,0, if v3,nzv3,nz>cos(2πθτ) otherwise 
v 3 , n \mathbf{v}_{3, n} v3,n表示 S n {S}_{n} Sn的法向量。 z = [ 0 , 0 , 1 ] z=[0,0,1] z=[0,0,1] θ τ \theta_{\tau} θτ为阈值。垂直度表示平面法线与z轴的夹角。
高程
ψ ( z ˉ n , r n ) = { ( 1 + e ( z ˉ n − κ ( r n ) ) ) − 1 ,  if  r n < L τ 1.  otherwise  \begin{equation}\psi\left(\bar{z}_n, r_n\right)= \begin{cases}\left(1+e^{\left(\bar{z}_n-\kappa\left(r_n\right)\right)}\right)^{-1}, & \text { if } r_n<L_\tau \\ 1 . & \text { otherwise }\end{cases}\end{equation} ψ(zˉn,rn)={(1+e(zˉnκ(rn)))1,1. if rn<Lτ otherwise 
k ( . ) k(.) k(.)表示自适应中点函数,该自适应中点函数根据rn呈指数增加。(文中没有进一步说明)。 L τ L_\tau Lτ为距离阈值。
平面度
φ ( ψ ( z ˉ n , r n ) , σ n ) = { ζ e − ( σ n − σ τ , m ) ,  if  ψ ( z ˉ n , r n ) < 0.5 1 ,  otherwise  \begin{equation}\varphi\left(\psi\left(\bar{z}_n, r_n\right), \sigma_n\right)= \begin{cases}\zeta e^{-\left(\sigma_n-\sigma_{\tau, m}\right)}, & \text { if } \psi\left(\bar{z}_n, r_n\right)<0.5 \\ 1, & \text { otherwise }\end{cases}\end{equation} φ(ψ(zˉn,rn),σn)={ζe(σnστ,m),1, if ψ(zˉn,rn)<0.5 otherwise 
ζ > 1 \zeta>1 ζ>1, σ τ , m \sigma_{\tau, m} στ,m为阈值。
最终的地面点可以通过如下方式得到:
G ^ = ⋃ n ∈ ⟨ N C ⟩ [ f ( X n ∣ θ n ) > 0.5 ] G ^ n \hat{G}=\bigcup_{n \in\left\langle N_{\mathcal{C}}\right\rangle}\left[f\left(\mathcal{X}_n \mid \theta_n\right)>0.5\right] \hat{G}_n G^=nNC[f(Xnθn)>0.5]G^n
[ . ] [.] [.]表示Iverson bracket,如果满足条件返回true,否则返回false。这个公式的意思就是说,如果局部平面拟合(R-GPF)得到的地面点满足概率大于0.5就认为是真正的地面点。

总结

这篇文章创新之处有三个:改进了bin的划分规则,根据距离lidar距离划分;其次改进了局部平面拟合算法;最后提供基于似然函数的地面点筛选方法(原创性,首次提出)。
缺点:参数过多,有些算法细节和结论有待商榷。
参考:
1

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

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

相关文章

OpenCV基础操作(5)图像平滑、形态学转换、图像梯度

import numpy as np import cv2 as cv from matplotlib import pyplot as plt一、图像平滑 1、2D卷积 我们可以对 2D 图像实施低通滤波&#xff08;LPF&#xff09;&#xff0c;高通滤波&#xff08;HPF&#xff09;等。 LPF 帮助我们去除噪音&#xff0c;模糊图像。HPF 帮助…

【数字信号处理】Goertzl算法详解推导及双音多频(DTMF)信号检测

Geortzel算法 【要点解析】 根据卷积公式 y ( n ) = ∑ m = − ∞ ∞ x ( m )

前端切图仔跑路真经

一、闭包 谈到闭包&#xff0c;我们首先要讨论的就是作用域。 1、作用域&#xff1a; 是指程序源代码中代码定义的范围。规定了如何设置变量&#xff0c;也就是确定了当前执行代码对变量的访问权限。 JavaScript采用词法作用域&#xff0c;也就是静态作用域&#xff0c;就是在…

直接带你使用 FreeRTOS 的 API 函数(基于 CubeMX 生成)(不断更新)

作者有话要说 对于这个越来约浮躁的社会&#xff0c;什么都要钱&#xff0c;特别是网上那些垃圾教程&#xff0c;越听越模糊&#xff0c;那行吧&#xff0c;我直接就从 FreeRTOS 的 API函数 学起&#xff0c;管你这么多底层内容的&#xff0c;以后再说吧&#xff01;&#xff0…

[中间件漏洞]apache漏洞复现

目录 apache未知扩展名解析漏洞 漏洞复现 防范建议 AddHandler导致的解析漏洞 防范建议 Apache HTTPD 换行解析漏洞&#xff08;CVE-2017-15715&#xff09; 漏洞复现 防范建议 apache未知扩展名解析漏洞 Apache默认一个文件可以有多个以点分割的后缀&#xff0c;当最右边的后缀…

【LeetCode热题100】打卡第5天:最长回文子串

文章目录 最长回文子串⛅前言&#x1f512;题目&#x1f511;题解 最长回文子串 ⛅前言 大家好&#xff0c;我是知识汲取者&#xff0c;欢迎来到我的LeetCode热题100刷题专栏&#xff01; 精选 100 道力扣&#xff08;LeetCode&#xff09;上最热门的题目&#xff0c;适合初识…

部署OA系统

文章目录 前言一、OA系统基础1.OA系统2.魔方OA3.OA系统架构4.部署OA系统 二、使用步骤总结 前言 部署OA系统&#xff0c;以魔方OA为例 一、OA系统基础 1.OA系统 办公自动化&#xff08;Office Automation&#xff0c;简称OA&#xff09;&#xff0c;是将计算机、通信等现代化…

⑥电子产品拆解分析-食物电子秤

⑥电子产品拆解分析-食物电子秤 一、功能介绍二、电路分析以及器件作用三、原理图复现与学习1、电源电路2、按键电路3、其它接口电路 一、功能介绍 ①高精度0.1g称重&#xff1b;②内置锂电池和外加2个7号电池超长续航&#xff1b;③可进行克和盎司单位称重&#xff1b;④一键智…

Flask or FastAPI? Python服务端初体验

1. 引言 最近由于工作需要&#xff0c;又去了解了一下简单的python服务搭建的相关工作&#xff0c;主要是为了自己开发的模型或者工具给同组的人使用。之前介绍的针对于数据科学研究比较友好的一个可以展示的前端框架Streamlit可以说是一个利器。不过&#xff0c;随着ChatGPT的…

由前序和中序创建二叉树

算法分析 首先&#xff0c;前序是按照 根 -> 左子树 -> 右子树 这样的顺序来进行访问的&#xff0c;也就是说&#xff0c;前序给出的顺序一定是先给出根结点的&#xff0c;那么我们就可以根据前序的顺序来依次递归判断出每个子树的根结点了。 如下所示&#xff1a; 我…

源码角度分析多线程并发情况下数据异常回滚方案

一、 多线程并发情况下数据异常回滚解决方案 在需要多个没有前后顺序的数据操作情况下&#xff0c;一般我们可以选择使用并发的形式去操作&#xff0c;以提高处理的速度&#xff0c;但并发情况下&#xff0c;我们使用 Transactional 还能解决事务回滚问题吗。 例如有下面表结…

Go语言并发

Go语言并发学习目标 出色的并发性是Go语言的特色之一 • 理解并发与并行• 理解进程和线程• 掌握Go语言中的Goroutine和channel• 掌握select分支语句• 掌握sync包的应用 并发与并行 并发与并行的概念这里不再赘述, 可以看看之前java版写的并发实践; 进程和线程 程序、进程…

C语言3:根据身份证号输出生年月日和性别

18位身份证号码第7到10位为出生年份(四位数)&#xff0c;第11到12位为出生月份&#xff0c;第13 到14位代表出生日期&#xff0c;第17位代表性别&#xff0c;奇数为男&#xff0c;偶数为女。 用户输入一个合法的身份证号&#xff0c;请输出用户的出生年月日和性别。(不要求较验…

Java数据结构之第十三章、字符串常量池

目录 一、创建对象的思考 二、字符串常量池(StringTable) 三、再谈String对象创建 一、创建对象的思考 下面两种创建String对象的方式相同吗&#xff1f; public static void main(String[] args) {String s1 "hello";String s2 "hello";String s3 …

C# | 线性回归算法的实现,只需采集少量数据点,即可拟合整个数据集

C#线性回归算法的实现 文章目录 C#线性回归算法的实现前言示例代码实现思路测试结果结束语 前言 什么是线性回归呢&#xff1f; 简单来说&#xff0c;线性回归是一种用于建立两个变量之间线性关系的统计方法。在我们的软件开发中&#xff0c;线性回归可以应用于数据分析、预测和…

每日一博 - 对称加密算法 vs 非对称加密算法

文章目录 概述一、对称加密算法常见的对称加密算法优点&#xff1a;缺点&#xff1a;Code 二、非对称加密算法常见的非对称加密算法优点&#xff1a;缺点&#xff1a;Code 概述 在信息安全领域中&#xff0c;加密算法是保护数据安全的重要手段。 加密算法可以分为多种类型&am…

【Linux】线程互斥 与同步

文章目录 1. 背景概念多个线程对全局变量做-- 操作 2. 证明全局变量做修改时&#xff0c;在多线程并发访问会出问题3. 锁的使用pthread_mutex_initpthread_metux_destroypthread_mutex_lock 与 pthread_mutex_unlock具体操作实现设置为全局锁 设置为局部锁 4. 互斥锁细节问题5.…

哈夫曼树(Huffman)【数据结构】

目录 ​编辑 一、基本概念 二、哈夫曼树的构造算法 三、哈夫曼编码 假如<60分的同学占5%&#xff0c;60到70分的占15%…… 这里的百分数就是权。 此时&#xff0c;效率最高&#xff08;判断次数最少&#xff09;的树就是哈夫曼树。 一、基本概念 权&#xff08;we…

Zabbix4.0 自动发现TCP端口并监控

java端口很多&#xff0c;每台机器上端口不固定&#xff0c;考虑给机器配置组不同的组挂载模版&#xff0c;相对繁琐。直接使用同一个脚本自动获取机器上java相关的端口&#xff0c;推送到zabbix-server。有服务端口挂了自动推送告警 一、zabbix-agent配置过程 1、用户自定义参…

Apache Doris :Rollup 物化视图

整理了一下目前开启虚拟机需要用到的程序, 包括MySQL,Hadoop,Linux, hive,Doris 3.5 Rollup ROLLUP 在多维分析中是“上卷”的意思&#xff0c;即将数据按某种指定的粒度进行进一步聚合。 1.求每个城市的每个用户的每天的总销售额 select user_id,city,date&#xff0c; sum(…