张正友标定法
0、张正友标定法论文
本篇博文参考张正友博士的两篇论文:Flexible camera calibration by viewing a plane from unknown orientation和 A Flexible New Technique for Camera Calibration1、张正友标定法
首先,我们学习了相机成像模型,通过那个模型,很容易理解下面的公式。
在这里插入图片描述
后面的 r i r_i ri和 t t t是外参矩阵列向量表示形式,这样写的好处是可以利用旋转矩阵的性质来构建一些约束。
1.0 旋转矩阵的性质
①每一行每一列的模,都为1;②任意两个列向量或者任意两个行向量都是正交的;
③正交矩阵的逆等于正交矩阵的转置。
后面会用到上面旋转矩阵的性质。
1.1 求解单应性矩阵
我们标定时使用的是平面标定板(这里以棋盘格为例),我们将 X O Y XOY XOY平面设置在标定板平面上, 轴垂直向外,这样对于检测的所有特征点都有
Zw=0的关系。
在这里插入图片描述
带入上面那个式子,会有:
因为Zw=0,所以我们消掉了r3。
令
这个*H*就是单应性矩阵,我们把它展开得到,
这样我们已知棋盘格上各个点的3D坐标(棋盘格的尺寸我们已知),以及图像平面上各个对应角点的像素坐标,就可以把
接着将 s带入前两个方程有,
也就是说, H有8个自由度。关于几种矩阵的自由度问题可以看这篇博客。
定义
以上
我们将上式写为
1.2 求解内参矩阵
我们上面求得的单应矩阵可能和真实的值存在一个尺度因子,我们增加一个尺度因子 , 有
由1.0节提到的旋转矩阵的性质可得两个约束条件:
通过上面红字推导可知,图片中的公式其实是这样的
其中,
令
至于为什么我们把B矩阵铺成一个向量的时候,只留下了6个元素,其实算一算这个B就知道了。
至此,之前的约束方程简化为:
其中,v中都是已知量,这又构成了一个Sh=0的方程。我们知道,每张标定图都可以提供一个上述约束关系(对应一个H),而每个方程都会提供两个约束方程。 B本身有6个位置元素,因此理论上,三张标定图片就可以解出上述方程。当标定图超过3张时,也可以使用最小二乘法求解对应的超定方程。可以用奇异值分解和LM方法得到B.
得到B之后,就可以根据B与内参矩阵元素的关系解出
1.3 求解外参矩阵
我们知道(包含尺度因子在里面)
这里面我们已经求解出了H和A,并且根据前面1.0节旋转矩阵的性质,所以有,
这时候就差一个
到此为止,内外参都计算出来了。
由于图像存在噪声,所以我们得到的R其实并不一定满足正交的性质,因此使用优化的方法来得到最佳的R ,
在作者的原文中是这样说的:
如果感兴趣可以自己去探索。
1.4 求解畸变系数
论文中:
1.5 非线性优化
注意:上面一系列操作都是为了得到各个参数的初值,有了初值,我们就可以利用相机模型+畸变模型对棋盘格上的3d点进行投影,建立重投影误差方程,然后利用非线性优化方法得到各个参数的准确值。
非线性优化方法介绍可以参考这篇文章。
2、单应性矩阵有什么用
关于单应性矩阵,我推荐阅读一下六哥的公众号文章神奇的单应性矩阵。
————————————————
版权声明:本文为CSDN博主「宛如新生」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/Walking_roll/article/details/125821110
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理