最小二乘法——拟合平面方程(深度相机外参标定、地面标定)

2023-11-11

1.最小二乘法

最小二乘法(又称最小平方法)是一种数学优化技术。它通过最小化误差的平方和寻找数据的最佳函数匹配。利用最小二乘法可以简便地求得未知的数据,并使得这些求得的数据与实际数据之间误差的平方和为最小。最小二乘法还可用于曲线拟合。其他一些优化问题也可通过最小化能量或最大化熵用最小二乘法来表达。

最小二乘法的矩阵形式为:
A x = b Ax=b Ax=b
其中 A A A n ∗ k n * k nk 的矩阵, x x x k ∗ 1 k*1 k1 的列向量, b b b n ∗ 1 n*1 n1 的列向量。如果 n > k n>k n>k(方程的个数大于未知量的个数),这个方程系统称为矛盾方程组 Over Determined System,如果 n < k n<k n<k(方程的个数小于未知量的个数),这个系统就是Under Determined System。

当找到向量 x x x 使得 ∣ ∣ A x − b ∣ ∣ ||Ax-b|| Axb 最小,则 x x x 为该方程的最小二乘解

求解最小二乘的方法有奇异值分解、正规方程、QR分解三种。本文中采用正规方程对平面方程进行拟合,以实现深度相机的外参标定。正规方程组的解为:
x = ( A T A ) − 1 A T b x=(A^TA)^{-1}A^Tb x=(ATA)1ATb

2.平面方程拟合

平面方程的一般表达式为
A x + B y + C z + D = 0 ( C ≠ 0 ) Ax+By+Cz+D=0 (C\neq0) Ax+By+Cz+D=0C=0
将其变换为如下形式
z = − A C x − B C y − D C z=-\frac{A}{C}x-\frac{B}{C}y-\frac{D}{C} z=CAxCByCD
a 0 = − A C ; a_0=-\frac{A}{C}; a0=CA; a 1 = − B C ; a_1=-\frac{B}{C}; a1=CB; a 2 = − D C ; a_2=-\frac{D}{C}; a2=CD;
z = a 0 x + a 1 y + a 2 z=a_0x+a_1y+a_2 z=a0x+a1y+a2
此时对应的最小二乘矩阵形式

A = ( x 1 y 1 1 x 2 y 2 1 . . . x n y n 1 ) ; x = ( a 0 a 1 a 2 ) ; b = ( z 1 z 2 . . . z n ) ; ( n ≥ 3 ) A=\begin{pmatrix} x_1&y_1&1\\x_2&y_2&1\\...\\x_n&y_n&1\end{pmatrix}; x=\begin{pmatrix}a_0\\a_1\\a_2\end{pmatrix};b=\begin{pmatrix} z_1 \\ z_2 \\ ...\\ z_n\end{pmatrix};(n\geq3) A=x1x2...xny1y2yn111;x=a0a1a2;b=z1z2...zn;(n3)

其中 ( x 1 , y 1 , z 1 ) , ( x 2 , y 2 , z 2 ) , . . . , ( x n , y n , z n ) (x_1,y_1,z_1),(x_2,y_2,z_2),...,(x_n,y_n,z_n) (x1,y1,z1),(x2,y2,z2),...,(xn,yn,zn)为输入的三维点坐标。

套用正规方程组的解,即可求得 ( a 0 , a 1 , a 2 ) ; (a_0,a_1,a_2); (a0,a1,a2);

3.标定——构造旋转矩阵

在实际使用中,经常会采用地面作为参照平面,将相机坐标系转化为世界坐标系,本文中使用最小二乘法对地面点云拟合平面方程,将相机坐标系Z轴旋转至垂直地面

如上求解出地面的平面方程系数,则平面方程一般式为:
a 0 x + a 1 y − z + a 2 = 0 a_0x+a_1y-z+a_2=0 a0x+a1yz+a2=0
其法向量为:
( a 0 a 0 2 + a 1 2 + 1 , a 1 a 0 2 + a 1 2 + 1 , − 1 a 0 2 + a 1 2 + 1 ) (\frac{a_0}{\sqrt{a_0^2+a_1^2+1}},\frac{a_1}{\sqrt{a_0^2+a_1^2+1}},\frac{-1}{\sqrt{a_0^2+a_1^2+1}}) (a02+a12+1 a0,a02+a12+1 a1,a02+a12+1 1)
求得平面法向量的单位向量为 n ⃗ \vec{n} n
相机坐标系的Z轴向量 z ⃗ \vec{z} z ( 0 , 0 , 1 ) (0,0,1) (0,0,1)
旋转向量为 r ⃗ \vec{r} r ,其中 r ⃗ \vec{r} r 方向为 n ⃗ × z ⃗ \vec{n}\times\vec{z} n ×z ,旋转角度为 θ = a r c c o s ( n ⃗ ⋅ r ⃗ ) \theta=arccos(\vec{n}\cdot\vec{r}) θ=arccos(n r )

使用 Eigen::AngleAxisd 将旋转向量转化为 Eigen::Matrix3d 的旋转矩阵。

4.代码

	//0.最小二乘拟合平面方程
	//planePoints存储相机坐标系选择地面区域内的所有三维点云
	Eigen::MatrixXd A(planePoints.size(), 3);
	Eigen::VectorXd b(planePoints.size());
	//将观测点输入矩阵
	for (int i = 0; i < planePoints.size(); i++)
	{
		A(i, 0) = planePoints[i].x;
		A(i, 1) = planePoints[i].y;
		A(i, 2) = 1;
		b(i) = planePoints[i].z;
	}
	Eigen::MatrixXd AT = A.transpose();
	//使用最小二乘法求得系数向量
	Eigen::Vector3d x = (AT*A).inverse()*AT*b;

	//1.求解旋转矩阵
	//单位法向量
	double denominator = sqrt(x(0)*x(0) + x(1)*x(1) + 1);
	Eigen::Vector3d n(x(0) / denominator, x(1) / denominator, -1 / denominator);
	n = n.normalized();
	Eigen::Vector3d zdir(0, 0, 1);
	//求解两向量的旋转向量,点乘求夹角、叉乘求旋转方向。
	Eigen::AngleAxisd rotateVector(acos(n.dot(zdir)), n.cross(zdir).normalized());
	//获取旋转矩阵
	Eigen::Matrix3d zRotateMatrix = rotateVector.matrix();

5.结果

首先选择一系列三维点云(蓝色代表有点云),如下图:

在这里插入图片描述
未转化的相机坐标系下三维点云如下图:

在这里插入图片描述

用上述构造旋转矩阵进行点云坐标系变换,令Z轴方向垂直地面,结果如下:

在这里插入图片描述
在这里插入图片描述

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

最小二乘法——拟合平面方程(深度相机外参标定、地面标定) 的相关文章

随机推荐

  • 2019下半年阿里面试失败总结

    结果预览 2年半第一次出去面试 也是第一次面试阿里 打击不小 收货也不少 最终倒在二面笔试题上 虽有不甘 但仍需收拾心情 继续努力 一面总结 在一面上 跟网上大多数的反馈相同 都是比较Java基础项 然后往深度问 我整理了下 因为我简历上写
  • springmvc <mvc:annotation-driven/><mvc:default-servlet-handler/>区别 ssm整合

    文章目录 概述 概念和核心 什么是MVC springmvc第一个程序搭建 先到依赖 idea搭建项目 eclipse搭建 在spirngmvc xml配置文件写上这个 web xml写上servlet配置 匹配优先级 流程和原理 执行流程
  • 一文解读flowable工作流

    flowable工作流的定义 流程 及项目使用 flowable工作流 1 flowable 1 1 定义 1 2 作用 1 3 流程 2 使用实例 2 1 引入pom依赖 2 2 yml文件 2 3 审批流程xml 2 4 引擎配置类 2
  • 【模板】二分

    文章目录 1 整数二分 1 1 寻找 x 或 x 的后继 1 2 寻找 x 或 x 的前驱 1 3 模板 1 4 解题步骤 2 实数二分 本文的二分模板来自 算法竞赛进阶指南 1 整数二分 对于整数域上的二分 需要注意终止边界 左右区间取舍
  • windows消息机制详解

    前言 windows是一个消息驱动的系统 windows的消息提供了应用程序之间 应用程序与windows 系统之间进行通信的手段 要想深入理解windows 消息机制的知识是必不可少的 基础 进程接收来自于鼠标 键盘等其他消息都是通过消息
  • [C/C++]函数的栈空间(避免栈空间溢出)

    个人主页 北 海 CSDN新晋作者 欢迎 点赞 评论 收藏 收录专栏 C C 希望作者的文章能对你有所帮助 有不足的地方请在评论区留言指正 大家一起学习交流 错误1 当数组的内存占用较大时 会引发异常 include
  • 手把手使用Micropython+合宙Esp32c3(驱动安装,为合宙Esp32c3安装Micropython固件库,代码上传到ESP32C3中)含Thonny和vscode两种方法

    文章目录 驱动安装 为合宙Esp32c3安装Micropython固件库 1 Micropython简介 2 Micropython解释器下载 Thonny解释器 VScode 3 ESP32C3固件库下载以及安装 固件库下载 固件库安装
  • dorado 产品简介

    dorado展现中间件是快速创建Rich Internet Application的表现层解决方案 dorado包含运行平台与开发工具 dorado可以广泛应用于各行业管理类web软件项目或产品中 dorado提高了Web应用的可用性 降低
  • 同步和异步的区别、例子

    一 同步 异步的区别 同步 是所有的操作都做完 才返回给用户结果 即写完数据库之后 在相应用户 用户体验不好 异步 不用等所有操作等做完 就相应用户请求 即先相应用户请求 然后慢慢去写数据库 用户体验较好 同步 同步的思想是 所有的操作都做
  • 《NoSQL精粹》摘要0-前言

    这个就是首页的摘要了 哈哈 当然 酱油不是这么打的 这样是要被鞭尸的 以下就是读 NoSQL精粹 的前言的摘要 当然咯 不是照抄照搬 所以有出入之处 还请指出 见谅 稳定性在数据存储领域一直颇受重视 因为企业的数据比程序存储的时间要长很多
  • bpmn-js起步

    通过本文逐步熟悉bpmn js 快速介绍 bpmn js是一个BPMN2 0渲染工具包和web建模器 使用JavaScript编写 在不需要后端服务器支持的前提下向现代浏览器内嵌入BPMN2 0流程图 这使得它很容易的嵌入到任何web应用中
  • 爬虫基础篇之Scrapy抓取京东

    虚拟环境 同一台服务器上不同的项目可能依赖的包不同版本 新版本默认覆盖旧版本 可能导致其他项目无法运行 通过虚拟环境 完全隔离各个项目各个版本的依赖包 实现运行环境互不影响 virtualenv pip install virtualenv
  • Citespace教程笔记

    1 Citespace分析和解读策略 课程连接 citespace教程 陈超美老师亲自教学 哔哩哔哩 bilibili 分析结果那些重要 那些次要 要从主到次地分析 2 Citespace软件界面简介 2 1 Citespace功能参数界面
  • java web和jsp页面的区别

    javaweb是使用java语言进行web系统开发 web系统开发 Java在web开发上处于领导地位 现在主流的是MVC的三层架构 而jsp就是页面表现层的首选 因为它出现的比较早 技术相对成熟和普及 这就是最为流行的J2EE技术 关系就
  • 最小二乘法详细推导过程

    转载自 http blog csdn net marsjohn article details 54911788 在数据的统计分析中 数据之间即变量x与Y之间的相关性研究非常重要 通过在直角坐标系中做散点图的方式我们会发现很多统计数据近似一
  • NOI-OJ 1.13 ID:11 回文素数

    NOI OJ 1 13 ID 11 回文素数 总时间限制 5000ms 内存限制 65536kB 描述 一个数如果从左往右读和从右往左读数字是相同的 则称这个数是回文数 如121 1221 15651都是回文数 给定位数n 找出所有既是回文
  • pr不支持mov怎么办_Premiere不支持MOV怎么办?怎么快速解决?

    原标题 Premiere不支持MOV怎么办 怎么快速解决 现在网上视频素材的质量参差不齐 而且下载的渠道很多 所以不少视频下载到本地后 都因为编码不规范而不能导入premiere中 一些MOV格式的视频也是这样 premiere是不支持的而
  • 【数据结构常见七大排序(一)】—插入排序篇【直接插入排序】And【希尔排序】

    目录 1 排序的概念及其运用 1 1排序的概念 1 2排序运用 1 3常见的七大排序 2 直接插入排序 2 1基本思想 2 2直接插入排序 2 3动图助解 2 4直接插入排序源码 2 5直接插入排序的特性总结 3 希尔排序 缩小增量排序 3
  • 【Java练习题】输出n行杨辉三角

    1 题目描述 杨辉三角的两个边都是1 内部其它都是肩上两个数的和 2 做题思路 杨辉三角开头和结尾都是1 杨辉三角第i行第j列元素是上一行i 1的元素和它前一个元素的和 公式表示 list i j list i 1 j list i 1 j
  • 最小二乘法——拟合平面方程(深度相机外参标定、地面标定)

    1 最小二乘法 最小二乘法 又称最小平方法 是一种数学优化技术 它通过最小化误差的平方和寻找数据的最佳函数匹配 利用最小二乘法可以简便地求得未知的数据 并使得这些求得的数据与实际数据之间误差的平方和为最小 最小二乘法还可用于曲线拟合 其他一