在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
前言:本文章主要讲解使用matlab对双目摄像头进行标定,转载请标明作者和来源,谢谢。 一、工具: 1、MATLAB2015b 2、工具箱下载地址:http://www.vision.caltech.edu/bouguetj/calib_doc/ 二、标定过程: (一)单目标定(单个摄像机分别标定) 1、将标定工具箱解压并放至MATLAB目录下,目录如下:H:\matlab\matlab\toolbox 2、打开MATLAB后点击File->Set Path->Add with Subfloders…之后选择工具箱路径为:H:\matlab\matlab\toolbox\calib,然后保存并关闭。
3、将当前文件夹文件夹路径修改为放有标定图片的文件夹,我这里放在H:\matlab\matlab\toolbox\calib\双目标定(终)中,此时如下图所示: 这里一定要注意放置图片的路径要正确! 4、在MATLAB命令行窗口输入calib_gui,弹出工具框
5、选择第一个选项"Standard"后弹出如下界面Camera Calibration Toolbox(以下简称标定界面),之后选择Image names
6、扫描该文件夹下存在的所有照片并显示 7、按照提示要求先进行左边摄像头的标定,即输入left->bmp,然后系统会自动扫描文件名有left的照片并显示出来:
8、开始标定:点击“Extract grid corners”,然后根据提示输入“回车”,这里空着不填: 然后让你填入窗口大小,这里有教程说可以不填,我没有填,直接enter,之后会弹出第一幅图片让你用鼠标选定四个原点,然后按顺时针或逆时针旋转棋盘格最外面的四个角点 选好角点后命令界面会提示要你输入棋盘方格的实际边长,下图为角点标记后的图示:
继续命令行窗口回车键下去,弹出第二张棋盘图(同时也会弹出Figure3图片有着蓝色边框包围的角点图,这里不作显示),选择四个外围角点,如此反复下去检测完14张棋盘图。 9、点击工具箱上Calibration,然后会出现内参数结果。
10、标定结束后可以通过标定界面按钮进行可视化的观察 点击show extrinsic显示照片与摄像头的关系图
11、点击analyse error,可以观察到误差适中
12、点击Undistort image保存矫正后的图片 13、左摄像头标定结果出来后,点击Save,这时结果文件默认保存在之前放置标定图片的新建文件夹下面,默认文件名为Calib_Results.m,将其改为Calib_Results_left.mat(双目标定用到)。至此左摄像头标定结束, 14、右摄像头标定过程与左一样,只是将Basename改为right,格式仍为bpm,然后回车回车,最后保存为Calib_Results_right.mat。
(二)双目标定 1、命令行输入stereo_gui,弹出立体标定界面,选择第一个Load
2、如果之前左右摄像头结果你是按照之前的文件名保存的,那么直接在命令行以下两行后面两次回车,否则就在后面输入你保存的文件名,注意下这里加载文件时如果出错了,那么直接重新点击Load就行了。
3、此时已经出现一个双目标定结果,不用管,再点击立体标定界面的Run,最后标定结果如下,?为正负号
4、点击show extrinsic显示照片与摄像头的关系图,如图所示两个摄像头基本是前向平行并在一条直线上,想像头之间的距离为220mm,计算存在很大的误差!!!
(三)至此双目标定结束,下面就是讲结果写成xml文件供Opencv调用了。xml文件生成方法:先建一个txt文档,将下面语句复制进去 Intrinsics_Camera_Left.xml: <?xml version="1.0"?> <opencv_storage> <Intrinsics_Camera_Left type_id="opencv-matrix"> <rows>3</rows> <cols>3</cols> <dt>d</dt> <data> 242.07090 0. 158.63886 0. 241.93907 122.51327 0. 0. 1. </data> </Intrinsics_Camera_Left> </opencv_storage>
Distortion_Camera_Left.xml: <?xml version="1.0"?> <opencv_storage> <Distortion type_id="opencv-matrix"> <rows>5</rows> <cols>1</cols> <dt>d</dt> <data> -0.45689 0.21384 -0.00109 0.00213 0.00000 </data> </Distortion> </opencv_storage>
Intrinsics_Camera_Right.xml: <?xml version="1.0"?> <opencv_storage> <Intrinsics_Camera_Right type_id="opencv-matrix"> <rows>3</rows> <cols>3</cols> <dt>d</dt> <data> 239.56142 0. 154.13100 0. 238.59489 125.91739 0. 0. 1. </data> </Intrinsics_Camera_Right> </opencv_storage>
Distortion_Camera_Right.xml: <?xml version="1.0"?> <opencv_storage> <Distortion type_id="opencv-matrix"> <rows>5</rows> <cols>1</cols> <dt>d</dt> <data> -0.44959 0.24035 -0.00203 0.00198 0.00000 </data> </Distortion> </opencv_storage>
RotRodrigues.xml: <?xml version="1.0"?> <opencv_storage> <RotRodrigues type_id="opencv-matrix"> <rows>3</rows> <cols>1</cols> <dt>d</dt> <data> -0.00357 -0.01579 0.00387 </data> </RotRodrigues> </opencv_storage>
Translation.xml: <?xml version="1.0"?> <opencv_storage> <Translation type_id="opencv-matrix"> <rows>3</rows> <cols>1</cols> <dt>d</dt> <data> -65.12457 0.09307 -2.05958 </data> </Translation> </opencv_storage> 将上述语句复制到txt中,然后直接修改后缀为xml即可,以上数值都是MATLAB立体标定结果内容,自己复制后只需将数字对应改成自己的标定结果就行。 补充: 1、内部参数列表: Focal length:焦距,焦距像素存储在2*1的向量fc。 Principal point:主要观点,主点坐标存储在2*1向量cc。 Skew coefficient:扭曲因子(倾斜系数),定义之间的角x和y像素存储在标量alpha_c轴。 Distrotion:畸变,图像的失真系数(径向和切向畸变)存储在5*1向量kc。 2、外在的参数: Rotations:旋转 Translations:平移 |
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论