python计算机视觉 相机标定--张正友棋盘格标定法

本文详细介绍了使用Python进行相机标定的过程,包括相机标定的原理、算法流程、单应性矩阵计算、内参数矩阵和外参数矩阵的求解,以及最大似然估计方法。通过拍摄棋盘格图像,利用最少三幅不同角度的图片来确定相机参数。实验结果显示了内参矩阵和畸变矫正系数,对于计算机视觉和机器视觉应用具有重要意义。
摘要由CSDN通过智能技术生成


原理解析

相机标定

在图像测量过程以及机器视觉应用中,为确定空间物体表面某点的三维几何位置与其在图像中对应点之间的相互关系,必须建立相机成像的几何模型,这些几何模型参数就是相机参数。在大多数条件下这些参数必须通过实验与计算才能得到,这个求解参数的过程就称之为相机标定(或摄像机标定)。

无论是在图像测量或者机器视觉应用中,相机参数的标定都是非常关键的环节,其标定结果的精度及算法的稳定性直接影响相机工作产生结果的准确性。

算法流程

(1)打印一张棋盘方格图并贴在一个平面上
(2)从不同角度拍摄若干张模板图像
(3)检测出图像中的特征点
(4)由检测到的特征点计算出每幅图像中的平面投影矩阵H
(5)确定出摄像机的参数

计算单应性矩阵H

单应性:在计算机视觉中被定义为一个平面到另一个平面的投影映射。首先确定,图像平面与标定物棋盘格平面的单应性。

单应性:在计算机视觉中被定义为一个平面到另一个平面的投影映射。首先确定,图像平面与标定物棋盘格平面的单应性。

设三维世界坐标的点为
在这里插入图片描述

二维相机平面像素坐标为

在这里插入图片描述

所以标定用的棋盘格平面到图像平面的单应性关系为:
在这里插入图片描述

(其中,K为相机的内参矩阵,R为外部参数矩阵(旋转矩阵),T为平移向量。令

在这里插入图片描述

设棋盘格位于Z=0的平面,定义旋转矩阵R的第i列为 ri, 则有:
在这里插入图片描述

于是空间到图像的映射可改为:H=λK[r1 r2 t]
其中H 是描述Homographic矩阵,可通过最小二乘,从角点世界坐标到图像坐标的关系求解。

计算内参数矩阵

根据步骤1中的式子,令 H 为 H = [h1 h2 h3],则 [h1 h2 h3]=λK[r1 r2 t],再根据正交和归一化的约束可以得到等式:

在这里插入图片描述
即每个单应性矩阵能提供两个方程,而内参数矩阵包含5个参数,要求解,至少需要3个单应性矩阵。为了得到三个不同的单应性矩阵,我们使用至少三幅棋盘格平面的图片进行标定。通过改变相机与标定板之间的相对位置来得到三个不同的图片。为了方便计算,我们定义:

在这里插入图片描述
B 中的未知量可表示为6D 向量 b,在这里插入图片描述
设H中的第i列为 hi,在这里插入图片描述,根据b的定义,可以推导出公式在这里插入图片描述,在这里插入图片描述,

最后推导出:

在这里插入图片描述
通过上式,我们可知当观测平面 n ≥ 3 时,即至少3幅棋盘格图像,可以得到b的唯一解,求得相机内参数矩阵K。

计算外参数矩阵

外部参数可通过Homography求解,由 H = [h1 h2 h3] = λA[r1 r2 t],可推出:
在这里插入图片描述

最大似然估计

上述的推导结果是基于理想情况下而言,但由于可能存在一些其他干扰,所以使用最大似然估计进行优化。假设拍摄了n张棋盘格图像,每张图像有m个角点。最终获得的最大似然估计公式为:

在这里插入图片描述

代码测试

import cv2
import numpy as np
import glob
 
# 找棋盘格角点
# 棋盘格模板规格(内角点个数,内角点是和其他格子连着的点,10 X 7)
w = 10
h = 7
 
# 世界坐标系中的棋盘格点,例如(0,0,0), (1,0,0), (2,0,0) .
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值