版本:大小:304KB
类别: 其他行业 系统:WinAll, WinXP, Win7
立即下载matlab相机标定工具箱是众多网友正在寻找的一款工具箱软件,该软件主要针对MATLAB使用者打造,通过工具箱用户可以解决使用过程中遇到的各种问题,需要的朋友欢迎来绿色资源网下载!
用VS2012+OpenCV2.4.6写的双目标定的程序(其实就是跑的Samples),实验结果一直很不理想,查看很多Blog,说可以先用MATLAB标定工具箱获得extrinsics和intrinsics矩阵,然后作为输入参数再读到OpenCV的stereoRectify函数,进而就可以Match了。这里,分享一下我做MATLAB标定的过程:
一、环境配置
1.解压MATLAB标定工具箱至某个文件夹,默认为:TOOLBOX_calib,将之存放在MATLAB\R2010b\toolbox下(个人喜欢,也可以放其他位置)。
2.运行Matlab并添加文件夹TOOLBOX_calib的位置到matlab路径path中,具体操作为:File->Set Path->Add Folder To Path,然后找到刚刚存放的文件夹TOOLBOX_calib,save一下就OK了。
二、文件配置
将所有要标定的棋盘图放到文件夹TOOLBOX_calib里.m文件所在的目录下(个人喜欢将左右相机的图片命名为left01.jpg和right01.jpg等的形式,看着舒服,也和后面要讲的标定结果保存对应起来),OK,万事俱备,准备开动了。
三、单目标定
1.在Matlab命令行窗口中输入calib_gui
2.选择Standard
3.点击Image names,命令行窗口会提示你输入图片的basename以及图片的格式(比如你图片文件名是right01, right02, …, right12,basename就是right,图片格式如:jpg),然后Matlab会自动帮你读入这些图片
4.然后再回到主控制界面,点击Extract grid corners,提取每幅图的角点。点击完后,命令行会出现如下提示,主要是让你输入棋盘角点搜索窗口的大小。如果窗口定大一点的话提取角点会比较方便点,即便点得偏离了也能找到,但也要注意不能大过一个方格的大小。这些选项,都只要敲回车选用默认设置就可以了。
5.继上步Enter敲完后,跳出第一幅棋盘格图,按顺时针或是逆时针方向分别点选棋盘格的最外面的四个内格点,程序会自动检测出其余的角点。
6.在选完四个角点后,程序会在命令行窗口提示你输入标定板棋盘的size,输入你棋盘格的实际大小就行,比如我的棋盘格是24mm,就输入24。这步事实上相当关键,它定义了空间的尺度,如果要对物体进行测量的话,这步是必须的。Ender后同时得到角点检测结果图。
7.继续命令行窗口按Ender选择默认项,跳出新的标定板图像,同样的方法,如此反复,检测角点完12幅左视图。
8.检测完所有的图像后,点击Calibration,开始摄像头标定。
9.标定完成后,可以进行各种结果的可视化观察。由Show Extrinsic得的结果图可见相机与标定板的距离约为1000mm左右,且其中各种颜色标定板对应Analyse Error的结果图的各种误差结果,其中,红色的(对应第2幅标定板图像)的误差较大,部分角点提取有问题(这是当时选角点时我故意选得偏离了一些,验证一下)。
11.左摄像头标定的方法与右摄像头相同,生成的Calib_Result.mat之后,将其改名为Calib_Result_left.mat就可以了。
四、双目标定
1.左右摄像头都标定完成之后,就可以开始立体标定了。在Matlab命令行中键入stereo_gui启动立体标定面板。
2.点击Load left and right calibration files,在命令行窗口中会提示你分别填写左右自标定的结果,如果你按上面的文件名保存方式的话,直接Ender选择默认的文件名(Calib_Result_left.mat和Calib_Result_right.mat),或是填写你自己保存的文件名。
3.Load成功后,就可以开始Run stereo calibration了,run之后的结果如下图所示,左右摄像头的参数都做了修正,并且也求出了两个摄像头之间的旋转和平移关系向量(om和T)。从结果可以看出左右相机的Focal Length相差还是蛮大的,不知这对后续的视差图等计算影响如何(怎么调整两个摄像机的焦距相同也是个问题)。
4.run成功后,就可以看标定的结果了。同样可以直观的看出相机的相对位置相差很大。
图4.图3的俯视图
5.还可以通过Rectify the calibration images按钮,得到纠正后的所有棋盘格图片,可以直接读入OpenCV中进行Match了。当然,你需要对其他物体或是想实时得到视差图,还得将互标定结果写到OpenCV函数调用时支持的格式。
五、问题探讨
1.相机的焦距是否应该保持一致?
答:答案是应该肯定的。因为在后续的视差图转换为三维图时的Q矩阵只有一个f值。所以必须要求至少焦距相近。而且立体成像的三角测量(Learning OpenCV书中提到)的前提假设就是fl=fr。不知道理解的对不对。
2.怎么调整两个摄像机的焦距相同?
答:a.离两个相机相同远处放置标定板(可以将两个相机放置在一起以打到这个效果),分别调节两个相机的焦距,使得两个画面的清晰度相似。(这是我咨询大恒图像的技术支持的结果)
b.我觉得这样肯定还是不行,可以再微调,就是标定一次得一个焦距,再微调一下,再测,这样就会很麻烦。
不知有没有更好的方法。看了很多Blog,没看到涉及这块的,不知道大家都是怎么解决的。
查看全部