OpenCV
+ windows or ubuntu
mkdir build && build
cmake ..
make
- 单目棋盘格标定
./chessboard_calib ../imgs/chessboard/ ../imgs/chessboard/
- 单目对称圆点标定
./circle_board_calib
注意:
- 对于圆点标定板,需要用BLOB斑点检测器检测斑点,进而获取圆心。然而Blob检测器检测正确与否非常依赖检测参数的设置。
- 对OpenCV API
calibrateCamera
可以设置标定算法选项,引入若干先验,比如固定k3=0,固定光心,固定p1,p2=0等。
相机标定本质上是设计R3中已知尺寸的平面图案,使得其投影到图像后特征点具有显著性,容易被算法检测。接着通过构造三维空间和图像中的3D-2D匹配点对,计算投影矩阵Hi = K[r1i, r2i, ti] (令平面上点在世界坐标系中Z=0)。接着可以利用r1,r2的正交约束和归一化约束,一个投影矩阵得到两个方程:
-
h2iK-TK-1h1i = 0
-
h1iK-TK-1h1i = h2iK-TK-1h2i
由于内参具有5个未知量,因此至少需要三幅正确检测特征点的图像。求出内参后,用LM非线性优化算法计算畸变参数。
常见的相机标定板有四种,分别是棋盘格,对称圆点标定板、非对称圆点标定板和ChArUco板。对应特征点检测算法分别检测角点(鞍点)、投影椭球中心、投影椭球中心、棋盘格与ArUco的角点。
OpenCV支持四种标定板的标定(Matlab2021之前的版本只支持棋盘格),本仓库代码是C++ OpenCV对应官方标定例子的总结。
[1] OpenCV对称圆点标定
[2] CSDN-ChArUco