Camera Calibration 相机标定

一、相机标定方法

在opencv中提供了一组函数用于实现相机的标定,标定返回的值包括:相机内参矩阵(fx fy xc yc)、相机外参矩阵(R t)以及畸变矩阵。

标定的步骤如下:

  1. 准备棋盘格,棋盘格图片可以自行打印,以下使用107方格的棋盘格,交点则为96,棋盘格的大小1mm,即
    gridsize=1

  2. 拍照,拍照的原则是多角度,根据理论至少要两种角度的拍照,实际中通常会拍20张左右;

  3. 使用opencv提供的角点检测函数findChessboardCorners找到棋盘格中的角点,并将每幅图片的角点值存放到list中,同时将棋盘格的角点的三维坐标存放到另一个list。

  4. 使用calibrateCamera函数获取内存矩阵、畸变矩阵、旋转矩阵以及转移矩阵。

5.使用undistort函数将畸变的图像进行校正并查看校正后的图片效果。

  1. 代码如下(opencv_3.4.3):

#!/usr/bin/env
python3

-*- coding: utf-8

-*-

import numpy as np

import cv2

#图片角点个数

objp_dict
= {

1: (9, 5),2: (9, 6),3: (9, 6),4: (9, 6),5: (9, 6),6: (9, 6),7: (9, 6),8: (9, 6),9: (9, 6),10: (9, 6),11: (9, 6),12: (9, 6),13: (9, 6),14: (9, 6),15: (9, 6),16: (9, 6),18: (9, 6),17: (9, 6),19: (9, 6),20: (9, 6),

}

objp_list
= []

corners_list
= []

for k in objp_dict:

nx, ny = objp_dict[k]# Prepare object

points, like (0,0,0), (1,0,0), (2,0,0) …,(6,5,0) gridsize=1(mm)

objp = np.zeros((nx*ny,3), np.float32)#生成角点的三维坐标objp[:,:2] = np.mgrid[0:nx,

0:ny].T.reshape(-1,2)

# Make a list of

calibration images

fname = 'camera_cal/calibration%s.jpg' % str(k)img = cv2.imread(fname)# Convert to

grayscale

gray = cv2.cvtColor(img,

cv2.COLOR_BGR2GRAY)

# Find the

chessboard corners

ret, corners =

cv2.findChessboardCorners(gray, (nx, ny), None)

# If found, save

& draw corners

if ret == True:#

Save object points and corresponding corners

    objp_list.append(objp)corners_list.append(corners)#

Draw and display the corners

    #cv2.drawChessboardCorners(img,

(nx, ny), corners, ret)

    #plt.imshow(img)#plt.show()#print('Found

corners for %s’ % fname)

else:print('Warning:

ret = %s for %s’
% (ret, fname))

img
= cv2.imread(‘camera_cal/calibration1.jpg’)

img_size
= (img.shape[1], img.shape[0])

‘’’

mtx : 内参矩阵

dist: 畸变矩阵

rvecs : 旋转矩阵

tvecs : 转移矩阵

‘’’

ret,
mtx, dist, rvecs, tvecs = cv2.calibrateCamera(objp_list, corners_list,
img_size,None,None)

#将原始图片转换成未发生畸变的图片

dst
= cv2.undistort(img, mtx, dist, None, mtx)

com_img
= np.hstack((img, dst))

cv2.namedWindow(‘image’,
cv2.WINDOW_NORMAL)

cv2.imshow(‘image’,
com_img)

cv2.waitKey(0)

cv2.destroyAllWindows()

二、 什么是相机标定(What is Camera Calibration?)

找到影响图像成像过程的内部相机参数:

图像中心(不是width/2,
height/2)

焦距长度

行像素和列像素的比例因子

扭曲factor

镜片扭曲

三、动机

Camera Calibration 用于

重构真实世界模型:Virtual L.A. project

与世界交互:e.g.机器人

如上图所示,估计红色与蓝色两个点的几何投影

四、 图像的行列比例(Scaling of Rows and
Columns in Image)

相机像素不是完全符合正方形

相机输出可能模糊为近似值(NTSC)

图像可能从数据卡上获得 ·A/D转换器采样NTSC信号

相机->NTSC信号->转换为数字信号->显示器上显示

五、 混合透镜成像(Compound Lens Imaging)

单透镜系统在其周围部分会造成图像扭曲(image distort)

混合透镜可以用于减少彩色效应和针垫效应

普通摄像机的相机图像平面

对同样的针孔摄像机(pinhole camera),相机图像平面(camera image plane)不同

六、相机标定目标

将所拍摄图像在三维坐标系中找到对应位置

Camera Calibration 相机标定相关推荐

  1. Camera Calibration 相机标定:原理简介(三)

    3 绝对圆锥曲线 在进一步了解相机标定前,有必要了解绝对圆锥曲线(Absolute Conic)这一概念. 对于一个3D空间的点x,其投影空间的坐标为:x~=[x1,x2,x3,x4]T.我们定义无穷 ...

  2. 工业互联网(十四)——相机标定(Camera calibration)原理、步骤

    转载: 最详细.最完整的相机标定讲解 图像处理--相机标定(Camera calibration) 相机标定 相机标定(Camera calibration)原理.步骤 工业相机标定相关知识整理 相机 ...

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

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

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

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

  5. 标题 相机标定(Camera calibration)原理和步骤

    标题 相机标定(Camera calibration)原理和步骤 为什么要相机标定? 在图像测量过程和机器视觉应用中,为确定空间物体表面某点的三维几何位置与其在图像中对应点之间的相互关系,必须建立相机 ...

  6. 相机标定方法机理总结与公式推导(Camera calibration)

    关于位姿测量的一些研究成果: Camera calibration 研究现有相机标定的方法的步骤和机理,探讨主动视觉的标定新方法: 张正友法 1)标定模型的建立 λp=K[r1r2t][XwYw1]\ ...

  7. matlab棋盘格标定角点,相机标定(Camera calibration)Matlab——棋盘格标定原理,流程...

    计算机视觉----相机标定 相机标定概念:图像测量过程以及计算器视觉中,为确定空间物体某点的三维几何关系位置与其在图像中对应点之间的相互关系,必须建立相机成像的几何模型,模型的参数就是相机的参数.求解 ...

  8. 基于平面的约束2D激光雷达和相机的联合标定(2D Laser and Camera Calibration )原理及项目代码具体使用——旷视

    1 基于平面的约束2D激光雷达和相机的联合标定(2D Laser and Camera Calibration )原理 这是旷视做的一个关于2D激光雷达和相机的联合标定算法,在看这个标定算法之前,你可 ...

  9. 相机标定(Camera calibration)原理、步骤

    这已经是我第三次找资料看关于相机标定的原理和步骤,以及如何用几何模型,我想十分有必要留下这些资料备以后使用.这属于笔记总结. 1.为什么要相机标定? 在图像测量过程以及机器视觉应用中,为确定空间物体表 ...

最新文章

  1. 07-阻塞赋值与非阻塞赋值原理分析——小梅哥FPGA设计思想与验证方法视频教程配套文档...
  2. 它们的定义Activity跳转动画
  3. Oracle---对字段进行修改(varchar2修改clob)+ 索引失效
  4. 信息学奥赛一本通 2028:【例4.14】百钱买百鸡
  5. oracle导入大量csv_Oracle导入数据到表(支持插入大量数据)
  6. C# 文件查询管理器
  7. clickHouse 使用常见问题踩坑
  8. 国内镜像源的使用,提高下载速度
  9. 7个用于开源网络情报渗透测试工作的热门OSINT工具
  10. Java笔试面试(社招版)
  11. python while循环和for循环转换_Python的While循环和for循环,python,while
  12. 2023.4.14.吉林长春.晴朗
  13. 全国计算机等级三级网络技术试卷详解(二)
  14. 09丨数据采集:如何用八爪鱼采集微博上的“DG”评论
  15. QQ浏览器 不支持html5,如何解决qq浏览器插件显示不了问题
  16. 【SemiDrive源码分析】【MailBox核间通信】43 - 基于Mailbox IPCC RPC 实现核间通信(代码实现篇)
  17. ruby 数组自定义排序_在Ruby中对数组排序
  18. 斯坦福大学《机器人学》-运动学Kinematics
  19. CRM软件比较表(评分最高的前10名)
  20. PPT怎么才能播放时候看备注

热门文章

  1. 2022-2028年中国输配电设备全产业链投资分析及前景预测报告
  2. 【Sql Server】DateBase-子查询
  3. 分布式训练使用手册-paddle 数据并行
  4. TVM/Relay 的 PartitionGraph()(mod) 函数讨论整理
  5. 机器学习PAL数据预处理
  6. Python分析离散心率信号(中)
  7. 人脸识别数据集精粹(上)
  8. Redis高可用集群Redis Cluster搭建
  9. 【CV】吴恩达机器学习课程笔记第11章
  10. android.mk 里面内容介绍