ICP配准算法

news2024/11/15 11:54:15

配准算法

  • 问题定义
  • ICP(point to point)算法思想步骤分解
  • point to point和point to plane的区别
  • ICP配准算法的标准流程
  • NDT

本篇将介绍配准算法,将介绍ICP(point to point)、ICP(point to plane)和NDT算法。其中ICP有两种,point to point表示通过构建点与点的对应关系完成代价损失的最优化,point to plane表示通过构建点到面的对应关系完成代价损失的最优化。

问题定义

配准算法就是通过迭代完成两个点集的旋转矩阵 R R R和平移矩阵 T T T的迭代求解。数学定义如下:
给定源点集 P , P = { p 1 , p 2 , . . . , p n } , p i ∈ R m P,P=\{p_1,p_2,...,p_n\},p_i\in R_m P,P={p1,p2,...,pn},piRm,和目标点击 Q = { q 1 , q 2 , . . . , q n } , q i ∈ R m Q=\{q_1,q_2,...,q_n\},q_i\in R_m Q={q1,q2,...,qn},qiRm。两个点集之间存在着旋转 R R R和平移 t t t的转化关系,构建如下损失函数(点与点在某个尺度上的距离), E ( R , t ) = 1 n ∑ i = 1 n ∥ q i − R p i − t ∥ 2 E(R, t)=\frac{1}{n} \sum_{i=1}^{n}\left\|q_{i}-R p_{i}-t\right\|^{2} E(R,t)=n1i=1nqiRpit2最优化损失函数 R , t = arg ⁡ R , t min ⁡ E ( R , t ) = arg ⁡ R , t min ⁡ 1 n ∑ i = 1 n ∥ q i − R p i − t ∥ 2 = ∥ Q − ( R P + t 1 T ) ∥ F 2 ,  s.t.  R R T = I m \begin{align} R, t&=\arg _{R, t} \min E(R, t) \\&=\arg _{R, t} \min \frac{1}{n} \sum_{i=1}^{n}\left\|q_{i}-R p_{i}-t\right\|^{2}{\tiny } \\ &= \left\|Q-\left(R P+t \mathbf{1}^{T}\right)\right\|_{F}^{2}, \text { s.t. } R R^{T}=I_{m} \end{align} R,t=argR,tminE(R,t)=argR,tminn1i=1nqiRpit2= Q(RP+t1T) F2, s.t. RRT=Im其中, P = [ p 1 , . . . , p n ] ∈ R m × n , p i ∈ R m Q = [ q 1 , . . . , q n ] ∈ R m × n , q i ∈ R m   1 = [ 1 , 1 , . . . , 1 ] T ∈ R n P = [p_1,...,p_n] \in R_{m \times n}, p_i \in R_m \\\\\\\\\\\\\\\\\\\\\\ Q = [q_1,...,q_n] \in R_{m \times n}, q_i \in R_m \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ \mathbf{1} = [1,1,...,1]^T \in R_n P=[p1,...,pn]Rm×n,piRmQ=[q1,...,qn]Rm×n,qiRm 1=[1,1,...,1]TRn得,也是Procrustes Transformation的求解过程 μ p = 1 n ∑ i = 1 n p i , μ 1 = 1 n ∑ i = 1 n q i P ′ = { p i − μ p } , Q ′ = { q i − μ q } O ′ P ′ T = U Σ V T R = U V T , t = μ q − R μ q \mu_p = {1 \over n} \sum_{i=1}^np_i, \mu_1 = {1 \over n} \sum_{i=1}^nq_i \\ P^{'} =\{ p_i - \mu_p \}, Q^{'}=\{q_i- \mu_q \} \\ O^{'}P^{'T} = U \Sigma V^T \\ R = U V^T, t = \mu_q-R\mu_q μp=n1i=1npi,μ1=n1i=1nqiP={piμp},Q={qiμq}OPT=UΣVTR=UVT,t=μqRμq其中 R , t R,t R,t即为集合P与Q之间的旋转平移,不过需要注意的是,这是迭代解,求出的只是当前集合状态的最优解。并不是最终解。

ICP(point to point)算法思想步骤分解

以ICP算法为例子,配准算法分为以下步骤:

  1. 给定集合P和Q,从中提取部分点(记为集合 s u b P , s u b Q subP,subQ subPsubQ)进行求解,可以使用随机采样,体素降采样,NSS采样和特征提取(比如ISS提取特征点)
  2. 选定匹配的若干点对,对于选出集合 s u b P subP subP中的每个点 p i p_i pi,在集合 s u b Q subQ subQ中找到邻居点。邻居点的尺度可以使用欧式空间最邻近思想,也可以是特征描述子空间的距离(对应ISS算法提取的特征点的特征描述子),也可以选用Normal shooting思想和Projection思想。要求双方互为最近邻居,并且为了算法的精度,可以仅仅使用点对距离超过某值的点对,或者选用相对距离前百分之k的点对。
    前两个都容易理解,后两个的直观表达如下:
    在这里插入图片描述
    在这里插入图片描述
  3. 构建point to point类型的优化函数进行迭代,完成当前迭代的旋转平移矩阵求解。
    R , t = arg ⁡ R , t min ⁡ E ( R , t ) = arg ⁡ R , t min ⁡ 1 n ∑ i = 1 n ∥ q i − R p i − t ∥ 2 = ∥ Q − ( R P + t 1 T ) ∥ F 2 ,  s.t.  R R T = I m \begin{align} R, t&=\arg _{R, t} \min E(R, t) \\&=\arg _{R, t} \min \frac{1}{n} \sum_{i=1}^{n}\left\|q_{i}-R p_{i}-t\right\|^{2}{\tiny } \\ &= \left\|Q-\left(R P+t \mathbf{1}^{T}\right)\right\|_{F}^{2}, \text { s.t. } R R^{T}=I_{m} \end{align} R,t=argR,tminE(R,t)=argR,tminn1i=1nqiRpit2= Q(RP+t1T) F2, s.t. RRT=Im4. 判断旋转平移矩阵的更新量是否已经满足阈值,如果是满足就终止,输出最后的结果。如果没有,就迭代到最大次数。

point to point和point to plane的区别

  • 算法思想的不同
    point to point和point to plane类型的ICP算法之间的优化函数构建思想不同。

    • 在点对点配准中,算法通过最小化两个点云之间的点与点之间的距离来实现配准。这意味着算法试图将一个点云中的每个点与另一个点云中的最近邻点对齐,然后通过优化来最小化它们之间的距离。
    • 点对点配准适用于两个点云表面之间存在较小的形变,并且点云中的噪声较少的情况。
    • 点对点匹配只是寻找了匹配点,点邻域内的信息没有使用,没有考虑上下文,并且最近邻查找的时候时间消耗大。
    • 在点对面配准中,不仅考虑了点的位置,还考虑了点的法线(即表面的朝向),从而更好地描述了表面的几何特征。
    • 点对面配准试图最小化一个点到另一个点云表面的法线方向上的投影之间的距离,而不仅仅是点之间的距离。这意味着算法不仅考虑了点的位置,还考虑了点云表面的曲率和法线方向,因此能够更好地处理曲面之间的配准。
    • 点对面配准通常比点对点配准更稳健,因为它们对点云中的噪声和表面曲率变化更具有鲁棒性
  • 优化函数求解不同
    point to point的优化函数形式为:
    R , t = arg ⁡ R , t min ⁡ E ( R , t ) = arg ⁡ R , t min ⁡ 1 n ∑ i = 1 n ∥ q i − R p i − t ∥ 2 \begin{align} R, t&=\arg _{R, t} \min E(R, t) \\&=\arg _{R, t} \min \frac{1}{n} \sum_{i=1}^{n}\left\|q_{i}-R p_{i}-t\right\|^{2}{\tiny } \\ \end{align} R,t=argR,tminE(R,t)=argR,tminn1i=1nqiRpit2point to plane的优化函数形式为: R , t = arg ⁡ R , t min ⁡ E ( R , t ) = arg ⁡ R , t min ⁡ 1 n ∑ i = 1 n ∥ ( R p i + t − q i ) T n i ∥ 2 \begin{align} R, t&=\arg _{R, t} \min E(R, t) \\&=\arg _{R, t} \min \frac{1}{n} \sum_{i=1}^{n}\left\|(R p_{i}+t-q_i)^Tn_i\right\|^{2}{\tiny } \\ \end{align} R,t=argR,tminE(R,t)=argR,tminn1i=1n (Rpi+tqi)Tni 2其中, n i n_i ni为点 q i q_i qi的法向量。
    对于point to plane的优化函数,采用最小二乘法的方式进行求解,计算过程如下,
    在这里插入图片描述在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

ICP配准算法的标准流程

  • 粗配置
    粗配准使用RANSAC+ISS+FPFH完成

    • 使用ISS算法完成点集P和Q的特征点提取,并计算FPFH特征描述子ru
    • 在特征描述空间寻找两个点集中关键点在对方集合中的配对点,构成配对点集集合。
    • 采用RANSAC算法,从配对点集中,选择3个点对。采用Procrustes Transformation的求解思路完成3个点对的 R , t R,t Rt求解
    • 根据得到的 R , t R,t R,t,完成源点云P的几何位置变换。然后计算配对点之间的几何距离,设置距离阈值,得到内点个数。
    • 如果内点个数满足阈值要求,就终止。如果不满足,就一直迭代到最大次数,选择所有迭代中内点比例最高的一次迭代的 R , t R,t R,t结果,作为ICP配准的初始解
  • 精配置
    精配准的时候,可以不用完成点云的降采样,选用全部点进行计算。尺度为欧式几何空间,在欧式空间中,寻找双方互为最近邻的配对点,保留TOP k进行P进行计算。

NDT

NDT算法有点复杂,NDT相对ICP而言,可以更好的利用周围邻域信息,有更好的鲁棒性,而且效率而比较高。具体思路等之后整理

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

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

相关文章

力扣347. 前 K 个高频元素

思路:记录元素出现的次数用map; 要维护前k个元素,不至于把所有元素都排序再取前k个,而是新建一个堆,用小根堆存放前k个最大的数。 为什么是小根堆?因为堆每次出数据时只出堆顶,每次把当前最小的…

文旅元宇宙|“元宇宙+”全面赋能智慧文旅场景建设

元宇宙作为下一代互联网入口,正在潜移默化的改变着人生的生活方式,不断催生新业态,带给人们前所未有的体验。元宇宙概念的崛起,正以其独特的魅力,引领着一场全新的智慧文旅革命。元宇宙,这个融合了虚拟现实…

物联网实战--入门篇之(九)安卓QT--开发框架

目录 一、QT简介 二、开发环境 三、编码风格 四、设计框架 五、总结 一、QT简介 QT是一款以C为基础的开发工具,已经包含了很多常用的库,除了基本的GUI以外,还有网络、数据库、多媒体、进程通信、串口、蓝牙等常用库,开发起来…

Vue3_2024_7天【回顾上篇watch常见的后两种场景】

随笔:这年头工作不好找咯,大家有学历提升的赶快了,还有外出人多注意身体,没错我在深圳这边阳了,真的绝啊,最尴尬的还给朋友传染了!!! 之前三种的监听情况,监听…

Godot 4 教程《勇者传说》依赖注入 学习笔记(0):环境配置

文章目录 前言相关地址环境配置初始化环境配置文件夹结构代码结构代码运行 资源文件导入像素风格窗口环境设置背景设置,Tileap使用自动TileMap 人物场景动画节点添加站立节点添加移动动画添加 通过依赖注入获取Godot的全局属性项目声明 当前项目逻辑讲解角色下降添加代码位置问…

ssm028蜀都天香酒楼的网站设计与实现+jsp

基于JSP的蜀都天香酒楼管理系统的设计与实现 摘要 近年来,信息化管理行业的不断兴起,使得人们的日常生活越来越离不开计算机和互联网技术。首先,根据收集到的用户需求分析,对设计系统有一个初步的认识与了解,确定蜀都…

C语言数据结构(11)——归并排序

欢迎来到博主的专栏C语言数据结构 博主ID:代码小豪 文章目录 归并排序两个有序数组的合并归并归并排序 归并排序的代码 归并排序 两个有序数组的合并 当前有两个有序数组arr1和arr2,我们创建一个可以容纳arr1和arr2同等元素个数的新数组arr。 让一个…

AGILEFORMER:用于医学图像分割的空间敏捷 Transformer UNET

AGILEFORMER:用于医学图像分割的空间敏捷 Transformer UNET 摘要IntroductionMethodDeformable Patch Embedding2.1.1 Rigid patch embedding2.1.2 Deformable patch embedding Spatially Dynamic Self-AttentionDeformable Multi-head Self-Attention (DMSA)Neighb…

Java | Leetcode Java题解之第11题盛最多水的容器

题目&#xff1a; 题解&#xff1a; public class Solution {public int maxArea(int[] height) {int l 0, r height.length - 1;int ans 0;while (l < r) {int area Math.min(height[l], height[r]) * (r - l);ans Math.max(ans, area);if (height[l] < height[r]…

Docker之镜像与容器的相关操作

目录 一、Docker镜像 搜索镜像 下载镜像 查看宿主机上的镜像 删除镜像 二、Docker容器 创建容器 查看容器 启停容器 删除容器 进入容器 创建/启动/进入容器 退出容器 查看容器内部信息 一、Docker镜像 Docker 运行容器前需要本地存在对应的镜像&#xff0c; 如…

OWASP TOP10 漏洞详解

前言 该内容是 OWASP TOP 10 的学习笔记&#xff0c;笔记内容来源 B 站龙哥的视频【12.Top漏洞10&#xff1a;服务器请求伪造_哔哩哔哩_bilibili】 一、访问控制崩溃 概念 未对通过身份验证的用户实施恰当的访问控制。攻击者可以利用这些缺陷访问未经授权的功能或数据&#xf…

一篇文章Linux技术急速入门,掌握这些命令可以解决日常 99% 的问题

一篇文章Linux技术急速入门&#xff0c;掌握这些命令可以解决日常 99% 的问题。 当你听到Linux[1]时&#xff0c;大多数人会想到只有程序员才会使用的复杂操作系统。但是&#xff0c;其实并非如此&#xff0c;虽然Linux给普通用户的感觉可能很深奥&#xff0c;需要很多操作命令…

逆向案例14——cnki学术翻译AES加密分析,涉及保持会话和获取token值

python代码&#xff1a; import execjs import requests UA "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36" token_url "https://dict.cnki.net/fyzs-front-api/getToken" url …

测试工程师求职是选自研公司还是选外包公司呢?

大家好&#xff0c; 今天我们一起来聊一聊测试工程师求职是选自研公司&还是选外包公司呢&#xff1f; 今天来谈谈我的个人看法&#xff0c;作为一个在测试岗位上多年的我来说&#xff0c;自研公司比较好&#xff0c;外包公司其实也不会差。各自都有特点特色&#xff0c;根据…

能否安全地删除 Mac 资源库中的文件?

在管理Mac电脑存储空间时&#xff0c;用户确实可能考虑对资源库&#xff08;Library&#xff09;文件夹进行清理以释放空间。Mac资源库是一个系统及应用程序存放重要支持文件的地方&#xff0c;其中包括但不限于配置文件、临时文件、缓存、插件、偏好设置、应用程序支持数据等。…

Django路由配置

简单说一下django路由配置&#xff0c;发现很多同学出错。 首先&#xff0c;先创建自己的app文件&#xff08;用 python manage.py startapp myApp来创建自己的app&#xff09; 这个是自己 在Django的配置文件setting.py添加自己的项目文件myapp ok&#xff0c;此时就可以添加路…

JavaWeb后端——Mybatis

概述 Mybatis&#xff1a;Java程序来对数据库进行操作&#xff0c;一款优秀的持久层框架&#xff0c;用于简化JDBC的开发 SSM&#xff1a;SpringMVC、Spring、Mybatis 快速入门 步骤2&#xff1a;注意数据库连接的四要素 application.properties&#xff1a;springboot 的默…

百度富文本编辑器配置(vue3)

今天分享一下我做的项目里面的一个百度富文本的配置问题&#xff0c;安装配置流程以及如何解决的 1.首先是安装组件 # vue-ueditor-wrap v3 仅支持 Vue 3 npm i vue-ueditor-wrap3.x -S # or yarn add vue-ueditor-wrap3.x 2. 下载 UEditor UEditor 并不支持通过 npm 的方式…

mid格式是什么文件?怎么把mid转换成MP3?

MID&#xff08;Musical Instrument Digital Interface&#xff09;文件格式可以追溯到20世纪80年代&#xff0c;当时音频技术正在蓬勃发展。为了促进不同音乐设备之间的数据交流&#xff0c;MID格式应运而生。其初衷是作为一种标准的音乐数据传输协议&#xff0c;使得各类乐器…

C之结构体初始化10种写法总结(九十)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…