jsYangCode / ZhangZhengYou

张正友标定法的数学原理以及python源码实现(详细)

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

详细推导并手写张正友标定法(python)

论文: "A Flexible New Technique for Camera Calibration" (2000).

参考:https://github.com/goldbema/CameraCalibration

说明

近期要实现相位偏折术的标定,它的标定需要添加对位姿的误差考虑(改变优化的代价函数),因此不能单纯地使用opencv调用API相机标定,需要在张正友标定法基础上进行修改。于是做了下述的笔记,增加了其中数学、视觉知识基础,适合小白学习。

张正友标定法的python实现,在docs 中有详细的数学知识以及公式推导!例如:Cholesky分解、最小二乘SVD法、非线性优化原理、相机标定模型、相机畸变等。笔记大纲如下:

image-20220601093046478 image-20220601093113140

参数对比(因为使用的是高端工业相机,因此同原文一样仅使用 $k1,k2$ 进行畸变参数校正,没有考虑切向畸变以及$k3$系数,因为过多的参数反而可能导致求解不稳定):

参数 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

效果对比:

image-20220601095016645 image-20220601095055781
图1 外参:相机中心 图2 外参:标定板中心

校正对比:

image-20220601095133799 image-20220601095210908
图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重建系统 [理论+源码+实践]

About

张正友标定法的数学原理以及python源码实现(详细)

License:Creative Commons Zero v1.0 Universal


Languages

Language:Python 100.0%