作为一个小白,近期在使用MATLAB标定工具包对投影仪的标定中,在各大网上,苦于没有一个详细的教程,遇到好多隐藏的坑,走了许多弯路。所以,写此博客,来对标定流程进行详细阐述以及相关可能遇到的问题。
因为刚开始接触这个领域,有写的不足或欠缺的地方,还望各位大佬提出。
对投影仪、相机的标定,通常是结构光主动式深度获取领域的重要步骤。通过标定,可以获取他们的内、外参数以及畸变参数等重要数据。而标定相机在最新的MATLAB版本中,已经嵌入了相关的APP,可以通过导入图片,从而软件自动对单目、双目相机完成标定流程,省时省力。
针对单目+投影仪的标定,我们采用MATLAB的标定工具包中的cam_proj_gui这个程序来进行标定。
运行该程序,出现如下界面:
投影仪的标定基本流程就是:顺次点击完第一行的所有内容和第二行的标定投影仪方可。注意标定拍照过程中,投影仪投射的棋盘格需要和相机拍摄的实物棋盘格在同一场景中,并且尽可能保证棋盘格占据广泛视野;同时,标定图片尽可能保证有不同姿态,且大于15张为宜,以确保标定数据的准确性。
接下来将针对一些细节问题,进行详细阐述。
首先需要进行相机标定,即选中第一个框,这里的标定相机需要预先下载好camera_calib标定工具包,设置好路径。该工具包的使用网上还是比较多的,大家可以自己了解一下。
随后,需要点击Load Camera Calibration,装载标定相机参数;
当点击Set Projector’s calib.images时,出现下图:询问你是否使用标定相机时候用的图片来标定投影仪?
一般情况下,我们按回车,表示同意(此情况必须保证标定相机的图片存在且完整无误,标定过程中也没删减图片)
若选择否,则出现让你重新标定相机的过程,如图。窗口大小一般为默认就好,X,Y方向上的大小为实际棋盘格的大小尺寸。紧接着就是顺次选择相机拍摄的实际的棋盘格的四个角点进行标定相机。
当相机标定完成后,就可以点击第四个Ray plane intersection,进行对投影仪的标定。窗口大小依旧选择默认,为5*5
若出现需要标定的图片没有正常显示(即为全白的情况),可以尝试将图片转换为灰度图。
标定投影仪时,由于设置的窗口比较小,需要尽可能准确点中各个角点,以避免误差过大。标定过程中,还可以利用windows系统下,自带的放大镜进行更高倍数放大,避免点错。
若标定过程中,选定的角点出现了一些误差,不能自动识别各个角点的位置,则需要自己手动标定点框内的X、Y方向上的方格数量。我这里棋盘格X、Y方向数量设置为8。
等待所有图片都标定完时,不要按回车过快,否则会前功尽弃。这时会要求你导入投射的棋盘格的模板图片(该图片应与程序在一个文件夹中),我这里模板图片名称为calib_solo_pro4500.bmp。然后选择窗口大小,再依次点击四个角点便可。
完成上述几步,便可以点击Calibrate the projector。注意:点击这步往往并不一定会成功。它经常会出现如下图所示的病态错误。
解决办法:寻找工具包函数中所有check_cond = 1的地方将其更改为0,便可解决问题
至此,所有的标定过程暂告一段落。系统会给你自动展示fc,cc,alpha_c,kc,Pixel error以及各个参数对应的误差范围。
如果,你的误差值太大,则需要删减有些误差比较大的图片。
Analyse error便可帮助你进行误差情况分析,出现如下图片。鼠标点击误差比较大的点,在命令行窗口便可出现该点所属的图片名称。
Add/Suppress images可帮助你完成增/删图片的目的。先是0、1分别表示选择删除、增加图片操作;随后填写要增加或删除图片的名称。随之可重新进行标定操作。通过这种反复操作,便可达到降低误差的目的。
最后save便可将标定得到的相关信息保存为Cam_Proj_calib.mat文件
问题总结:
- 若出现标定投影仪时,需要标定的图片没有正常显示(即为全白的情况),可以尝试将图片转换为灰度图。
- 标定投影仪时候,可能会出现列表图片未被激活现象,建议提前寻找工具包函数中所有check_cond = 1的地方将其更改为0,便可解决问题