机器人视觉中的主导平面检测与点模式分组算法
1 机器人视觉与主导平面检测
1.1 视觉传感器与光学流的应用
在机器人与人类协作的场景中,视觉传感器是理解环境的基础设备。当机器人上安装的相机随机器人移动时,图像序列能提供连续图像上点的对应关系,从而得到运动和结构信息。
传统的使用视觉系统检测障碍物或平面区域的方法,如全向和单目相机系统的边缘检测、地标观察等,依赖于机器人周围环境,在没有特定特征的一般环境中应用困难。而光学流作为场景的运动信息,可用于构建移动机器人周围的环境信息,并且在生物数据处理中,它也是障碍物检测的基础信息。
1.2 独立成分分析(ICA)的引入
独立成分分析(ICA)是一种强大的纹理分析方法,它能从纹理中提取独立成分作为主导特征。由于光学流是移动相机观察环境中物体表面产生的纹理,因此可以将流向量视为纹理元,用 ICA 从像素上的流向量中提取独立特征,进而分离出主导平面和其他区域。
算法分为学习阶段和导航阶段。在学习阶段,ICA 利用输入值计算特征,该算法是 Santos - Victor 算法的统计版本,对机器人运动速度的扰动具有稳定性。
1.3 ICA 分离纹理
ICA 是一种从混合信号中分离原始信号的统计技术。假设混合信号 (x_1(t)) 和 (x_2(t)) 是原始信号 (s_1(t)) 和 (s_2(t)) 的线性组合:
[
\begin{cases}
x_1(t) = a_{11}s_1(t) + a_{12}s_2(t) \
x_2(t) = a_{21}s_1(t) + a_{22}s_2(t)
\end{cases}
]
其中 (a_{11}, a_{12}, a_{21}, a_{22}) 是线性组合的权重参数。仅使用记录的信号 (x_1(t)) 和 (x_2(t)) 作为输入,ICA 可根据这些信号的统计特性估计原始信号 (s_1(t)) 和 (s_2(t))。
将 ICA 应用于安装在移动机器人上的相机观察到的光学流,以检测机器人可以移动的可行区域。因为移动相机观察到的光学流是主导平面和其他物体的运动场的线性组合,假设主导平面和其他物体的运动场是空间独立的成分,ICA 就能检测出机器人可以移动的主导平面。
1.4 从图像序列中检测主导平面
1.4.1 相机几何
当安装在移动机器人上的相机在地面平面上移动时,会得到包含主导平面区域和障碍物的连续图像。相机平行于主导平面移动,通过连续图像计算的光学流描述了主导平面和障碍物基于相机位移的运动,这些光学流向量的差异可用于检测主导平面区域。
1.4.2 学习监督信号
在没有障碍物的情况下,捕获时间 (t) 的图像序列 (\hat{I}(x, y, t)),并计算光学流 (\hat{u}(t) = (\frac{dx}{dt}, \frac{dy}{dt})):
[
\hat{u}(t)^T\nabla\hat{I}(x, y, t) + \hat{I}
t = 0
]
计算帧 (t = 0, \cdots, n - 1) 的光学流 (\hat{u}(t)) 后,创建监督信号 (\hat{u}):
[
\hat{u} = \frac{1}{n - 1}\sum
{t = 0}^{n - 1}\hat{u}(t)
]
1.4.3 使用 ICA 检测主导平面
捕获包含障碍物的图像序列 (I(x, y, t)),并以相同方式计算光学流 (u(t))。将光学流 (u(t)) 和监督信号 (\hat{u}) 作为 ICA 的输入信号,得到输出信号 (v_1) 和 (v_2)。
为解决输出信号顺序的模糊性问题,使用 (v_1) 和 (v_2) 长度的方差差异。设 (l_1) 和 (l_2) 为 (v_1) 和 (v_2) 的长度:
[
l_j = \sqrt{v_{xj}^2 + v_{yj}^2}, (j = 1, 2)
]
其中 (v_{xj}) 和 (v_{yj}) 分别是输出 (v_j) 的 (x) 和 (y) 轴分量数组。方差 (\sigma_j^2) 为:
[
\sigma_j^2 = \frac{1}{xy}\sum_{i \in xy}(l_j(i) - \bar{l}
j)^2, \bar{l}_j = \frac{1}{xy}\sum
{i \in xy}l_j(i)
]
由于图像中主导平面和障碍物的运动不同,表达障碍物运动的输出方差大于表达主导平面运动的输出方差。如果 (\sigma_1^2 > \sigma_2^2),则使用输出信号 (l = l_1) 检测主导平面,否则使用 (l = l_2)。
因为主导平面在图像中占据最大区域,计算 (l) 与其中位数的距离 (d):
[
d(i) = |l(i) - m|
]
其中 (m) 是向量 (l) 中元素的中位数。检测 (d(i) \approx 0) 的区域为主导平面。
1.4.4 主导平面检测步骤
-
学习阶段
:
1. 机器人在无障碍物的平面上小距离移动。
2. 机器人捕获平面的图像 (\hat{I}(u, v, t))。
3. 计算图像 (\hat{I}(u, v, t)) 和 (\hat{I}(u, v, t - 1)) 之间的光学流 (\hat{u}(t))。
4. 如果时间 (t > n),使用公式计算监督信号 (\hat{u}),否则返回步骤 1。 -
主导平面识别阶段
:
1. 机器人在有障碍物的环境中小距离移动。
2. 机器人捕获图像 (I(u, v, t))。
3. 计算图像 (I(u, v, t)) 和 (I(u, v, t - 1)) 之间的光学流 (u(t))。
4. 将光学流 (u(t)) 和监督信号 (\hat{u}) 输入 ICA,输出信号 (v_1) 和 (v_2)。
5. 使用输出信号的方差确定输出顺序。
6. 使用流向量的中位数检测主导平面。
1.5 实验验证
进行主导平面检测实验,机器人配备单相机在主导平面上以均匀速度向前移动,捕获无障碍物的图像序列,直到 (n = 20)。使用带金字塔的 Lucas - Kanade 方法计算光学流,得到监督信号 (\hat{u})。
然后机器人向桌子边缘移动,捕获图像序列。为证明方法对移动机器人非唯一速度的鲁棒性,计算图像序列 (I(x, y, 0)) 和 (I(x, y, t))((t = 1, 2, 3))之间的光学流 (u(t)),将其与监督信号 (\hat{u}) 作为快速 ICA 的输入。实验结果表明,能正确检测出主导平面区域,且方法对机器人非唯一速度具有鲁棒性。
1.6 主导平面检测流程
graph LR
classDef startend fill:#F5EBFF,stroke:#BE8FED,stroke-width:2px;
classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px;
A([开始]):::startend --> B(学习阶段):::process
B --> B1(机器人无障移动):::process
B1 --> B2(捕获图像):::process
B2 --> B3(计算光学流):::process
B3 --> B4{t > n?}:::process
B4 -- 否 --> B1
B4 -- 是 --> B5(计算监督信号):::process
B5 --> C(导航阶段):::process
C --> C1(机器人有障移动):::process
C1 --> C2(捕获图像):::process
C2 --> C3(计算光学流):::process
C3 --> C4(输入 ICA):::process
C4 --> C5(确定输出顺序):::process
C5 --> C6(检测主导平面):::process
C6 --> D([结束]):::startend
2 模拟人类感知分组的点模式分组算法
2.1 算法概述
提出一种算法,能像人类观察者一样对点进行分组。该算法简单、完全无监督,能够找到复杂且不一定是凸形状的聚类。分组被识别为本文定义的简化 Delaunay 图(RDG)的连通分量,可看作是格式塔感知分组接近律的算法等价形式。
2.2 算法优势
引入了一种衡量点集两种不同分组之间差异的度量,用于比较该算法与人类视觉感知以及常用的 k - 均值聚类算法。实验表明,该算法模拟人类感知分组,在所有研究的案例中都优于 k - 均值算法。
2.3 潜在应用
该算法在结构纹理分割方面有潜在应用。
2.4 分组算法流程
graph LR
classDef startend fill:#F5EBFF,stroke:#BE8FED,stroke-width:2px;
classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px;
A([开始]):::startend --> B(定义点集):::process
B --> C(构建简化 Delaunay 图):::process
C --> D(找到连通分量):::process
D --> E(确定分组):::process
E --> F([结束]):::startend
2.5 两种算法对比
| 算法 | 特点 | 性能 | 应用场景 |
|---|---|---|---|
| 本文算法 | 简单、无监督、能处理复杂形状 | 模拟人类感知分组,优于 k - 均值算法 | 点模式分组、结构纹理分割 |
| k - 均值算法 | 常用聚类算法 | 在模拟人类感知分组方面不如本文算法 | 一般聚类任务 |
2.6 分组算法详细步骤
- 定义点集 :明确需要进行分组的点的集合,这些点可以是二维或更高维度空间中的点。
-
构建简化 Delaunay 图(RDG)
:
- 首先构建完整的 Delaunay 三角剖分图,它是一种将点集连接成三角形网络的方法,使得每个三角形的外接圆不包含其他点。
- 根据一定的规则对完整的 Delaunay 图进行简化,去除一些不必要的边,得到简化 Delaunay 图(RDG)。
- 找到连通分量 :在简化 Delaunay 图(RDG)中,使用图搜索算法(如深度优先搜索或广度优先搜索)找到所有的连通分量。连通分量是指图中相互连接的节点集合,集合内的节点之间存在路径相连,而与集合外的节点没有路径相连。
- 确定分组 :将每个连通分量作为一个分组,这样就完成了点的分组。
2.7 分组算法实验验证
为了验证算法的有效性,进行了一系列实验。在实验中,生成了不同分布和形状的点集,包括复杂形状和非凸形状的点集。将本文算法与 k - 均值算法进行对比,使用前面提到的衡量点集两种不同分组之间差异的度量来评估算法的性能。
实验结果表明,在所有测试的案例中,本文算法都能更准确地模拟人类的感知分组,而 k - 均值算法在处理复杂形状和非凸形状的点集时表现不佳。例如,在一些点集呈现出细长或不规则形状的情况下,k - 均值算法可能会将原本属于同一组的点错误地划分到不同的组中,而本文算法能够正确地识别出这些点属于同一组。
2.8 分组算法在结构纹理分割中的应用
在结构纹理分割中,图像可以看作是由许多点(像素)组成的集合。使用本文的分组算法,可以将具有相似特征(如颜色、纹理等)的像素点分组在一起,从而实现对结构纹理的分割。
具体步骤如下:
1.
特征提取
:从图像中提取每个像素点的特征,例如颜色特征(如 RGB 值)、纹理特征(如灰度共生矩阵特征)等。
2.
点集定义
:将提取的特征作为点的坐标,形成一个点集。
3.
分组处理
:使用本文的分组算法对该点集进行分组。
4.
纹理分割
:将分组结果映射回图像,将属于同一组的像素标记为同一类别,从而实现结构纹理的分割。
2.9 两种算法在不同场景下的性能对比表格
| 场景 | 本文算法表现 | k - 均值算法表现 |
|---|---|---|
| 简单凸形状点集 | 能准确分组,与人类感知一致 | 能较好分组,但可能存在少量误差 |
| 复杂非凸形状点集 | 准确模拟人类感知分组 | 容易出现分组错误 |
| 结构纹理分割 | 有效分割,保留纹理结构 | 分割效果差,丢失纹理信息 |
2.10 总结与展望
2.10.1 主导平面检测算法总结
主导平面检测算法利用独立成分分析(ICA)对光学流进行处理,能够在不进行相机校准的情况下,从移动未校准相机观察的图像序列中检测出机器人可以移动的可行区域。该算法分为学习阶段和导航阶段,对机器人运动速度的扰动具有稳定性,实验结果证明了其对机器人非唯一速度的鲁棒性。这种算法为移动机器人的导航和路径规划提供了有效的解决方案。
2.10.2 点模式分组算法总结
模拟人类感知分组的点模式分组算法简单、完全无监督,能够找到复杂且不一定是凸形状的聚类。通过定义简化 Delaunay 图(RDG)并找到其连通分量来实现点的分组,该算法在模拟人类感知分组方面优于 k - 均值算法,并且在结构纹理分割等领域具有潜在的应用价值。
2.10.3 未来展望
- 主导平面检测算法 :未来可以进一步研究如何在更复杂的环境中提高算法的性能,例如在光照变化较大、存在动态障碍物的环境中。同时,可以将该算法与其他传感器(如激光雷达、超声波传感器等)的数据融合,提高机器人对环境的感知能力。
- 点模式分组算法 :可以探索该算法在更多领域的应用,如目标检测、图像分类等。此外,还可以对算法进行优化,提高其计算效率,以适应大规模数据的处理。
2.11 两种算法的综合流程图
graph LR
classDef startend fill:#F5EBFF,stroke:#BE8FED,stroke-width:2px;
classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px;
A([开始]):::startend --> B{选择算法}:::process
B -- 主导平面检测算法 --> C(学习阶段):::process
C --> C1(机器人无障移动):::process
C1 --> C2(捕获图像):::process
C2 --> C3(计算光学流):::process
C3 --> C4{t > n?}:::process
C4 -- 否 --> C1
C4 -- 是 --> C5(计算监督信号):::process
C5 --> C6(导航阶段):::process
C6 --> C7(机器人有障移动):::process
C7 --> C8(捕获图像):::process
C8 --> C9(计算光学流):::process
C9 --> C10(输入 ICA):::process
C10 --> C11(确定输出顺序):::process
C11 --> C12(检测主导平面):::process
B -- 点模式分组算法 --> D(定义点集):::process
D --> E(构建简化 Delaunay 图):::process
E --> F(找到连通分量):::process
F --> G(确定分组):::process
C12 --> H([结束]):::startend
G --> H
超级会员免费看
206

被折叠的 条评论
为什么被折叠?



