相机标定

双目标定与矫正 matlab

為{幸葍}努か 提交于 2020-01-11 18:27:19
matlab版本有2015a 或更新的本 1.预先拍摄好多幅标定板图像 像这样: 分别将左右图像放在left和right文件夹中。 2.相机标定 选择APPS,下拉菜单选择"stereo camera calibration" 进入一下界面,点击“add image”,分别设置camera1 (left)和camera2(right)的拍摄的图像,需要设置棋盘格的大小单位为毫米。 设置完进入一下界面,点击“calibrate” 点击export camera parameters 输出标定参数 在命令行输入以下命令保存参数: save stereoParams 3.利用标定的参数矫正图像 load stereoParams_uvc mkdir indoor_r figure for i = 1:100 fprintf('processing: %d\n',i) leftname = ['./indoorScene/left', num2str(i), '.png']; rightname = ['./indoorScene/right', num2str(i), '.png']; I1 = imread(leftname); I2 = imread(rightname); [J1, J2] = rectifyStereoImages(I1, I2, stereoParams_uvc

基于OpenCv的机器人手眼标定(九点标定法)

偶尔善良 提交于 2019-12-25 10:44:49
对于初学者而言,对相机的标定经常模糊不清。不知道机器坐标与相机坐标如何转换,两个坐标系又是如何建立? 我们通常是利用张氏标定法,针对于相机的畸变进行标定,利用校正得到的参数对图形进行处理后再呈现出来。这个方法网上用的人很多,资料也较为全面。这里就不做说明了。本文主要是针对机械手的手眼标定,一般而言目前相机的畸变较小,精度也较为准确,使用该方法进行标定也能得到较好的效果。 首先,对于九点标定而言。我们使用到的是OpenCv中的 estimateRigidTransform 函数。 函数定义如下: Mat estimateRigidTransform(InputArraysrc,InputArraydst,boolfullAffine) 前两个参数,可以是 :src=srcImage (变换之前的图片Mat) dst=transImage(变换之后的图片Mat) 也可以: src=array(变换之前的关键点Array) dst=array(变换之后的关键点Array) 第三个参数: 1(全仿射变换,包括:rotation, translation, scaling,shearing,reflection) 其主要原理为:如果我们有一个点变换之前是[x,y,1],变换后是[x’,y’,1] 则fullAffine表示如下: TX=Y 展开后表示 如果我们想求这【a-f】

初学OpenCV之摄像机标定

隐身守侯 提交于 2019-12-25 04:58:11
     最近方向定下来是双目立体视觉,主要是做重建这块的研究。大致过程是图像获取->摄像机标定->特征提取->匹配->三维重建,当然开始可以进行图像预处理,矫正,后期可以进行点云的进一步处理,如渲染表面使其更接近于现实物体。   图像获取相对来说比较简单,用相机拍摄目标物(大型场景或特定小型的室内物体)。但有两点需要注意:   1、双目重建所需的图像一般为两张,角度相差不应过大,否则公共部分太少以至于重建效果不佳;整个过程简便,成本也不高,但缺陷是只有两张图像的点云所表示的物体信息不会很全面;   2、标定所需的图像又是另外拍摄的,用张正友标定法的话,把印有黑白棋盘格的图像粘至硬纸板上,然后左右摄像机各自进行拍摄,理论上获得角度(图像)越多,最终标定结果越精确;标定板见下图:   这里主要结合OpenCV对左右摄像机标定做一个简单的介绍,望朋友们指正,一起交流、进步。   摄像机的标定问题是机器视觉领域的入门问题,可以分为传统的摄像机定标方法和摄像机自定标方法。定标的方法有很多中常见的有:Tsai(传统)和张正友(介于传统和自定标)等,   摄像机成像模型和四个坐标系(通用原理)。   摄像机模型采用经典的小孔模型,如图中Oc(光心),像面π表示的是视野平面,其到光心的距离为f(镜头焦距)。   四个坐标系分别为:世界坐标系(Ow),摄像机坐标系(Oc),图像物理坐标系(O1

[文章阅读]-A New Mirror-based Extrinsic Camera Calibration Using an Orthogonality Constraint

試著忘記壹切 提交于 2019-12-18 09:04:22
文章目录 Abstract Introduction Related Work Measurement Model and Orthogonality Constraint Notations and Measurement Model Orthogonality Constraint on Mirrored Points Extrinsic Calibration From Mirrored Images Using the Orthogonality Constraint Unique Solution of Three P3P Problems Using the Orthogonality Constraint Linear Solution of Rotation and Translation 有没有另外的求解办法呢? 可能产生误差的地方 Abstract 此文的目的,标定相机和3D参照物之间的外参关系(相机看不到参照物的情况下). 镜子最少需要换三个姿态, 使用不同姿态下拍摄的3D物体的2D表观来计算外参。本文的贡献在于提出一个外参标定算法, 该算法可以从三mirrored图像中关于P3P问题求出唯一解。每个P3P问题有多达四个解因此 a set of three P3P问题有多达64个解。我们的方法可以根据一个正交约束来选择一个解

最简单的针孔相机模型标定方法,使用Matlab进行快速可视化相机标定,小白专用,超详细

て烟熏妆下的殇ゞ 提交于 2019-12-16 03:44:52
相机标定是机器视觉、SLAM等绕不开的环节,今天介绍一种最为简单的可视化标定方法。      这篇文章只是讲解如果标定,关于相机的标定原理,可以参考别的文章,这里推荐一篇 《【机器视觉】张氏法相机标定》 一. 准备工作 方格标定板一块; 已经安装Matlab的电脑一台(Matlab最低版本要求是R2013b,推荐使用最新版本R2019b); 注意:如果你有正版Matlab账号,或者你是学生,你可以使用网页版的Matlab 二. 开始标定 1.第一步 打印标定板 如果你还没有标定,那么你需要打印一块标定板出来,但是你放心,准备标定板的过程是非常简单的。你先将我提供的标定板图片下载—— 下载标定板 (提取码:5yun),然后打印出来,只要你保持图片的横纵比,打印成任何尺寸都可以,我推荐打印在A4纸上。打印之后的样式,如下图: 2. 拍摄包含标定板的图片 使用将要被标定的相机,拍摄一些包含标定板的照片,根据我的经验20到30张图片已经够了。当然图片越多结果也会越准确,但是会多用一些时间。拍摄图片的技巧是,要多个角度大范围的去拍摄标定板,让它成像在你相机屏幕的各个地方,大家可以参考我下面的拍摄方式。 注意 : 拍摄照片时有几点需要注意:标定板的摆放没有要求,横竖都行。但是拍照片时对相机的姿态有要求,你相机如果是最终横着使用,那么拍照片时相机也要横着拍。至于这里面的原因

四轴平面机器人手眼标定方法,eye-in-hand,亲测可用(草稿,后期整理)

╄→гoц情女王★ 提交于 2019-12-11 16:52:03
之前阅读博客:机器人手眼标定 (四轴六轴都适用): https://blog.csdn.net/Stones1025/article/details/90664168 发现有如下问题,所写方法并不适用于四轴的情况, 在传统六轴情况下式12是超定方程,可解。但是,四轴情况下相邻机械臂只有纯平移,Rc12应该等于单位矩阵,(Rc12-I)=0,也就是说M3全是0,是没办法求解t的。 从另一个角度看:四轴时,公式2在求R时已经用过了,即公式9,那么由公式2推导出的公式11是恒成立的。公式11左边项为0 ,右边项在公式9可以保证为0。所以没办法求解t。 从直观的角度看:eye-in-hand情况下,机械臂末端和相机相当于一个刚体上的两个点,如果一个刚体只是进行平移,不旋转,那么他上面所有点的平移量是相同的,我们永远无法知道刚体上两点之间的相对距离是多少。 所以个人认为这种方法是没办法求解平移t的。 于是再想别的方法: 这是从PnP中想到的一个方法 PnP(Perspective-n-Point)是求解 3D 到 2D 点对运动的方法。它描述了当我们知道n 个 3D 空间点以及它们的投影位置时,如何估计相机所在的位姿。 PnP是已知一些点在世界坐标系的3d坐标,和他在相机坐标系下的像素坐标(2d),求解出相机相对世界坐标系的变换矩阵T 那我们把机械臂基座标系当做世界坐标

Kalibr标定Intel D435i相机

六月ゝ 毕业季﹏ 提交于 2019-12-10 07:17:24
Kalibr标定Intel D435i相机 文章目录 Kalibr标定Intel D435i相机 1、相机标定 2、IMU标定 3、相机+IMU联合标定 4、标定结果评价 系统环境:ubuntu16.04+roskinetic 需要的基础知识基础:ROS基本知识(如何使当前终端生效,roslaunch文件的编写) 源码安装:kalibr https://github.com/ethz-asl/kalibr.git Realsense SDK: https://github.com/IntelRealSense/librealsense.git realsense-ROS: https://github.com/IntelRealSense/realsense-ros.git 1、相机标定 (1)realsense d435i可以直接读取相机的内参 roslaunch realsense2_camera rs_camera.launch //打开相机节点 rostopic echo /camera/color/camera_info //查看相机内参 可以根据官网提供的相机内参验证自己的标定结果。 具体标定流程: a、准备标定板和标定板的参数文件(以棋盘格标定为例) 具体可参考https://github.com/ethz-asl/kalibr/wiki/downloads

相机标定与数据获取

江枫思渺然 提交于 2019-12-04 14:05:47
相机标定与获取数据 设备:一个摄像头 一台电脑 软件: MATLAB( 商业数学软件 ) 操作流程 1启动 MATLAB 标定工具箱 2.添加图片 add images (推荐20张左右) 3.设置拍摄使用棋盘格的真实尺寸(量一下) 4.设置参数,开始标定 畸变参数个数要是镜头太凸的话,就像鱼眼相机和哨兵 150 视角,就选 3; 其他情况使用 2 别忘了选上 Skew 5.参数导出,输出到 MATLAB 命令行窗口 FOCALLENGTH 焦距 PRINCIPLEPOINT 主点 RADIALDISTORTION 径向畸变 TANGENTIALDISTORTION 切向畸变 效果 6新建函数与脚本 建立一个文件夹 在MATLAB界面 主页----新建---函数 之后新建脚本 两个选项卡需覆盖源代码 writeXMLm*(网页内的代码全部复制) www.cnblogs.com/xingkongcanghai/p/11862534.html Untitled2.m(直接复制下面的代码) writeXML(cameraParams,'cameraParams.xml'); 操作完成后, 三个文件需保存同一个文件夹 ;保存;运行 Loving-Q 来源: https://www.cnblogs.com/Loving-Q/p/11869539.html

MATLAB相机标定转XMl代码

自闭症网瘾萝莉.ら 提交于 2019-12-04 11:59:19
function writeXML(cameraParams,file) %writeXML(cameraParams,file) %功能:将相机校正的参数保存为xml文件 %输入: %cameraParams:相机校正数据结构 %file:xml文件名 %说明在xml文件是由一层层的节点组成的。 %首先创建父节点 fatherNode, %然后创建子节点 childNode=docNode.createElement(childNodeName), %再将子节点添加到父节点 fatherNode.appendChild(childNode) docNode = com.mathworks.xml.XMLUtils.createDocument('opencv_storage'); %创建xml文件对象 docRootNode = docNode.getDocumentElement; %获取根节点 IntrinsicMatrix = ((cameraParams.IntrinsicMatrix)'); %*相机内参矩阵,千万记住要转置* RadialDistortion = cameraParams.RadialDistortion; %相机径向畸变参数向量1*3 TangentialDistortion =cameraParams.TangentialDistortion;

相机标定程序详解<2>

我怕爱的太早我们不能终老 提交于 2019-12-04 07:07:49
#ifndef _CAMERACALIBRATE_H_ #define _CAMERACALIBRATE_H_ #include <opencv2/calib3d/calib3d.hpp> #include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp> #include <opencv2/opencv.hpp> #include <opencv2/imgproc/imgproc.hpp> #include <iostream> using namespace cv; using namespace std; class CameraCalibrate { private: vector<vector<Point3f>> objectPoints; // 角点的世界坐标系坐标 vector<vector<Point2f>> imagePoints; // 角点的像素坐标系坐标 Mat cameraMatrix; // 内参矩阵 Mat distCoeffs; // 畸变矩阵 vector<Mat> rvecs, tvecs; // 旋转矩阵队列和平移矩阵队列,每一幅标定图像都有对应的一个旋转矩阵和平移矩阵 vector<double> calibrateErrs; // 保存矫正偏差 int flag;