高通机器视觉快速指南 二
3 校准
尽管设计用于演示可集成到系统中的 MV,但这些应用程序也可用于校准摄像机和立体设备。
3.1 一个良好的位置
虽然校准不需要已知目标(例如棋盘),但它确实需要具有良好纹理和光照条件的静止场景。 日光下的远景效果最佳,如下例所示。
在这里插入图片描述
像下面这样的室内场景也可以,但需要更加小心才能获得良好的效果。 确保场景具有足够的深度 (> 3 m)、纹理和良好的照明条件。
注意:请检查输入帧并确保没有可见的运动模糊。 否则校准结果不可靠。 校准算法可以容忍嘈杂或黑暗的图像,比模糊图像要好得多。
3.2 追踪相机
捕获数据
围绕所有 3 个轴旋转相机,同时最小化平移(横向运动)。运行以下命令:
rm -rf record_track
timeout -s SIGINT 30s mvCapture -o -t -d record_track
校准相机固有参数
运行以下命令:
mvCACPlayback -b eagle -s 100 record_track -o track_undistorted.avi
如果校准成功,输出将如下所示:
Tracking state = 0
Reprojection error=0.855193
Inlier ratio=0.989893
Distortion model error=0.588824
DG.input-size=640x480
DG.K=432.916797,0,331.528716,0,432.916797,226.316235,0,0,1
DG.distortion=0.018457,-0.032563,0.000050,-
0.000066,0.000000,0.000000,0.000000,0.000000
DG.distortion-model=10
DG.RBC=0.017096,-0.218179,0.975759,-0.999854,-0.004407,0.016533,0.000693,-
0.975899,-0.218222
DG.timing-offset-in-ms=-8.629679
它还将输出一个视频文件(track_undistorted.avi)。 确保未失真的视频看起来合理总是一个好主意。
输出失真模型可以通过 -m 标志指定。 默认模型是鱼眼模型(模型 10)。 对于 4、5 或 8 参数多项式模型,更改为模型 4、5 或 8。 校准内部使用鱼眼模型,最后转换为多项式模型。 失真模型误差测量转换误差。 如果错误很大,则会生成警告消息。 在这种情况下,请考虑使用高阶模型或鱼眼模型来减少转换误差。
注意:多项式模型在切向失真参数(第三和第四个参数)中始终为零,因为鱼眼模型只是径向失真。
它还将在 record_track/cacLeft.cal 中生成一个文件,其中包含几乎相同的信息:
<?xml version='1.0' encoding='UTF-8'?>
<Camera>
<Parameters>
<Intrinsics size="640 480" pp="331.528716 226.316235" fl =
"432.916797 432.916797" distModel = "10" dist = "0.018457 -0.032563
0.000050 -0.000066 0.000000 0.000000 0.000000 0.000000"/>
</Parameters>
</Camera>
注意:*.cal 文件中使用的失真模型始终是鱼眼模型,无论 -m 标志值如何。
注意:上面的例子是显示输出的格式。 示例中的校准参数值可能无法反映真实值。
存储校准
因为校准是特定于电路板的,而不是任何特定的数据序列,所以通常将最终校准文件移动到一个众所周知的位置(例如,/usr/share/mv/cal/)以供所有应用程序使用。
故障排除快速提示
mvCACPlayback需要相当长的时间才能完成,看最终结果调试非常耗时。 可以使用 -v 标志来显示逐帧信息,如下所示:
Processed frame 100
TS(-1); RE(inf); IR(0.00); PP(0.50,0.50); FR(0.60,0.60); D(0.00,0.00);
tGC(0.0); tRSS(0.0);
Processed frame 101
TS(-1); RE(1.02); IR(0.97); PP(0.33,0.50); FR(0.26,0.26); D(-0.14,0.28);
tGC(9.6); tRSS(0.3);
Processed frame 102
TS(-1); RE(0.82); IR(0.98); PP(0.50,0.45); FR(0.31,0.31); D(-0.14,0.34);
tGC(9.0); tRSS(0.7);
Processed frame 103
TS(-1); RE(0.71); IR(0.99); PP(0.50,0.50); FR(0.31,0.31); D(-0.05,0.08);
tGC(8.1); tRSS(1.2);
Processed frame 104
TS(-1); RE(0.66); IR(0.99); PP(0.49,0.50); FR(0.31,0.31); D(0.01,-0.02);
tGC(8.4); tRSS(1.2);
Processed frame 105
TS(-1); RE(0.63); IR(0.99); PP(0.49,0.50); FR(0.31,0.31); D(-0.03,0.02);
tGC(8.4); tRSS(1.2);
Processed frame 106
TS(1); RE(0.69); IR(0.99); PP(0.49,0.48); FR(0.31,0.31); D(-0.02,0.02);
tGC(9.2); tRSS(1.0);
Processed frame 107
TS(1); RE(0.76); IR(0.99); PP(0.49,0.49); FR(0.30,0.30); D(-0.00,0.00);
tGC(9.2); tRSS(0.9);
Processed frame 108
TS(1); RE(0.77); IR(0.99); PP(0.49,0.52); FR(0.31,0.31); D(-0.06,0.04);
tGC(8.5); tRSS(1.1);
Processed frame 109
TS(1); RE(1.04); IR(0.98); PP(0.49,0.51); FR(0.31,0.31); D(-0.03,0.02);
tGC(8.3); tRSS(1.3);
Processed frame 110
TS(1); RE(1.02); IR(0.98); PP(0.49,0.50); FR(0.30,0.30); D(-0.01,-0.01);
tGC(8.4); tRSS(1.2);
Processed frame 111
TS(1); RE(1.01); IR(0.98); PP(0.49,0.50); FR(0.30,0.30); D(-0.03,0.02);
tGC(8.3); tRSS(1.7);
Processed frame 112
TS(1); RE(0.97); IR(0.98); PP(0.49,0.49); FR(0.30,0.30); D(-0.01,0.01);
tGC(8.5); tRSS(1.4);
Processed frame 113
TS(1); RE(0.95); IR(0.98); PP(0.49,0.49); FR(0.30,0.30); D(-0.01,0.00);
tGC(8.5); tRSS(0.9);
TS:跟踪状态(0:高质量,1:低质量,-1:初始化,-2:失败),RE:像素重投影误差,IR:内点比,PP:归一化主点,FR:X 中的焦比Y、D:前两个失真参数,tGC:以毫秒为单位从相机到陀螺仪的时间偏移,tRSS:以毫秒为单位调整初始卷帘快门偏移。
通常可以通过查看前 50 帧左右来判断 CAC 是否会收敛。
3.3 立体相机校准
捕获数据
旋转相机时运行以下命令:
rm -rf record_stereo
timeout -s SIGINT 30s mvCapture -s -t -d record_stereo
如果 MIPI 消息过多,可以通过以下方式关闭它们:
dmesg -n 1
有关更多详细信息,请参阅跟踪相机部分。
校准固有参数
通过运行校准左侧摄像头:
mvCACPlayback -b eagle -s 100 record_stereo -o left_undist.avi
输出文件位于 record_stereo/cacLeft.cal。 通过运行校准正确的相机:
mvCACPlayback -b eagle -s 100 -u record_stereo -o right_undist.avi
输出文件位于 record_stereo/cacRight.cal。 有关更多详细信息,请参阅跟踪相机部分。
校准外部参数
运行以下命令:
mvSACPlayback -s 100 -e 200 record_stereo -o stereo_undist.avi
mvSACPlayback 从 record_stereo/cacLeft.cal 和 record_stereo/cacRight.cal 读取内在参数。 输出如下所示:
Reprojection error=0.659759
Inlier ratio=0.960402
Stereo calibration:
rRL=0.007858 -0.017013 -0.003425
tRL=-0.080000 0.000000 0.000000
它还会生成一个名为record_stereo/sac.xml 的文件,mvDFS 可以直接使用该文件。
注意:sac.xml 中的默认失真模型是鱼眼模型。 使用 -m 标志更改为其他模型。
验证校准质量
播放输出视频文件 (output.avi)。 远处的物体应该呈灰色,没有任何红色或绿色边缘。
存储校准
因为校准是特定于电路板的,而不是任何特定的数据序列,所以通常将最终校准文件移动到一个公共的位置(例如,/usr/share/mv/cal/)以供所有应用程序使用。
3.4 高分辨率相机校准
捕获数据
旋转相机时运行以下命令:
timeout <ARGS> mvCapture -r -t -p 2 -d record_hires
-p 2选项将分辨率设置为 720p。 人们可能希望使用不同的分辨率来匹配预期用例的纵横比。 高于 720p 时请小心,因为它可能会导致内部存储空间和文件 I/O 紧张。 通常可以在较低的分辨率下校准并缩放结果。有关更多详细信息,请参阅向下的相机部分。
校准相机固有参数
运行以下命令:
mvCACPlayback -b eagle -s 100 record_hires
有关更多详细信息,请参阅向下的摄像头部分。
存储校准因为校准是特定于电路板的,而不是任何特定的数据序列,所以通常将最终校准文件移动到一个公共的位置(例如,/usr/share/mv/cal/)以供所有应用程序使用。