图像拼接操作是指将具有重叠区域的两幅 RGB 图像和两幅深度图像分别拼接成一幅 RGB 图像和一幅深度图像。所谓基于相机空间位置的图像拼接方法,就是将相机按照指定的方式安装,然后根据图像中每个像素的空间坐标进行拼接。该方法是应用在深度图像中,结合 RGB 图像与深度图像的对齐操作,也可以用于 RGB 图像的拼接。
基于相机空间位置的图像拼接方法的重点在于相机的安装方式,具体安装要求如下:第一,所安装的相机在垂直方向需要与所拍摄区域保持平行。第二,所安装的相机在水平方向需要前后、左右保持平行。下图展示的是安装两个 RGB-D 相机的示意图,垂直方向安装示意图如下图a 所示,水平方向安装示意图如下图b 所示。在安装好相机之后,需要确定相机的安装高度和相机之间的间距。
本文在设计单件分离系统时使用了两个 RGB-D 相机,对于两个 RGB-D 相机的深度图像拼接的具体步骤如下: 1. 处理两幅深度图像中的背景像素点。依次遍历两幅深度图像中的每个像素点,像素值为 65535 的像素点即为背景像素点,需要将其像素值设置为相机安装的高度。
2. 计算深度图像中的像素点对应到相机坐标系下的空间坐标。根据前面中的介绍,像素坐标系与相机坐标系之间的转换公式如下:
3. 根据相机坐标系下的空间坐标对两幅深度图像进行拼接。遍历深度图像中的每个像素点,根据其相机坐标系下的空间坐标,对两幅深度图像以每行像素点“行满”的方式进行拼接。具体步骤如下:
a) 使用 OpenCV 创建存储拼接结果的矩阵,宽度与单个深度图像的宽度一样,高度是单个深度图像的高度的两倍。用 H 表示存储拼接结果矩阵的高度。
b) 将两个 RGB-D 相机拍摄范围重叠的部分平分为两个部分,左边部分记作 leftPart,右边部分记作 rightPart。
c) 先按行遍历图中左边 RGB-D 相机采取的深度图像。
d) 根据其每个像素点的空间坐标,若该像素点的空间位置在 rightPart中,则把该像素点丢弃;若该像素点的空间位置不在 rightPart 中,则把该像素点及深度值填入存储拼接结果的矩阵中。每行处理完之后,若该行中的每个点都填入了存储拼接结果的矩阵中,则拼接结果的矩阵的行高 H 加 1。
e) 接着按行遍历图右边 RGB-D 相机采取的深度图像。
f) 根据其每个像素点的空间坐标,若该像素点的空间位置在 leftPart中,则把该像素点丢弃;若该像素点的空间位置不在 leftPart 中,则把该像素点及深度值填入存储拼接结果的矩阵中。每行处理完之后,若该行中的每个点都填入了存储拼接结果的矩阵中,则拼接结果的矩阵的行高 H 加 1。
g) 根据存储拼接结果的矩阵的高度 H 对矩阵进行裁剪。
下图是基于相机空间位置的深度图像拼接结果,为了方便展示对齐结果,根据相机的高度,将深度图像转换为灰度图像。左边的两幅图像分别为上下两个 RGB-D 相机所获取的图像,右边的图像为拼接之后的结果。基于相机空间位置的图像拼接方法用于深度图像拼接时只需要 5ms 左右,其拼接速度和效果都是可以应用在单件分离系统中的。
在对两幅深度图像进行拼接的过程中也可以执行 RGB 图像与深度图像对齐操作,这样也可以对两幅 RGB 图像进行拼接。下图是基于相机空间位置的RGB 图像拼接结果,虽然拼接效果不够完美,但是其拼接速度在 30ms 以内,该方法已经应用在单件分离系统中。