跳转到内容

SwisTrack/示例/校准/半自动

来自维基教科书,开放世界中的开放书籍

本示例展示了如何通过拍摄已知真实世界位置的标记照片,以半自动方式校准您的设置。如果无法通过自动校准可靠地检测到斑点,则建议使用此方法。

在此过程中,您将确定一组点,您知道它们的真实世界位置及其在相机拍摄的图像上的位置。SwisTrack 中使用的校准组件将拟合一个函数,该函数最能描述真实世界坐标和图像坐标之间的映射。

设置和标记放置

[编辑 | 编辑源代码]

像运行实验一样设置您的实验区域。确保相机正确安装在其最终位置。此外,建议在与最终实验相同的照明条件下进行校准。

在您的区域中放置 6 到 50 个标记。更多标记通常会在严重失真图像上产生更好的校准结果,但放置时间更长。如果您的工作是低失真,4x4 模式(16 个标记)可能足以产生良好的结果。

如果您稍后在实验中使用简单的标记,请重新使用相同的标记来进行校准。否则,只需使用打印在纸上的圆圈。确保标记可以从背景中很好地区分出来(至少在局部),例如白色纸上的黑色实心圆圈。标记在图像上至少应有 5x5 像素的大小。虽然首选大约 10x10 像素的大小。

将这些标记放置在您的区域中,并仔细测量每个标记的中心位置(x,y)。您可以使用其中一个标记或区域边界作为参考点。请注意,您可以将标记放置在您选择的任何位置。无需将它们放置在特定模式中,尽管以系统的方式放置它们通常使确定其真实世界位置更容易。

请注意,校准标记应放置在与最终标记(或物体)相同的高度,以便在您的实验期间跟踪。将它们放在地面上会导致图像边框处出现明显的偏移。

打开相机并启动 SwisTrack。如果您已经为您的实验创建了 SwisTrack 配置,请使用该配置拍照。否则,从新的(空的)配置开始,添加与您的相机相对应的组件,以及一个转换为灰度(或转换为彩色)组件。

单击转换为灰度(或转换为彩色)组件,然后按工具栏中的步骤按钮。SwisTrack 将获取图像并将其显示在屏幕上。确保您的斑点在图像上清晰可见,并在必要时调整相机采集参数。这也是最后一次您可以移动相机或调整对焦(如果需要)。

如果您对图像感到满意,请右键单击显示的图像并选择将原始图像另存为...。将图像保存为calibration.bmp

提取标记

[编辑 | 编辑源代码]

启动 Matlab 并使用以下命令加载保存的图像

image = imread('calibration.bmp');

要在屏幕上显示图像(用于验证目的),请键入

imagesc(image)
axis equal

切换到 SwisTrack 的calibrationFileTools 文件夹,然后键入

image_positions = FindBlobs(image, N, THRESHOLD_LEVEL);

其中 N 代表您的图片上可见的标记数量,THRESHOLD_LEVEL 代表应对图像进行阈值处理的值 (0..1)。您必须通过修改此值找到适合您图像的阈值,直到标记(至少在局部)与周围环境区分开来。一个好的起始值是 0.5。

找到合适的阈值后,单击每个标记。脚本将通过考虑相同颜色的附近像素自动计算标记的中心。完成操作后,脚本将返回一个 N 行 2 列的矩阵,其中包含标记的图像位置。

创建 XML 校准文件

[编辑 | 编辑源代码]

除了图像位置外,您还需要这些标记的世界位置。创建一个 N 行 2 列的矩阵,其中包含标记的世界位置,顺序与它们在image_positions矩阵中出现的顺序相同(即您单击它们的顺序)。

world_positions = [2.0, 1.0
                   2.0, 1.5
                   ...
                   ];

然后,通过调用以下命令编写 XML 文件

writeSwisTrackCalibXMLFile(worldPoints,imagePoints,'calibration_points.xml')

calibration_points.xml 文件随后可以与 SwisTrack 中提供的校准组件一起使用。

华夏公益教科书