前半部分由孤旅人翻译,非常感谢。
原文链接相机校准:Toolbox for Matlab
这部分带你们完成一个基于20张平面棋盘图的完整的标定例程。
这个例程将让你们学会怎么使用关于这个工具箱所有的功能:加载标定图像(loading calibration images),提取角点(extracting image corners),运行主要的标定引擎(running the main calibration engine),显式标定结果(displaying the results),控制精度(controlling accuracies),添加和压缩图片(adding and suppressing images),未失真图片(undistorting images),将标定数据输出到其他格式文件(exporting calibration data to different formats)……这个例程特别适合那些刚开始使用工具箱的人。
下载标定图片calib_example.zip或者一张一张下,并将20个图像存储到名为calib_example的单独文件夹中 。
补充:MATLAB加载标定工具:将你放工具箱的路径为MATLAB设置为搜索路径,然后输入calib_gui就能运行工具箱
在Matlab里面,进入包含例程图片的目录calib_example
读入图片:
在标定工具箱窗口点击Image names 按键,输入标定图片的前缀名(Image)和图片格式(tif)。所有的图片就会被加载进内存(通过Read Images命令会自动执行)存在变量L_1,L2……L20中.Matlab窗口将会显示如下:
完成设置图片也会通过缩略图格式展示出来(这张图片能够通过运行mosaic再生)
如果在读取图片的时候弹出OUT OF MEMORY的错误窗口,这就意味着你的电脑没有足够的内存去支撑整个图片集合在本地内存。这个情况很容易出现,当你运行这个工具箱在128M内存或者更少的电脑。在这个案例中,你可以直接选择memory efficient版本的工具箱,在你运行calib_gui选择memory efficient的操作模式。剩余的标定步骤(网格角点提取和标定)都一样。
提取网格角点
在标定工具箱窗口点击Extract grid corners按键。
按“Enter”(就是输入空,就是敲一下回车)选择所有的图片,(不然,你可以输出一个图片索引的列表用来提取角点的,例如[2 5 8 10 12])。然后,询问wintx和winty尺寸时,按下“enter”键输入空参数,选择默认的角点搜索窗口大小:wintx=5,winty=5。这就产生了一个11*11像素的有效的窗口。
角点提取引擎包含了自动统计网格中方块数的机制,当处理图片数量很大的时候,这个工具特别方便,因为不需要输入手动x和y方向的方块数量,对于一些罕见的情况,这个工具可能不能预测正确的方块数,这一般会发生在标定非常扭曲的镜头时。对于这点在这个角点提取的流程中,程序有提供一个用户关闭自动统计方块数代码的选项。在这个特殊模式下,用户将要提供每张图片的方块数量。在当前例程下,能完美得运行在默认模式下(即自动统计方块数),所以,简单地按“enter”输入空参数就行。(注意:通常推荐第一选择默认模式提取角点代码,并且,如果需要,重新处理那些有问题的图片)
显示的第一张标定图片是图片序号为2的(因为我这边加载图片的选择的是[2 5 8 10 12]):
点击四个顶点。点击位置在下面四幅图中显示了(警告:尽量精确地点击四个角点,离角点最多5个像素,否则一些角点可能会被识别器错过)。
点击的顺序规则:被选择的第一个点关系到这个网格坐标系的起始点。矩阵框的其他三个点可以按任意的顺序点击。如果你标定外部的多个摄像头(即计算空间中几个摄像头的相对位置),那么第一次点击的顺序对于你非常重要。处理多个摄像头时,要从不同的摄像头图片中选择一样的网格坐标系。例如:一个需要运行立体视觉标定箱的例子——stereo_gui.m(请通过help stereo_gui和参考fifth calibration example page 获取更多信息)
标定网格的边界如下图所示:
输入网格中每个方格的dx和dy的大小(例如:dX=dY=30mm,默认值):