RealSenseTM互动开发实战
上QQ阅读APP看书,第一时间看更新

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数组的深度数据被处理后得到平均值和标准方差,然后用于一致性测量。任何倾斜误差都会在这些结果中得到显现。