python实现张正友棋盘格标定法

1.原理

**

1.1相机的内参数

**
设P=(X,Y,Z)为场景中的一点,在针孔相机模型中,其要经过以下几个变换,最终变为二维图像上的像点p=(μ,ν):

将P从世界坐标系通过刚体变换(旋转和平移)变换到相机坐标系,这个变换过程使用的是相机间的相对位姿,也就是相机的外参数。
从相机坐标系,通过透视投影变换到相机的成像平面上的像点p=(x,y)。
将像点p从成像坐标系,通过缩放和平移变换到像素坐标系上点p=(μ,ν)。
相机将场景中的三维点变换为图像中的二维点,也就是各个坐标系变换的组合,可将上面的变换过程整理为矩阵相乘的形式:
在这里插入图片描述
将矩阵K称为相机的内参数,
在这里插入图片描述
其中,α,β表示图像上单位距离上像素的个数,则fx=αf,fy=βf将相机的焦距f变换为在x,y方向上像素度量表示。
另外,为了不失一般性,可以在相机的内参矩阵上添加一个扭曲参数γ,该参数用来表示像素坐标系两个坐标轴的扭曲。则内参数K变为
在这里插入图片描述
最后可以得到相机的各个内参数:

在这里插入图片描述

1.2张氏标定法

1.准备标定图片
2.对每一张标定图片,提取角点信息
3.对每一张标定图片,进一步提取亚像素角点信息
4.在棋盘标定图上绘制找到的内角点(非必须,仅为了显示)
5.相机标定
6.对标定结果进行评价
7.查看标定效果——利用标定结果对棋盘图进行矫正

1.3切向畸变与径向畸变

径向畸变:这是由于透镜先天条件原因(透镜形状),成像仪中心(光学中心)的畸变为0,随着向边缘移动,畸变越厉害。这里有3个参数,k1,k2,k3其中k3是可选参数。
切向畸变:这是摄像机安装过程造成的,如当透镜不完全平行于图像平面的时候产生的。
如何消除径向畸变呢?
在小孔模型中,一条指向在成像平面上的像仍然是直线。但是在实际拍摄的过程中,由于透镜的存在,往往将一条直线投影成了曲线,越靠近图像的边缘,这种现象越明显。透镜往往是中心对称的,使得这种不规则的畸变通常是径向对称的。主要有两大类:桶形畸变和枕形畸变。如下图
在这里插入图片描述

2.环境与代码

2.1棋盘环境

运行环境:pyhton2.7、pycharm编译器
测试条件:手机拍照(图像16张)、手机型号华为P30

2.2图片选取

1.制作标定使用标定板。
2.可以将其打印下来固定到一张平板上就是标定使用的标定板,也可以投放到平板上选一个光线较暗不会有倒影的环境进行对平板进行拍摄。 使用同一相机从不同的位置,不同的角度,不同的姿态,拍摄标定板的多张照片(10-20张,这里选用了12张)
在这里插入图片描述

2.3代码

# coding=utf-8
import cv2
import numpy as np
import glob

# 设置寻找亚像素角点的参数,采用的停止准则是最大循环次数30和最大误差容限0.001
criteria = (cv2.TERM_CRITERIA_MAX_ITER | cv2.TERM_CRITERIA_EPS, 30, 0.001)

# 获取标定板角点的位置
objp = np.
  • 5
    点赞
  • 47
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值