Matlab 单双目相机标定+畸变校正

2019年1月14日 2019年1月19日

Matlab 单双目相机标定+畸变校正

不管单目双目标定第1第2步都是必须的

第3步为单目标定,第4步为双目标定

1. 标定板

您使用的棋盘图案不得为方形。一侧必须包含偶数个正方形,另一侧必须包含奇数个正方形。此条件使应用程序可以确定模式的方向。校准器将长边指定为x方向。

直接用python生成国际象棋盘格图片再打印到A4纸上做为标定板,生成图片代码如下:

Python

import cv2

import numpy as np

#A4纸的标准大小为210*297mm,这里大小设为A4的三倍,格子边长为90

width = 630

height = 891

length = 90

image = np.zeros((height,width),dtype = np.uint8)

print(image.shape[0],image.shape[1])

for j in range(height):

for i in range(width):

if((int)(i/length) + (int)(j/length))%2:

image[j,i] = 255;

cv2.imwrite("chess.jpg",image)

cv2.imshow("chess",image)

cv2.waitKey(0)

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

importcv2

importnumpyasnp

#A4纸的标准大小为210*297mm,这里大小设为A4的三倍,格子边长为90

width=630

height=891

length=90

image=np.zeros((height,width),dtype=np.uint8)

print(image.shape[0],image.shape[1])

forjinrange(height):

foriinrange(width):

if((int)(i/length)+(int)(j/length))%2:

image[j,i]=255;

cv2.imwrite("chess.jpg",image)

cv2.imshow("chess",image)

cv2.waitKey(0)

2. 拍照

拍摄图片至少10张,我拍了35张,

如果你标定的是单摄像头直接拍照就好了,

如果你标定的是双目摄像头请阅读:

————————–

3. 单目相机标定工具的使用

————————–

打开工具方法有二,方法一:点击app在下拉列表找到“camera Calibrator”

方法二:直接在MATLAB的Command Window里面输入cameraCalibrator即可调用标定应用

点击“Add Images”添加我们用摄像头已拍好的照片

最后会弹出“Checkerboard Square Size”对话框要我们输入标定板上小格子的实际边长

这步很重要,我这里是用的尺子量的为29mm

1. camera model : standard(标准) fisheye(鱼眼),我的摄像头是标准。

2.options:选中径向畸变:“2 coefficients”并且选择偏差:“Skew“和切向畸变:“Tangential Distortion“

径向畸变:通常,两个系数足以进行校准。对于严重失真,例如在广角镜头中,您可以选择3″“3 coefficients””个系数来包含k3。

偏差: 选择Compute Skew 复选框时,校准器会估算图像轴偏斜。某些相机传感器包含缺陷,导致图像的x轴和y轴不垂直。您可以使用skew参数对此缺陷进行建模。如果不选中该复选框,则假定图像轴是垂直的,大多数现代相机都是这种情况。

切向畸变: 当镜头和图像平面不平行时,发生切向畸变。切向失真系数模拟了这种类型的失真:

综上所述,我的选项为:

径向畸变:“2 coefficients” 因为我的单目摄像头不是广角

偏差:“Skew”因为我的单目摄像头是老旧的那种

切向畸变:”Tangential Distortion” 因为我拍照时是用手拿的摄像头很难和标定板平行

关于畸变可参考:

3.然后点击Calibrate等待一段时间即可完成标定

4.点击show Undistorted即可看到无畸变的图像,点击Export Camera Parameters就可以导出数据,最后记得点击Save Session可保存整个工程*.mat

导出数据后可以退出标定应用,在MATLAB主界面中的命令窗口可以查看到如下数据(或在右边的工作区双击“cameraParameters”查看):

>>

cameraParams =

cameraParameters - 属性:

Camera Intrinsics

IntrinsicMatrix: [3×3 double]

FocalLength: [762.6390 758.8221]

PrincipalPoint: [314.3942 242.9882]

Skew: 0.6420

RadialDistortion: [-0.3241 0.2864]

TangentialDistortion: [0.0082 -5.6938e-04]

ImageSize: [480 640]

Camera Extrinsics

RotationMatrices: [3×3×35 double]

TranslationVectors: [35×3 double]

Accuracy of Estimation

MeanReprojectionError: 0.1202

ReprojectionErrors: [54×2×35 double]

ReprojectedPoints: [54×2×35 double]

Calibration Settings

NumPatterns: 35

WorldPoints: [54×2 double]

WorldUnits: 'millimeters'

EstimateSkew: 1

NumRadialDistortionCoefficients: 2

EstimateTangentialDistortion: 1

estimationErrors =

cameraCalibrationErrors - 属性:

IntrinsicsErrors: [1×1 intrinsicsEstimationErrors]

ExtrinsicsErrors: [1×1 extrinsicsEstimationErrors]

>>

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

>>

cameraParams=

cameraParameters-属性:

CameraIntrinsics

IntrinsicMatrix:[3×3double]

FocalLength:[762.6390758.8221]

PrincipalPoint:[314.3942242.9882]

Skew:0.6420

RadialDistortion:[-0.32410.2864]

TangentialDistortion:[0.0082-5.6938e-04]

ImageSize:[480640]

CameraExtrinsics

RotationMatrices:[3×3×35double]

TranslationVectors:[35×3double]

AccuracyofEstimation

MeanReprojectionError:0.1202

ReprojectionErrors:[54×2×35double]

ReprojectedPoints:[54×2×35double]

CalibrationSettings

NumPatterns:35

WorldPoints:[54×2double]

WorldUnits:'millimeters'

EstimateSkew:1

NumRadialDistortionCoefficients:2

EstimateTangentialDistortion:1

estimationErrors=

cameraCalibrationErrors-属性:

IntrinsicsErrors:[1×1intrinsicsEstimationErrors]

ExtrinsicsErrors:[1×1extrinsicsEstimationErrors]

>>

————————–

4. 双目相机标定工具的使用

————————–

打开立体相机校准器

MATLAB工具条:在“ app”选项卡上的“ 图像处理和计算机视觉”部分中,单击“ Stereo Camera Calibrator”图标。

MATLAB命令提示符:输入 stereoCameraCalibrator

如下图1为相机镜头1拍摄的图片目录,2为相机镜头2拍摄的图片目录,3为标定板小格子实际边长

其他选项:

径向畸变:“2 coefficients” 因为我的单目摄像头不是广角

偏差:“Skew”因为我的双目摄像头是现代摄像头所以这一项不选

切向畸变:”Tangential Distortion” 因为我拍照时是用手拿的摄像头很难和标定板平行

然后点击Calibrate等待一段时间即可完成标定,点击Export Camera Parameters就可以导出数据,最后记得点击Save Session可保存整个工程*.mat

stereoParams =

stereoParameters - 属性:

Parameters of Two Cameras

CameraParameters1: [1×1 cameraParameters]

CameraParameters2: [1×1 cameraParameters]

Inter-camera Geometry

RotationOfCamera2: [3×3 double]

TranslationOfCamera2: [-62.0630 -1.3048 9.7289]

FundamentalMatrix: [3×3 double]

EssentialMatrix: [3×3 double]

Accuracy of Estimation

MeanReprojectionError: 0.1107

Calibration Settings

NumPatterns: 93

WorldPoints: [54×2 double]

WorldUnits: 'millimeters'

estimationErrors =

stereoCalibrationErrors - 属性:

Camera1IntrinsicsErrors: [1×1 intrinsicsEstimationErrors]

Camera1ExtrinsicsErrors: [1×1 extrinsicsEstimationErrors]

Camera2IntrinsicsErrors: [1×1 intrinsicsEstimationErrors]

RotationOfCamera2Error: [2.4278e-04 3.9806e-04 2.4674e-05]

TranslationOfCamera2Error: [0.1999 0.1391 1.0925]

>>

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

stereoParams=

stereoParameters-属性:

ParametersofTwoCameras

CameraParameters1:[1×1cameraParameters]

CameraParameters2:[1×1cameraParameters]

Inter-cameraGeometry

RotationOfCamera2:[3×3double]

TranslationOfCamera2:[-62.0630-1.30489.7289]

FundamentalMatrix:[3×3double]

EssentialMatrix:[3×3double]

AccuracyofEstimation

MeanReprojectionError:0.1107

CalibrationSettings

NumPatterns:93

WorldPoints:[54×2double]

WorldUnits:'millimeters'

estimationErrors=

stereoCalibrationErrors-属性:

Camera1IntrinsicsErrors:[1×1intrinsicsEstimationErrors]

Camera1ExtrinsicsErrors:[1×1extrinsicsEstimationErrors]

Camera2IntrinsicsErrors:[1×1intrinsicsEstimationErrors]

RotationOfCamera2Error:[2.4278e-043.9806e-042.4674e-05]

TranslationOfCamera2Error:[0.19990.13911.0925]

>>

5. 评估校准结果

通过可视化界面可以查看相机和标定板的距离为2500mm(2.5米)左右

如果和你的拍摄时实际情况不符请看第6步

6. 改善校准

要改进校准,您可以删除高错误图像对,添加更多图像对或修改校准器设置。

发表评论

要发表评论,您必须先登录。

matlab双目相机标定校正_Matlab 单双目相机标定+畸变校正相关推荐

  1. 我的Qt作品(17)OpenCV畸变标定,针对单张圆点图片实现畸变校正

    1.详情见我在论坛发的帖子:单张圆点图片实现畸变校正 http://www.ihalcon.com/read-17421.html 2.畸变校正和九点标定的实验结果,带来的精度提升: 视野范围400m ...

  2. 传感器标定(1.单目相机的标定)

    多传感器中,我们在使用前需要给出设备的标定,首先我们先对单个设备进行标定(后面使用需要进行联合标定) 联合标定工具诸如Apollo.Autoware等自动标注工具,以及一些开源的方法等,可以参考一些经 ...

  3. python绘制黑白棋盘_生成黑白棋盘标定图和单目相机标定(python+opencv实现)

    学习记录. 事实上很早就接触过视觉定位这东西,但是到现在才返回头学习一下相机的标定,真是可耻啊!我把想法和过程记录一下. 相机成像 相机的成像原理--小孔成像 然而,在实际由于设计工艺问题.相机安装环 ...

  4. 生成黑白棋盘标定图和单目相机标定(一)(python+opencv实现)

    学习记录. 事实上很早就接触过视觉定位这东西,但是到现在才返回头学习一下相机的标定,真是可耻啊!我把想法和过程记录一下. 相机成像 相机的成像原理--小孔成像 然而,在实际由于设计工艺问题.相机安装环 ...

  5. Halcon例程(基于多个标定图的单目相机标定)详解—— Camera_calibration_multi_image.hdev

    一.前言 在我的工业相机专栏里已经将相机标定涉及到的理论部分讲解完毕,为什么要标定以及标定要求出什么参数呢,用一个Halcon 例程来帮助理解. 这个例程是比较经典的标定程序,基本将标定过程讲的比较清 ...

  6. 单目相机、双目相机和RGB-D相机学习笔记(一些视频和博文网址)

    目录 1. 单目相机 1.1 摄像头原理 1.2 单目相机的标定 2 双目相机 2.1 双目相机定位原理 2.2 双目相机的缺陷 3 RGB-D相机 3.1 深度相机结构光原理 3.2 RGB-D相机 ...

  7. 「 SLAM lesson-1.2 」传感器分类、单目相机、双目相机、深度相机

    结合 高翔老师的著作<视觉SLAM十四讲:从理论到实践>,加上小白的工程经验共同完成.建议作为笔记功能反复使用. 一.用于定位的传感器分类 主要分成两类:         1). 传感器携 ...

  8. 一文图解单目相机标定算法

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 有一天,蟹老板找底下的员工川建国同学: 等蟹老板走后,然后转头问旁边的学霸李雷同学: 李雷同学整理了下 ...

  9. 【计算机视觉】OpenCV实现单目相机标定

    文章目录 单目相机标定(基于Python OpenCV) 1.上期填坑 2.单目相机标定 2.1 数据采集 2.2 角点提取 2.3 参数求解 2.4 参数评估(重投影误差) 2.5 相机位姿(棋盘位 ...

最新文章

  1. 一个搜索需求搞垮微服务
  2. 传智播客韩顺平老师2011ssh实战项目校内网的数据库设计32张表全解
  3. int i=i++;和i=++i;和i++
  4. opengl库中gl glu glut glaux的区别
  5. 亚马逊AWS 数据中心起火,致 5 人死亡、50 人受伤
  6. c++ using 前置声明_C++ 类声明 类前置声明范例
  7. 给array添加元素_前囧(06篇)Array 方法详解
  8. JSON在JS和JAVA的处理
  9. android SharedPreferences的用法
  10. 工业级光纤收发器如何正确使用和维护?
  11. Java学习笔记11-2——Spring5
  12. 被女孩子冷落了,最适合看的20句话
  13. Qt学习笔记-服务器端获取UDP封包源IP地址
  14. redis 槽点重新分配 集群_弄懂一致性哈希后我打通了redis分区集群的原理
  15. Linux自学,第一天
  16. 基于ConfuserEx的混淆加壳
  17. javase核心day13
  18. 揭秘 Longhorn 如何为 3.5万 个 Kubernetes 节点提供持久存储?
  19. win10系统怎么修复网络连接服务器失败怎么办,Win10网络重置后无法连接网络怎么办 网络重置后恢复网络方法教程...
  20. 微俱聚平台更新日志jquery时间轴特效

热门文章

  1. 埃及分数(贪心算法)
  2. 离散数学-图论-哈密顿图及其应用
  3. linux启动postfix命令,使用Postfix命令管理详解
  4. SQL server 的除法运算
  5. Python+Selenium_UI自动化操作(5)——浏览器截屏
  6. 新买的笔记本首先该做什么?
  7. 求每一年最大气温的那一天和温度
  8. 单片机实验之汽车转向灯控制
  9. 阿里云RDS数据库备份恢复
  10. 银联卡8583协议小额免密免签交易总结