记录相机成像原理(三)精确标定

偶然看到一篇论文讲到如何对相机形变进行高精度校准,因为项目需要高精度的定位,因此记录下其实现

首先对标定图像做单应性变换,标定图像如下:

可以用cv::findcheeseboard找到所有的白点中心,也可以自己找。

1. 接下来根据像素当量生成真实物理世界位置点的像素坐标集合。

2. 然后求出单应性矩阵,具体调用opencv函数,并通过pespectivetranform()生成单应性变换后的点集

但是,这时候变换后的点集还是和真实点的位置有3-4个像素的差距,但是项目要求精度保证在1个像素以内。

3. 因此在对其做 非线性多项式拟合,非线性多项式为 f(x) = a0 + a1x + a2x + a3x^2 + a4xy + a5y^ + a6x^3 + a7x^y + a8xy^ + a9y^3

也就是对于真实点x, y, 求其多项式的映射系数 (a0-a9) (b0-b9).

可以写成 Ax = b的形式(A 矩阵为点集多项式, 大小为 M x 10), x为系数矩阵,b为真实坐标(上式f(x))

4.由于M远大于10,要解这个超定矩阵 可以求其投影在其列向量的最小二乘解。先对其做投影变换 A^T A x= A^TA

   用SVD算出其最小特征值对应的特征向量即是其系数

具体参考如下:

 可以用opencv求出其系数,最后结果如下(绿色点为真实坐标,蓝色为预测坐标,只有一种颜色为重叠):

 本项目像素当量约为0.03mm,检测结果良好

原文地址:https://www.cnblogs.com/ChrisInsistPy/p/11858030.html