点到面的配准算法

2023-05-16

学习一下PCL中点到面的配准算法,笔记一下以免以后忘记,好记性不如烂笔头!嘻嘻!

一、理论基础

1、估计表面法向量问题 =对点集的K最近邻点的协方差矩阵求特征值和特征向量(PCA)问题

2、假设三维点集中的任意点Pi,则

求协方差矩阵C的公式:

这里补充一下:

        协方差矩阵的阶=随机向量的维数,而与随机向量的个数无关。协方差矩阵是对称矩阵。其主对角线元素为点的各个分量的方差,可以反映点集在各个轴向的离散程度。其他元素反映了不同分量的相关性,当两个分量距各自均值发生同向偏离时,协方差(即相应的协方差矩阵元素)趋向正值,当两个分量距各自均值发生异向偏离时,协方差趋向负值。

        通过计算协方差矩阵的特征值和特征向量,可以反映出点集离散的主要方向。若特征向量为最大特征向量,则特征值即为沿着该轴的顶点数据具有的最大方差值;若特征向量为最小特征向量,则特征值即为沿着该轴的顶点数据具有的最小方差值。

因此,估计表面法线问题可以表示为:,其中

          其中,k是点Pi周围K近邻点的数量,在下文中会介绍;:K近邻点的三维质心;

                  :协方差矩阵C的第j个特征值;:第j个特征向量

注意:

       因为PCA来求解的法线方向模糊,并且不会朝向点云数据集的视点,右侧图 Extended Gaussian Image (EGI)描述了点云的所有法线方向,由于法线方向不一致,他们遍布整个球面

因此要想使数据集中所有法线始终朝向视点,需要加条件,可以看到加了条件处理后的效果更好(效果怎么看在参数的选择部分会解释)

二、选择正确的参数

选择K值的标准:

1°好的效果:估计得到的表面法线相较于两个平面垂直,并且在点云渲染图中可以看到细小的法线边缘

2°比例因子选择太大:估计得到的点特征失真,在两个平坦表面的边缘处的表面法向量发生旋转,并且,边缘模糊,丢失细节

选择K值的小技巧:

如果数据集中的圆形边缘处的曲率十分关键,那么取较小的K值会捕获更好的边缘细节,其他情况可以取大一点的K值。

三、估计法向量

算法思路

1°Create the normal estimation class, and pass the input dataset to it
2°Create an empty kdtree representation, and pass it to the normal estimation object.Its content will be filled inside the object, based on the given input dataset (as no other search surface is given)
3°Output datasets
4°Use all neighbors in a sphere of radius 3cm
5°Compute the features

PCL中的实现代码是这样的(个人感觉matlab版本的实现更清爽)

#include <pcl/point_types.h>
#include <pcl/features/normal_3d.h>

{
  pcl::PointCloud<pcl::PointXYZ>::Ptr cloud (new pcl::PointCloud<pcl::PointXYZ>);

  ... read, pass in or create a point cloud ...

  // Create the normal estimation class, and pass the input dataset to it
  pcl::NormalEstimation<pcl::PointXYZ, pcl::Normal> ne;
  ne.setInputCloud (cloud);

  // Create an empty kdtree representation, and pass it to the normal estimation object.
  // Its content will be filled inside the object, based on the given input dataset (as no other search surface is given).
  pcl::search::KdTree<pcl::PointXYZ>::Ptr tree (new pcl::search::KdTree<pcl::PointXYZ> ());
  ne.setSearchMethod (tree);

  // Output datasets
  pcl::PointCloud<pcl::Normal>::Ptr cloud_normals (new pcl::PointCloud<pcl::Normal>);

  // Use all neighbors in a sphere of radius 3cm
  ne.setRadiusSearch (0.03);

  // Compute the features
  ne.compute (*cloud_normals);

  // cloud_normals->points.size () should have the same size as the input cloud->points.size ()*
}

 

原文链接:http://pointclouds.org/documentation/tutorials/normal_estimation.php#normal-estimation

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

点到面的配准算法 的相关文章

  • linux网关下的TC控速

    控制上传下载速度理论方面的相关记录 1 对于TC限速配置方面 xff0c 最关键的要明白 xff0c TC限速实际上是在分析每个经过的IP数据包 xff0c 根据我们给定的限速规则 xff0c 将不同的IP数据包归入到不同的分类中 xff0
  • July 17th 模拟赛C T3 Circle Solution

    空降题目处 外网 点我点我点我 空降题目处 内网 点我点我点我 Description 给定三个点 xff08 不共线 xff09 的坐标 xff0c 要求以这三个点为圆心做三个圆 xff0c 圆两两不相交 xff0c 不包含 xff0c
  • 损失函数改进之Large-Margin Softmax Loss

    最近几年网络效果的提升除了改变网络结构外 xff0c 还有一群人在研究损失层的改进 xff0c 这篇博文要介绍的就是较为新颖的Large Margin softmax loss xff08 L softmax loss xff09 Larg
  • 卷积神经网络系列之softmax,softmax loss和cross entropy的讲解

    我们知道卷积神经网络 xff08 CNN xff09 在图像领域的应用已经非常广泛了 xff0c 一般一个CNN网络主要包含卷积层 xff0c 池化层 xff08 pooling xff09 xff0c 全连接层 xff0c 损失层等 虽然
  • XNOR-Net算法详解

    论文 xff1a XNOR Net ImageNet Classification Using Binary Convolutional Neural Networks 链接 xff1a https arxiv org abs 1603 0
  • PyTorch源码解读之torch.utils.data.DataLoader

    PyTorch中数据读取的一个重要接口是torch utils data DataLoader xff0c 该接口定义在dataloader py脚本中 xff0c 只要是用PyTorch来训练模型基本都会用到该接口 xff0c 该接口主要
  • PANet算法笔记

    论文 xff1a Path Aggregation Network for Instance Segmentation 论文链接 xff1a https arxiv org abs 1803 01534 这篇是CVPR2018关于实例分割
  • Ubuntu 18.04 LTS安装vncserver虚拟网络控制台

    虚拟网络控制台 xff08 VNC xff09 是一个图形桌面共享软件 xff0c 允许您使用键盘和鼠标远程控制另一台计算机 系统环境 服务端 xff1a Ubuntu 18 04 Server LTS客户端 xff1a Windows10
  • 轻松使用 Debian的Linux

    Spiral Linux 就是这样一种发行版 xff0c 它源于 Debian 它的重点在于促进简单性并为最终用户提供开箱即用的特性和功能 如果您是开源操作系统的新手 xff0c 并且想熟悉一个易于使用的 Linux 发行版 xff0c 那
  • 手残也不该敲的命令

    Linux命令是一种很有趣且有用的东西 xff0c 但在你不知道会带来什么后果的时候 xff0c 它又会显得非常危险 所以 xff0c 在输入某些命令前 xff0c 请多多检查再敲回车 rm rf rm rf是删除文件夹和里面附带内容的一种
  • Linux 基金会宣布成立 TLA+ 语言基金会

    Linux 基金会宣布成立 TLA 43 基金会 TLAF xff0c 以促进 TLA 43 编程语言及其 TLA 43 从业者社区的采用和发展 TLA 43 基金会的创始成员包括 AWS 甲骨文和微软 TLA 43 Temporal Lo
  • Linux的这七大认识误区,你千万别有!

    本文罗列了大家对Linux的七大认识误区 xff0c 看看其中那个是你也出现过的 千万别让这些先入为主的观点断送了你体验新事物的机会 Linux的受众群体并不大 对还是错 错 xff01 大错而特错 我承认 xff0c Linux的实际用户
  • oracle隔离级别深究追根

    oracle数据库 xff0c 只有两种隔离级别 xff1a read committed和serializable 简单的说 xff0c read committed是语句级隔离 xff0c serializable是事务级隔离 xff0
  • Solus Linux 改变发展方向

    Solus 是一个独立开发的 Linux 发行版 xff0c 它的一大特色就是 Solus 自创的 Budgie 桌面环境 xff08 最新的 Fedora 也已经新增了这个桌面环境 xff09 xff0c 当然用户也可以选择其他常见的 G
  • uptime 命令介绍

    Linux 小白 xff0c 若对系统管理有兴趣 xff0c 或想成为资深用户 xff0c 就需要对命令行有扎实的功底 你需要知道很多命令 xff0c 其中一个就是 uptime 文本我们会通过一些容易理解的案例来讲解一下这个命令的基本用法
  • 解决CentOS添加新网卡后找不到网卡配置文件

    使用VMware Workstation虚拟机安装好CentOS7虚拟机后 xff0c 添加网卡后CentOS 7无网卡配置文件的问题 xff0c 添加第二块网卡以后 xff0c 进入CentOS 7系统后 xff0c 看不到网卡配置文件
  • 详解将FTP映射至Windows

    在经常使用ftp传输文件的环境中 xff0c 每次上传和下载文件都需要重新连接然后登录是非常繁琐的一件事情 我们可以将FTP空间映射到本地磁盘空间 xff0c 免去输入地址以及账号 密码 方便我们日常中文件的上传和下载 1 双机桌面上的我的
  • Secure Boot什么意思?BIOS中Secure Boot灰色无法更改解决方法详解

    在电脑Bios设置中 xff0c 有一项 Secure Boot 相关设置 xff0c 很多朋友不知道Secure Boot什么意思 xff0c 也不知道该如何设置 下面本文就来谈谈Secure Boot设置相关的知识 xff0c 需要的朋
  • centos7 RAID磁盘阵列卡驱动安装图文教程

    解决方案 本方案可以支持centos7版本 UEFI模式 选择 Install CentOS Linux 7 xff0c 然后按 e 键 选择添加 linux dd xff0c 然后按 Ctrl 43 x 启动 进入如下图 虚拟光驱弹出系统
  • ubuntu 12.04 配置Ralink corp. RT3290 Wireless 802.11n 1T/1R PCIe无线网卡

    03 00 0 Network controller Ralink corp RT3290 Wireless 802 11n 1T 1R PCIe Subsystem Hewlett Packard Company Device 18ec

随机推荐

  • badblocks检查磁盘坏道

    参 数 功 能 s 显示检查进度 v 运行时显示详细的处理信息 w 做写入检测 root 64 localhost badblocks s dev sda2 Checking for bad blocks read only test do
  • 自协商(802.3)原理浅析

    题注 xff1a 在阅读过网上关于自协商的介绍文章 xff0c 在此针对阅读中遇到的疑问进行简单记录和分析 xff01 Q1 网络通信链路空闲时 xff0c 链路上固定发送检测脉冲的是TX 43 xff0c TX xff0c RX 43 x
  • ubuntu安装时姓名、计算机名、用户名的含义

    如有问题 xff0c 请加扣扣群 xff1a 460189483 ubuntu安装时 xff0c 最后一步是设置姓名 计算机名 用户名 xff0c 那么这些名字是什么意思 xff1f 之后又有什么作用呢 xff1f 下面来详解一下 安装最后
  • PB关于数据窗口内字段值改变问题

    1 在创建DW时 xff0c 如果使用select办法 xff0c 并且只查询一张表的话 xff0c PB默认自动提供修改其值 xff0c 程序运行后 xff0c 可以在DW控件内直接修改字段值 xff0c 当然如果要保存数据的话 xff0
  • 我的2016——培训、工作,回首大学

    我是一名计算机专业的本科生 xff0c 2016年7月到12月期间 xff0c 参加专业技能培训学习 在此期间接触一些其他高校的学生 xff0c 我和他们接触期间 xff0c 结合实际情况 xff0c 有以下感想 xff1a 1 在大学期间
  • ADSL Server出错解决一例(战神攻击)

    ADSL Server出现如下大量提示 var log messages Mar 19 16 36 43 ADSLserver kernel ll header ff ff ff ff ff ff 00 48 54 5b 0d 3f 08
  • uboot sf 命令用法

    转自 xff1a https blog csdn net kickxxx article details 56012456 uboot中如果支持spi qspi flash 那么可以使用sf的erase read write命令操作spi
  • 灰度共生(共现)矩阵的求法

    前段时间在写关于图像的作业时 xff0c 出现了灰度共生矩阵的求法问题 于是就上网查资料发现不是很理想 xff0c 翻书查阅也是不同的书籍出现的解法也是不一样 xff0c 上别的课时老师也给我们讲了下 xff0c 但是发现与我所看到的资料上
  • Qt调试问题记录(持续更新)

    目录 前言调试平台调试记录configure报C 43 43 11缺失g 43 43 编译选项不支持 前言 本人调试Qt所遇到的问题均会记录在此 xff0c 方便回溯 调试平台 Qt版本 xff1a 5 12 11Host PC xff1a
  • websocket autobahn jar包的用法

    autobahn 0 5 0 jar 文件的地址 xff1a http pan baidu com s 1slQYcKP 使用websocket好简单方便 xff0c 据一天来我们公司的大神说 xff1a websocket是封装好的成熟的
  • Linux中vnc的配置端口号的修改

    vnc的默认端口是自己配置的 xff0c 并不是这有一个端口号 通过打开 etc sysconfig vncservers 这里就配置了2个桌面 xff0c 一个桌面号是1 xff0c 一个是2 这里的配置的参数 VNCSERVERS 61
  • oracle的sql查询分析函数-高级部分-分析函授over()子句

    oracle的分析函数 xff0c 应该是有一个格式的 function argu1 argu2 over partition by order by windowing clause 这是一个完整的分析函数的格式 我之前用的分析函数 xf
  • 使用docker搭建鸿蒙开发环境

    第一步下载docker https docs docker com engine install windows 版本https desktop docker com win stable amd64 Docker 20Desktop 20
  • 数组

    一 数组中重复的数字 题目描述 xff1a 在一个长度为n的数组里的所有数字都在0到n 1的范围内 数组中某些数字是重复的 xff0c 但不知道有几个数字是重复的 也不知道每个数字重复几次 请找出数组中任意一个重复的数字 例如 xff0c
  • JSON序列化与反序列化

    一 需要序列化的POJO和初始化代码 以下3种类库的使用均使用下面这个POJO public class User public User private String id private String name private Stri
  • 排序

    一 数据流中的中位数 题目描述 xff1a 如何得到一个数据流中的中位数 xff1f 如果从数据流中读出奇数个数值 xff0c 那么中位数就是所有数值排序之后位于中间的数值 如果从数据流中读出偶数个数值 xff0c 那么中位数就是所有数值排
  • 常用的shell语句

    看文件里第几行 看倒数5行 tail n 5 SpecialVariable sh 看正数3行到最后一行 tail n 43 3 SpecialVariable sh 查看磁盘空间大小 df h 查看内存空间大小 top n 1 xff08
  • 【转载】SLAM技术 即将颠覆哪些领域

    什么是SLAM xff1f 机器人在未知环境中 xff0c 要实现智能化需要完成三个任务 xff0c 第一个是定位 xff08 Localization xff0c 第二个是建图 Mapping xff0c 第三个则是随后的路径规划 Nav
  • SIFT学习笔记(结合matlab源码)

    源码下载地址 xff1a https download csdn net download u014509577 11011793 一 算法流程 1 生成高斯金字塔 xff0c 并由此生成差分高斯金字塔 xff08 DoG xff09 xf
  • 点到面的配准算法

    学习一下PCL中点到面的配准算法 笔记一下以免以后忘记 好记性不如烂笔头 嘻嘻 一 理论基础 1 估计表面法向量问题 xff1d 对点集的K最近邻点的协方差矩阵求特征值和特征向量 xff08 PCA xff09 问题 2 假设三维点集中的任