相机标定

Kinect2通过ROS标定

落爺英雄遲暮 提交于 2019-12-03 11:41:37
搞了将近半个月的驱动,终于把该弄的驱动问题全都搞定了 目前libfreenect2,iai-kinect2,ORB_SLAM2都能正常的跑起来,更进一步的问题来了,如何使用我们亲爱的kinect v2去完成我们的orb_slam2呢?让我们来慢慢研究研究 https://blog.csdn.net/wangshuailpp/article/details/75299865 首先肯定是先给相机做标定 https://github.com/code-iai/iai_kinect2/tree/master/kinect2_calibration ! 在实验室里面找到一块6x8x0.02的标定板 注意,6,8对应的是黑白格相邻的边的数量,我拿到的板子实际上是横着7个格子,竖着9个格子的,但是还是6x8x0.02。0.02是格子宽度 空格/s截屏 我这里对应执行rosrun kinect2_calibration kinect2_calibration record color circle6x8x0.02 以上是注意事项,翻译一下就是: 1.打印完标定棋盘后贴在一个平板上面,通过尺子确定一下标定板上黑白格的间距确实为2/3cm 2.搞两个三脚架,一个固定kinect2,一个固定固定标定板(然而根本没有这样的条件),拍照时一定要稳 3.检测到的时候会有彩色线覆盖在标定板上,然后按空格拍照 4

opencv标定程序

南楼画角 提交于 2019-12-03 07:12:57
一. 标定原理 摄像机在成像的过程中会在边缘产生显著的畸变,对于普通的摄像机拍摄的图像,会产生径向畸变,切向畸变和其他类型的畸变,我们需要对图像进行矫正处理。使用opencv标定图像的过程,先根据一个标定物体计算旋转矩阵和平移向量,寻找标定物的角点cvFindchessboardCorners;再精确角点的位置(也叫亚像素角点)cvfindCornerSubPix;绘制出所有的标定物角点cvDrawChessboardCorners ;使用标定函数计算摄像机的内参数矩阵和畸变系数,旋转变量和平移变量 cvCalibrateCamera2;根据内参数矩阵和畸变系数求出畸变映射cvInitUndistortMap ,再使用重映射转换图片 cvRemap ,也可以使用cvUndistort2完成所有的事项。 二. 函数简介 1. cvFindchessboardCorners 寻找棋盘上的角点位置 2. cvfindCornerSubPix 精确角点位置 3. cvDrawChessboardCorners 绘制检测到的棋盘角点 4. cvCalibrateCamera2 利用定标来计算摄像机的内参数和外参数 5. cvfindExtrinsicCameraParam2 只计算外参数 6. cvRodrigues2 进行旋转矩阵和旋转向量间的转换 7. cvUndistort2

OpenCV 标定摄像头(Python 版本代码,视频中标定,亲测可用)

让人想犯罪 __ 提交于 2019-12-03 07:11:34
在机器视觉领域,摄像头的标定指通过技术手段拿到相机的内参、外参及畸变参数。 相机内参长这样,利用针孔模型,将 3d 物体透视投影到 2d 的相机屏幕上。 P = [ f x 0 c x 0 f y c y 0 0 1 ] P = \begin{bmatrix} f_{x} & 0 & c_{x} \\ 0 & f_{y} & c_{y}\\ 0 & 0 & 1 \end{bmatrix} P = ⎣ ⎡ ​ f x ​ 0 0 ​ 0 f y ​ 0 ​ c x ​ c y ​ 1 ​ ⎦ ⎤ ​ 畸变参数包括 2 类, 径向畸变和切向畸变 。 径向畸变 最明显的例子就是鱼眼相机的效果。 大家仔细观察上面的图片,它就能很好地介绍径向畸变。越往镜头边缘,线条弯曲的越明显,本来是直线,现在都变成了曲线,消除畸变就是为了把这些曲线尽量还原成本来的样子。 径向畸变可以被纠正,公式如下。 除了径向畸变外,还有一个畸变就是 切向畸变 。 切向畸变 一般来说,是因为相机镜头制造工艺精度不够,透镜和感光器原件没有平行。从而造成了图像的变形。 矫正公式如下: 两个畸变的参数通常用一个向量表示。 但一般只用 4 个参数。 [ k 1 , k 2 , p 1 , p 2 ] [k_{1} ,k_{2},p_{1},p_{2}] [ k 1 ​ , k 2 ​ , p 1 ​ , p 2 ​ ] 如果用

使用opencv标定双目摄像头

喜夏-厌秋 提交于 2019-12-03 07:11:21
0.前言 接触双目相机标定有一段时间了,这里将自己的学习进行一下小结。双目标定的目的是用于后面的双目测距,不过有关双目测距的内容这里先只介绍双目测距的原理,不涉及双目测距算法。 1.三角测量 这一部分内容《学习opencv》中文版的p452-p454有了详细的论述 注意得到最后的公式是存在很多前提的,包括: (1)两台摄像机光轴平行、焦距相等, 且各自的主点具有相同的像素坐标 (2)两台摄像机成像平面共面且像素行对齐 不过我们拿到的双摄设备往往不能达到这种要求,所以需要标定这一步骤来进行相关的校正 2.双目标定 opencv已经提供了一个demo(samples\cpp\stereo_calib.cpp)实现了标定流程。在此之前按照《学习opencv》相关内容进行不同角度棋盘格图像的采集,选取包含较多位置、角度变化的10-20对图像作为待处理数据。 自己使用vs2015+opencv310,调用stereo_calib.cpp封装好的函数进行了标定,目测效果还可以。这里将附有注释的代码附上来 stereo_calib.h #ifndef _STEREO_CALIB_H_ #define _STEREO_CALIB_H_ #include <io.h> #include "opencv2/calib3d/calib3d.hpp" #include "opencv2/imgcodecs

python opencv标定相机

∥☆過路亽.° 提交于 2019-12-03 07:11:10
1.采集好图片。30张这样就足够了,图片需有不同大小不同位置,且一定要清晰,模糊的角点图影响判断。 2.通过程序得到内参同时做畸形校正 # -*- coding:utf-8 -*- #!/usr/bin/env python __author__ = 'Huaqing' import numpy as np import cv2, copy, math, sys import glob criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 30, 0.001) BOARD_SIZE = (12, 8) objp = np.zeros((BOARD_SIZE[0]*BOARD_SIZE[1],3), np.float32) objp[:,:2] = np.mgrid[0:BOARD_SIZE[0],0:BOARD_SIZE[1]].T.reshape(-1,2) objpoints = [] # 3d point in real world space imgpoints = [] # 2d points in image plane. images = glob.glob('camera_calib/images/'+ '/*.jpg') i = 1 for fname in images: img =

opencv标定单相机参数注意事项

落爺英雄遲暮 提交于 2019-12-03 07:06:45
近期使用opencv进行单相机标定,采用张正友的棋盘格网标定方法,标定过程中的注意事项如下: 1. opencv检测棋盘格角点函数,输出角点坐标顺序有两种可能,顺时针或者逆时针。确保每张图片检测出的角点顺序都一致。 2. 标定计算出的每张相片的外参数,是指物方坐标系经过旋转和平移,转换到像空间坐标系的参数,物方坐标系圆点在棋盘格第一个角点处。 3. 标定前需要输入棋盘格尺寸(单位一般用毫米),用于计算每个棋盘格角点在物方坐标系下的坐标。 4. 若自己打印棋盘格,不要让每个格子的尺寸太大,否知会导致提取角点失败,优先保证有较多的行列数。 标定函数代码连接: https://www.jianshu.com/p/d8f612d417f8 来源: CSDN 作者: 大森林_ 链接: https://blog.csdn.net/weixin_41224763/article/details/88531671

OpenCv相机标定——圆形标定板标定

给你一囗甜甜゛ 提交于 2019-12-03 07:06:33
OpenCv相机标定——圆形标定板标定 0.前言 1.标定图案 2.OpenCv标定 3.标定结果分析 0.前言   OpenCv中,相机标定所使用的标定图案分为棋盘格、对称圆形及非对称圆形特征图、ArUco板和ChArUco板等。在OpenCV的官方例程中,采用的是棋盘格图案,因为其操作简单、快速,标定精度满足一般应用场景的需求。对于标定精度要求高的场景,则一般采用圆形标定图案。本文主要介绍如何使用圆形标定图案(对称和非对称)完成相机的标定,并将OpenCv标定结果与Halcon标定结果进行对比分析。 1.标定图案   OpenCv中使用的圆形标定图案如图1所示: OpenCv中,使用圆形标定图案用到的函数为 cv::findCirclesGrid()。函数原型如下:  bool cv::findCirclesGrid(//找到圆心坐标返回True      cv::InputArray,//输入标定图像,8位单通道或三通道      cv::Size patternSize,//标定图案的尺寸      cv::OutputArray centers,//输出数组,为检测到的圆心坐标      int flags,//标志位,对称图案——cv::CALIB_CB_SYMMETRIC_GRID,非对称图案——  cv::CALIB_CB_ASYMMETRIC_GRID     

分别使用Matlab和OpenCV标定微距相机

走远了吗. 提交于 2019-12-03 07:05:31
软件: Matlab 2014a,VS 2013 棋盘格标定板: 方格边长0.5mm,横向角点数19个,纵向角点数15个。 相机内参估算 其实在已知相机的某些参数后,不进行标定也可以估计出大致的内参矩阵。 根据上一篇博文中对图像坐标系、相机坐标系和世界坐标系的学习,可以知道相机内参的形式: fx 0 u0 K = 0 fy v0 0 0 1 内参数为fx,fy,u0,v0。其中:fx=f/dx, fy=f/dy;u0,v0为主点坐标。 理想情况下:fx=fy;u0,v0分别为分辨率的一半,所以在已知焦距、图像分辨率和传感器尺寸等参数后,可以对理想情况下的内参进行估算。 以网上经常作为举例对象的NiKon D700相机为例: 焦距 f=35mm,最高分辨率 4256 2832,传感器尺寸 36.0mm 23.9mm 则可计算出: dx=36.0/4256,dy=23.9/2832 —> fx=f/dx=4137.8,fy=f/dy=4147.3 u0=4256/2=2128,v0=2832/2=1416 内参矩阵即为: 4137.8 0 2128 K = 0 4147.3 1416 0 0 1 但在对精度要求比较高的场合还是需要对相机进行标定,得到相机实际的内参和畸变参数。 Matlab标定工具箱 参考博客:http://blog.csdn.net/jameshater

IMU与camera标定、Kalibr

匿名 (未验证) 提交于 2019-12-03 00:22:01
目前的研究方向可以总结为在滤波算法中实现高精度,在优化算法中追求实时性.当加入IMU后,研究方向分为松耦合和紧耦合,松耦合分别单独计算出IMU测量得到的状态和视觉里程计得到的状态然后融合,紧耦合则将IMU测量和视觉约束信息放在一个非线性优化函数中去优化.紧耦合的框架使得IMU数据可以对视觉里程计进行矫正,同时视觉里程计信息也可以矫正IMU的零偏,因此一般认为紧耦合的定位精度较高.个人认为松耦合和滤波融合的方法类似,紧耦合则主要基于非线性优化. IMU融合后可以处理视觉失效的情况,例如光照变化,遮挡,模糊,快速运动;同时视觉也可以对IMU的本质误差零偏(漂移)进行很好的估计. 视觉和IMU融合目前主要基于三类方法,在设计时,主要考虑精确度和计算量的平衡. 1. 滤波 状态向量只包含当前状态.由于线性化误差和计算能力的限制,通常只能构建很少的landmark/mappoint.或者创建structureless的状态向量(将landmark/mappoint边缘化),典型代表为MSCKF. 边缘化是将旧状态融合进当前状态的先验中,滤波方法主要的缺陷也就存在于边缘化过程中:首先当前测量的structure信息需要延迟处理,降低当前状态的更新精度,其次边缘化对线性化近似和外点(outlier)都比较敏感,容易造成滤波器状态失准.(这里有很多坑,还不太理解). 2. Fixed-Lag

matlab2016a 双目标定以及参数说明

匿名 (未验证) 提交于 2019-12-02 23:42:01
转载链接: https://blog.csdn.net/weixin_40554881/article/details/80605649 在命令行输入stereoCameraCalibrator,出现如下界面: 然后将上面的“Skew”、“Tangential Distortion”以及“3 Coefficients”等选项选上,将“2 Coefficients”选项去掉,如下: 然后点击添加图像,出现如下界面: Camera1代表左摄像头,Camera2代表右摄像头,分别选择存放着左右图像的文件夹,需要特别注意的是棋盘格的边长应该根据打印的实际大小填写,单位可以选择 然后点击OK,程序会自动检测采集的图像到底有多少可以使用,可以说MATLAB2015的这个工具十分挑剔,如果角度不好的话,将使用不了,因此在采集图像时,最好多的采集一些。(此处只是为了说明标定步骤,所以使用的图像较少)。 点击 按钮,开始标定: 从下图可以看到,平均的标定误差以及标定过程中误差较大的的图像对。 点击选择不想接受的误差直方图,可以直接在左边的图像对中找到对应的图像,右键选择“Remove and Recalibrate”: 点击 选择Export camera parameters, 并点击“OK”。 回到顶部 标定结束后,会得到如下标定参数: