
2.6 SDK编程应用举例
1.DF_CameraViewer(C++)
DF_CameraViewer示例是一个简单的C++控制台应用程序,主要展示获取和渲染彩色、深度图像流。
这个实例可用于快速检测某些SDK接口。
DF_CameraViewer [-load <module name>] [-sdname<device name>] [-csize<resolution>] [-dsize<resolution>] [-file <Output Filename>] [-listio] [-record] [-help]
-load 加载指定模块。
-csize 指定彩色数据流的分辨率和帧速率。例如使用640×480指定分辨率,或用640×480×30指定分辨率和帧速率。
-dsize 指定深度数据流的分辨率和帧速率。例如使用640×480指定分辨率,或用640×480×30指定分辨率和帧速率。
-sdname 指定输入设备名称。
-nframes 指定记录的最大帧数。
-listio 列出输入输出设备。
-record 启用文件记录。使用文件选项来指定记录文件名。
-le 指定记录或播放文件名,SDK将摄像头数据记录到指定的文件中。如果-record未定义,则该示例将仅回放指定的文件。
SDK的安装目录的访问权限并不可写。如需记录到文件中,指定在一个具有可写权限目录中的文件名。
-help 输出帮助信息。
2.DF_Projection(C++)
DF_Projection实例演示了如何使用SDK投影功能。投影函数主要用于在彩色图像坐标系、深度图像坐标系和摄像头坐标系进行坐标的映射或投影。本例主窗口如图2-12所示。

图2-12 DF_Projection主窗口
菜单栏包含以下标签:
- 设备(Device) 选择成像设备。
- 彩色(Color) 选择彩色分辨率。
- 深度(Depth) 选择深度流分辨率。
- 模式(Mode) 选择实时(默认)或回放模式。
- 命令(Command) 启动或停止流。
图像面板的彩色、深度和顶点数据如图2-13所示。

图2-13 图像面板的彩色、深度和顶点数据
如果最初没有显示,可以单击QueryInvUVMap按钮显示逆红外映射。逆红外映射完成从彩色图像到深度图像的坐标映射。
如果最初没有显示,单击QueryUVMap按钮显示红外映射。红外映射完成从深度图像到彩色图像的坐标映射。
如果最初没有显示,单击QueryVertices按钮显示顶点数据,顶点数据位于3D空间。为了渲染简便,例子中将顶点数据投影到2D平面进行可视化展现。当移动鼠标时,例子应用了一些照明效果来展示一个虚拟3D效果。
可以在彩色、深度和顶点3个面板上显示数据流。例子可将某个面板的坐标映射到其他面板,并在其上进行相应的绘制。对映射和投影方式也进行了标注,如图2-14所示。

图2-14 不同面板间的坐标映射
控制面板包含以下按钮。
- CreateDepthImageMappedToColor和CreateColorImageMappedToDepth:分别创建对齐彩色或深度分辨率图像,如图2-15所示。
- 播放彩色流(和深度流)。
- 暂停流。
- 停止流。
- 水平方向镜像流。
- 状态栏:提供选定的分辨率、剪辑和流状态等操作过程中的信息。

图2-15 对齐的彩色和深度图像
3.DF_RawStreams(C++,C#)
DF_RawStreams和DF_RawStreams.cs实例展示如何把原始深度和彩色流可视化,以及一些投影功能,其主窗口如图2-16所示。

图2-16 DF_RawStreams实例主窗口
从菜单中,可以选择下列项目。
- 设备(Device):从输入/输出设备列表中选择一个设备的流。
- 彩色、深度(红外)、左、右(Color、Depth、Left、Right):选择相应的数据流配置,流的类型与摄像头有关。
- 模式:选择是否实时进行流直播、录制或播放。如果选择播放或录制模式,则会提示播放或记录文件名。
- C/D Sync:在可视化过程中,选择是否使用同步或异步的彩色流和深度流。前者同步彩色图像与相应深度图像的播放,而后者按各自的帧速率显示。
4.FF_IQSampleTool(C#)
FF_IQSampleTool.cs应用程序是基于FF_RawStreams.cs实例的。它展示了如何进行摄像头的图像质量测试。它具备下列特点:
- 自动标记跟踪
- XYZ悬停深度输出流
- 为红外图校准误差测试
- 深度均匀性试验
- 绝对深度值的检验
此应用程序需要使用一个PORT3测试图。可以自己打印PORT3测试图,SDK在Assets目录下已包括Port3 Chart.pdf,如图2-17所示。

图2-17 PORT3测试图
测试步骤如下:
1)获取图表。
2)设置测试区域。将摄像头放置在离测试图50厘米远处,并确保PORT3图与摄像头的平面平行。如果不平行,测试结果会出现偏差。可以用一个盒子、一个金属框架或者包含间隔物的测试图等来做类似的测试。
3)启动应用程序。如果摄像头加载成功,深度按钮将变为可用,在Device下拉菜单中也能看到这个摄像头。
4)选择“彩色”按钮,单击“开始流”运行视频采集。
5)对于标志的跟踪,程序必须知道测试图的位置。要做到这一点,必须勾勒出测试图的边缘。将鼠标光标从测试图的一个角拖动到另一个角,完成后单击“设置RGB边界”,如图2-18所示。

图2-18 测试图边界设置
6)确保基准标记处于合适位置,可以看到红色方块上所画的黑色圆圈。也可以在黑色圆圈标记的中心看到黑十字。在图2-19中寻找正确的对齐方式(左)和不正确的对齐方式(右)。定位不当可能源于不良照明(对于RGB视频来讲)或从边缘选择过程中引入的舍入误差。如果标记检测不正确,需要重复步骤5),但应选择不同大小的标记。

图2-19 基准标记定位
7)屏幕应该如图2-20所示。

图2-20 基准标记整体图
8)选择“深度”按钮,视频将变为仅有深度视图。
9)通过拖动鼠标从一个角到另一个角,指定测试图的边缘,单击“设置深度边界”,如图2-21所示。

图2-21 设置深度边界
10)视图现在应该如图2-22所示。

图2-22 设置后的视图
11)注意基准标记画在白色方块上。绿色方块是ROI(感兴趣区域)的数组,用于均匀性试验。检查所有的基准标记对齐情况,所有的绿色区域要在深度图范围内。如果不满足,需要重复步骤9)。
12)单击“运行测试”来分析数据,测试包括:
- UV图映射:校正误差。UV图将RGB流和深度流对齐。此测试计算对齐中的错误。使用测试图时,可以看到这种错误的一个例子,如图2-23所示。图中圆形标记不一致,即是紫外图对齐错误。

图2-23 深度数据覆盖到彩色流上
- 绝对深度错误。这项测试主要测量突出的正方形和摄像头表面间的深度,然后与记录在黑色标记中心的深度值进行比较。由于突出方块的规格为12厘米×12厘米×5厘米,测量出的差异应等于5厘米。
- 一致性检验。这个测试将创建一个ROI数组。每个ROI数组的深度数据被处理后得到平均值和标准方差,然后用于一致性测量。任何倾斜误差都会在这些结果中得到显现。