论文: "A Flexible New Technique for Camera Calibration" (2000).
近期要实现相位偏折术的标定,它的标定需要添加对位姿的误差考虑(改变优化的代价函数),因此不能单纯地使用opencv调用API相机标定,需要在张正友标定法基础上进行修改。于是做了下述的笔记,增加了其中数学、视觉知识基础,适合小白学习。
张正友标定法的python实现,在docs
中有详细的数学知识以及公式推导!例如:Cholesky分解、最小二乘SVD法、非线性优化原理、相机标定模型、相机畸变等。笔记大纲如下:
参数对比(因为使用的是高端工业相机,因此同原文一样仅使用
参数 | opencv | zhang(我们) |
---|---|---|
相机内参 | fx=536.45635364 fy=536.74457982 u0=342.3851978 v0=234.327832 |
fx=536.45642298 fy=536.74463621 u0=342.38517404 v0=234.32764008 |
畸变系数 | k1=-0.28094279 k2=0.0783875 |
k1=-0.28094376 k2=0.07838841 |
重投影误差 | 0.4181961868810105 | 0.41819618691818994 |
效果对比:
图1 外参:相机中心 | 图2 外参:标定板中心 |
校正对比:
图3 校正结果:zhang(我们) | 图4 与opencv校正差异 |
两者差别非常小!
创建虚拟python环境,直接使用conda
安装相应的python包即可(版本没有限制):
matplotlib==3.3.4
numpy==1.19.2
scipy==1.5.2
opencv-python==3.4.2
然后运行:main.py
即可。
请任意使用!如推导过程中有错误欢迎指出!
邮箱:fly_cjb@163.com
作者:天涯居士
时间:2022.06.01
推销下我开的结构光课程:从零搭建一套结构光3D重建系统 [理论+源码+实践]