相机标定

openCV---相机内外参标定

匿名 (未验证) 提交于 2019-12-02 23:32:01
https://blog.csdn.net/u012319493/article/details/77622053 来源 张正友相机标定Opencv实现以及标定流程&&标定结果评价&&图像矫正流程解析(附标定程序和棋盘图) https://my.oschina.net/abcijkxyz/blog/787659 将openCV安装目录下的“opencv2.4.8\opencv\sources\samples\cpp”中的有关棋盘的图片复制到工程目录下 这里写图片描述 在“calibdata.txt”中写入以下内容: left01.jpg left02.jpg left03.jpg left04.jpg left05.jpg left06.jpg left07.jpg left08.jpg left09.jpg left10.jpg #include <iostream> #include <sstream> #include <time.h> #include <stdio.h> #include <fstream> #include <opencv2/core/core.hpp> #include <opencv2/imgproc/imgproc.hpp> #include <opencv2/calib3d/calib3d.hpp> #include <opencv2

相机标定棋盘格制作

末鹿安然 提交于 2019-12-02 12:00:55
#include <opencv2/opencv.hpp> #include <iostream> /** 输出指定格式的棋盘图 @param width 棋盘的宽度,不要超过10000. @param height 棋盘的高度,不要超过10000. @param pixel 每个格子的大小,建议行和列的格子数一个为奇数一个为偶数 @param fileName 输出的文件名,支持相对路径和绝对路径,支持png、jpg、bmp等. */ static int checkerboard(int width, int height, int pixel, const char* fileName) { if (width > 0 && height > 0 && pixel > 0 && width <= 10000 && height <= 10000 && pixel <= width && pixel <= height && fileName) { cv::Mat image = cv::Mat::zeros(cv::Size(width, height), CV_8U); uchar* uc = image.data; for (size_t j = 0; j < height; j++) { for (size_t i = 0; i < width; i++) { if (

ros相机标定

ぐ巨炮叔叔 提交于 2019-12-01 22:51:00
没有经过校准的camera拍摄的图片是有畸变的.如下图: 而我们希望得到的图片是这样的 ros中提供了一个程序camera_calibration帮助我们去做校准. 具体怎么校准参考 https://blog.csdn.net/xinwenfei/article/details/81235072 http://wiki.ros.org/camera_calibration/Tutorials/MonocularCalibration 首先是安装ros-kinetic-uvc-camera,运行就可以产生 /image_raw /camera_info 两个topic. 再运行camera_calibration做校准. 校准完毕后会生成一个yaml文件 格式如下: image_width: 2448 image_height: 2050 camera_name: prosilica camera_matrix: rows: 3 cols: 3 data: [4827.94, 0, 1223.5, 0, 4835.62, 1024.5, 0, 0, 1] distortion_model: plumb_bob distortion_coefficients: rows: 1 cols: 5 data: [-0.41527, 0.31874, -0.00197, 0.00071, 0]

综述 | 相机标定方法

跟風遠走 提交于 2019-11-28 20:16:32
本文作者蔡量力,公众号:计算机视觉life成员,由于格式原因,公式显示可能出问题,建议阅读原文链接: 综述 | 相机标定方法 另外推荐几个原创的号 计算机视觉,Python,自然语言处理、数据挖掘相关,汇总最新资源,学习更高效! ​ 在图像测量过程以及机器视觉应用中,为确定空间物体表面某点的三维几何位置与其在图像中对应点之间的相互关系,必须建立相机成像的几何模型,这些几何模型参数就是相机参数。在大多数条件下这些参数(内参、外参、畸变参数)必须通过实验与计算才能得到,这个求解参数的过程就称之为相机标定(或摄像机标定)。无论是在图像测量或者机器视觉应用中,相机参数的标定都是非常关键的环节,其标定结果的精度及算法的稳定性直接影响相机工作产生结果的准确性。因此,做好相机标定是做好后续工作的前提,提高标定精度是科研工作的重点所在。 ​ 标定的目的主要为解决两个问题: ​ a、确定世界坐标系下三维空间点与像素平面像素点间的转换关系(内外参); ​ b、确定相机成像过程中的畸变系,用于图像矫正。 针孔相机模型 相机将三维世界中的坐标点(单位:米)映射到二维图像平面(单位:像素)的过程能够用一个几何模型来描述,其中最简单的称为 针孔相机模型 (pinhole camera model) ,其框架如下图所示: 其中,涉及到相机标定涉及到了四大坐标系,分别为: 像素坐标系

双目相机的标定过程详解!-----MATLAB

∥☆過路亽.° 提交于 2019-11-28 19:31:52
请参考MATLAB官方文档: https://ww2.mathworks.cn/help/vision/ug/stereo-camera-calibrator-app.html ,讲得已经相当详细了! 下面整理一下要点: 一、拍摄棋盘格 为获得最佳效果,请使用至少10到20张校准图案的图像。 校准器至少需要三个图像。 尽量使用未压缩或压缩损失很小的图像格式(如png或bmp)。 为了更高的校准精度你需要: 获取一部分你所关注的距离处的棋盘格图片,比如你要测量2米远的物体,那么请将棋盘放在距离相机2米左右的地方拍摄一部分图片 棋盘表面和相机成像平面的夹角必须小于45度 不要修改图像,比如对其进行剪切 不要使用自动聚焦模式或改变图像的放大倍率 以相对于相机的不同方向拍摄棋盘图像 尽量采集各种不同的棋盘图像。镜头的畸变从图像中心径向增加,并且有时在图像各帧上表现不均匀, 为了获取图像的畸变信息,棋盘应当处在图像的各种不同边缘处 确保棋盘图案在左右两幅图像中都能被完整的显示 在每一对图像中尽量保持棋盘静止,也就是在同一时间拍摄。 若棋盘在两幅图像中发生了相对运动,会对标定精度产生负面影响 若想对远距离的重建获得更高的精度,需要将两个相机的距离调整的更大。 二、提升标定精度 1.添加或删除图像 添加图像: 少于10张图像 棋盘没有覆盖足够的图像帧 棋盘与相机的相对方向变化不够多 删除图像:

解放双手——相机与IMU外参的在线标定

♀尐吖头ヾ 提交于 2019-11-27 22:41:20
本文作者 沈玥伶,公众号:计算机视觉life,编辑部成员 一、相机与IMU的融合 在SLAM的众多传感器解决方案中,相机与IMU的融合被认为具有很大的潜力实现低成本且高精度的定位与建图。这是因为这两个传感器之间具有互补性:相机在快速运动、光照改变等情况下容易失效。而IMU能够高频地获得机器人内部的运动信息,并且不受周围环境的影响,从而弥补相机的不足;同时,相机能够获得丰富的环境信息,通过视觉匹配完成回环检测与回环校正,从而有效地修正IMU的累计漂移误差。 二、什么是相机与IMU外参? 足够准确的相机与IMU外参是实现相机与IMU融合的定位与建图的前提。相机与IMU之间的外参包括两部分: (1)相机与IMU之间的相对位姿 如下图所示,相机与IMU之间的相对位姿值的是相机坐标系和IMU坐标系之间的变换,包括相对旋转角和相对平移量。 相机坐标系坐标和IMU坐标系坐标之间满足如下变换关系: 将上式展开可以得到分别得到相机坐标系和IMU坐标系之间旋转角和平移量的变换关系: (2)相机与IMU之间的时间差 由于触发延时、传输延时的存在,传感器的采样时间和时间戳的时间不匹配,如下图所示,从而导致相机和IMU之间存在时间差td。 td用公式表示为: 将相机的时间戳平移td后,相机与IMU之间实现了同步。 三、为什么需要在线标定? 大部分同学都是从跑公开的数据集开始入门的

opencv标定

天涯浪子 提交于 2019-11-26 01:55:28
https://blog.csdn.net/u012319493/article/details/77622053 #include #include #include <time.h> #include <stdio.h> #include #include <opencv2/core/core.hpp> #include <opencv2/imgproc/imgproc.hpp> #include <opencv2/calib3d/calib3d.hpp> #include <opencv2/highgui/highgui.hpp> using namespace cv; using namespace std; void main() { ifstream fin(“calibdata.txt”); / 标定所用图像文件的路径 / ofstream fout(“caliberation_result.txt”); / 保存标定结果的文件 / // 读取每一幅图像,从中提取出角点,然后对角点进行亚像素精确化 int image_count = 0; / 图像数量 / Size image_size; / 图像的尺寸 / Size board_size = Size(9, 6); / 标定板上每行、列的角点数 / vector image_points_buf; /

OpenCV 立体匹配 (自带程序)

非 Y 不嫁゛ 提交于 2019-11-25 19:18:31
1、先到OpenCV源码目录下,找到匹配的源程序,把打开源程序,把代码复制到自建的工程的源程序中;(标定程序的路径...\opencv\sources\samples\cpp) 标定程序复制到自建的源程序中,如图所示: 2、随便复制标定所用图片中的任意一对图片如left01.jpg和right01.jpg到工程目录中。把extrinsics.yml和intrinsics.yml相机的标定参数也复制到工程目录中。 3、修改程序参数,修改如下所示 cv::CommandLineParser parser(argc, argv, "{@arg1||}{@arg2||}{help h||}{algorithm||}{max-disparity|0|}{blocksize|0|}{no-display||}{scale|1|}{i||}{e||}{o||}{p||}");//修改前 1 //修改之后 2 cv::CommandLineParser parser(argc, argv,"{@arg1|right01.jpg|}{@arg2|left01.jpg|}{help h||}{algorithm||}{max-disparity|80|}{blocksize|7|}{no-display||}{scale|1|}{i|intrinsics.yml|}{e|extrinsics.yml|