16、3D感知与非平面表面感知技术解析

3D感知与非平面表面感知技术解析

1. 3D感知中的卡尔曼滤波应用

在3D感知领域,卡尔曼滤波是一种强大的工具,可用于从3D点重建3D线和3D平面。

1.1 3D线的重建

对于从3D点重建3D线,可以使用卡尔曼滤波。滤波器方程的估计器、测量参数等组件由以下表达式表示:
- (M_i=\begin{bmatrix}z_i&0&1&0\0&z_i&0&1\end{bmatrix}),其中(M_i)是一个(2×4)矩阵。
- (y_i=\begin{bmatrix}x_i\y_i\end{bmatrix}),(y_i)是二维向量,((x_i, y_i, z_i))是来自多个源的3D点坐标,作为测量向量。
- 测量误差矩阵(w_i(2×3))可通过相应表达式估计。
- 初始估计向量(a_0 = [a_0, b_0, p_0, q_0]^T),可以假设为任意值,如([0 0 0 0]),也可以从前两个点计算得出:
- (a_0=\frac{x_2 - x_1}{z_2 - z_1})
- (b_0=\frac{y_2 - y_1}{z_2 - z_1})
- (p_0=\frac{x_2z_1 - x_1z_2}{z_2 - z_1})
- (q_0=\frac{y_2z_1 - y_1z_2}{z_2 - z_1})

下面是3D线估计过程的前两次迭代示例:
- 第一次迭代
- 初始状态向量(a = [a_0, b_0, p_0, q_0] = [0 0 0 0]^T)。
- 初始误差协方差矩阵(S_0)(一个非常大的值):
[S_0=\begin{bmatrix}9999&0&0&0\0&9999&0&0\0&0&999&0\0&0&0&999\end{bmatrix}]
- 提交第一个测量向量((x_1, y_1, z_1) = (8.5, 2.0, 2.5))。
- (y_1=\begin{bmatrix}8.5\2.0\end{bmatrix})
- (M_1=\begin{bmatrix}2.5&0&1&0\0&2.5&0&1\end{bmatrix})
- (W_1=\begin{bmatrix}-1.0&0\0&1.0\end{bmatrix})
- 卡尔曼增益(K_1 = S_0 M_1^T (W_1 + M_1 S_0 M_1^T)):
[K_1=\begin{bmatrix}0.394&0&0.157&0\0&0.394&0&0.016\end{bmatrix}]
- 状态估计器(a_1 = a_0 + K_1 (y_1 - M_1 a_0) = [3.34, 0.78, 0.13, 0.031]^T)。
- 下一个误差协方差矩阵(S_1 = (I - K_1 M_1) S_0):
[S_1=\begin{bmatrix}157.17&0&-393.32&0\0&157.48&0&-393.30\-393.32&0&983.28&0\0&-393.30&0&983.28\end{bmatrix}]
- 第二次迭代
- 初始状态向量(a = [3.34, 0.78, 0.13, 0.031]^T)。
- 初始误差协方差矩阵(S_1)(来自第一次迭代)。
- 提交第二个测量向量((x_2, y_2, z_2) = (9.0, 2.5, 2.7))。
- (y_2=\begin{bmatrix}9.0\2.5\end{bmatrix})
- (M_2=\begin{bmatrix}2.7&0&1&0\0&2.7&0&1\end{bmatrix})
- (W_2=\begin{bmatrix}10.12&2.62\2.64&1.62\end{bmatrix})
- 卡尔曼增益(K_2 = S_1 M_2^T (W_2 + M_2 S_1 M_2^T)):
[K_2=\begin{bmatrix}2.12&-0.64&-5.38&1.64\-0.666&3.76&1.64&-9.28\end{bmatrix}]
- 状态估计器(a_2 = a_1 + K_2 (y_2 - M_2 a_1) = [2.81, 2.20, 1.49, -3.44]^T)。
- 下一个误差协方差矩阵(S_2 = (I - K_2 M_2) S_1):
[S_2=\begin{bmatrix}93.59&19.93&-232.08&-49.14\19.94&41.54&-50.60&-107.51\-232.07&-50.60&574.39&124.63\-49.14&-107.51&124.63&278.81\end{bmatrix}]

这个过程会一直持续,直到所有测量向量用完或达到指定的协方差误差。

1.2 3D平面的重建

对于3D平面的重建,也可以使用卡尔曼滤波,但需要不同的测量和估计向量。当平面不平行于Z轴时,向量表示如下:
- 估计向量(a = [a, b, p])。
- 测量向量((x_i))是3D点((x, y, z))。
- 测量方程选择为(f_i(x, a) = ax_i + by_i + z_i + p = 0)。

下面是3D平面估计过程的前两次迭代示例:
- 第一次迭代
- 初始状态向量(a_0 = [a_0, b_0, p_0] = [0 0 0]^T)。
- 初始误差协方差矩阵(S_0)(一个非常大的值):
[S_0=\begin{bmatrix}9999&0&0\0&9999&0\0&0&999\end{bmatrix}]
- 提交第一个测量向量([x_1, y_1, z_1] = [0, 0, 3.0])。
- (y_1 = [-3.0])
- (M_1 = [0, 0, 1])
- (W_1 = [1])
- 卡尔曼增益(K_1 = S_0 M_1^T (W_1 + M_1 S_0 M_1^T)):
[K_1=\begin{bmatrix}0\0\0.999\end{bmatrix}]
- 状态估计器(a_1 = a_0 + K_1 (y_1 - M_1 a_0) = [0, 0, -2.997]^T)。
- 下一个误差协方差矩阵(S_1 = (I - K_1 M_1) S_0):
[S_1=\begin{bmatrix}9999&0&0\0&9999&0\0&0&0.998\end{bmatrix}]
- 第二次迭代
- 初始状态向量(a_1 = [0, 0, -2.997]^T)。
- 初始误差协方差矩阵(S_1)(来自第一次迭代)。
- 提交第二个测量向量([x_2, y_2, z_2] = [3.2, 2.2, 3.1])。
- (Y_2 = [-3.1])
- (M_2 = [3.2, 2.2, 1])
- (W_2 = [1])
- 卡尔曼增益(K_2 = S_1 M_2^T (W_2 + M_2 S_1 M_2^T)):
[K_2=\begin{bmatrix}0.212\0.145\0\end{bmatrix}]
- 状态估计器(a_2 = a_1 + K_2 (y_2 - M_2 a_1) = [-0.021, 0.015, -2.997]^T)。
- 下一个误差协方差矩阵(S_2 = (I - K_2 M_2) S_1):
[S_2=\begin{bmatrix}32.09&-4667.9&-0.211\-4667.9&6789.8&-0.145\-0.212&-0.212&0.998\end{bmatrix}]

同样,这个过程会持续到所有测量向量用完或达到指定的协方差误差。

2. 3D恢复中的对应问题

在3D恢复中,存在对应问题。考虑同一物体的两个图像(W_1)和(W_2),它们可能包含六个或七个公共点,但找到两个图像顶点之间的对应关系很困难。

解决对应问题的方法是估计从两个不同位置(视角)获得的3D点之间的最小欧几里得距离。具体步骤如下:
1. 对于两组3D数据点,为每个点计算与另一组所有点的欧几里得距离。
2. 当估计的距离小于阈值时,认为这两个点是对应点,并从两个列表中删除。

例如,计算点(F)与(A’)到(H’)的欧几里得距离,发现(F)与(F’)的距离最小,所以(F’)对应于(W_1)中的(F)。

3. 3D感知的客户端 - 服务器程序

有一个用于平面物体3D感知的客户端 - 服务器程序,使用卡尔曼滤波实现。

3.1 程序概述

该程序设计为在120度弧内的任意数量中间点(由用户定义,设为(n))拍摄快照,并根据给定半径估计一个有((3n))条边的正多边形。然后通过将正多边形三等分生成路径。例如,如果需要6张图像,半径为1000mm,则路径由半径为1000mm的正18边形三等分定义。机器人沿着多边形的每条边移动,并在每个顶点朝向多边形拍摄快照。

3.2 程序架构
  • 服务器端 :用C++编写,使用ARIA和SVS库。
  • 客户端 :用JAVA编写。
3.3 程序流程
  • 客户端流程
graph TD;
    A[开始] --> B[接收R=半径和N=图像数量];
    B --> C[计算Phi = (180 – (360/n/3))/2];
    C --> D[计算L = 2RCos(Phi)];
    D --> E[count = 0];
    E --> F{count < N};
    F -- 是 --> G[获取彩色图像];
    G --> H[发送图像到客户端,保存本地];
    H --> I[旋转Phi,移动L,旋转180 - Phi];
    I --> J[count = count + 1];
    J --> F;
    F -- 否 --> K[停止];
  • 服务器端流程
graph TD;
    A[开始] --> B[发送R=半径和N=图像数量];
    B --> C[计算Phi = (180 – (360/n/3))/2];
    C --> D[计算L = 2RCos(Phi)];
    D --> E[count = 0];
    E --> F{count < N};
    F -- 是 --> G[发送图像到客户端,count = count + 1];
    G --> H[显示图像];
    H --> I[获取每个图像的2D坐标];
    I --> J[保存值到文件];
    J --> F;
    F -- 否 --> K[停止];
3.4 程序操作步骤
  1. 启动服务器程序,它会打开一个套接字并监听客户端请求。
  2. 客户端连接到服务器后,会弹出输入窗口,用户输入机器人路径的半径、要拍摄的图像数量以及图像在机器人中存储的文件名。
  3. 按下“提交”按钮后,服务器开始采样过程,将图像逐个发送给客户端。
  4. 客户端的输出窗口有一个下拉列表,用户可以选择图像编号。
  5. 用户在每个图像上点击所需的点,指定感兴趣的固定点。
  6. 按下“保存”按钮后,这些2D值以及从服务器接收的机器人位置和相机参数将存储在名为 input.dat 的文件中。

以下是 input.dat 文件中存储的值示例:
| 数据 | 详情 |
| ---- | ---- |
| -1.8 | 1.7 9.0 14.0 28.5 -0.262 -1.574 0.0 |
| -1.8 | 2.0 18.0 15.5 28.5 0.0 -1.574 0.0 |
| -4.4 | 1.7 24.0 13.5 28.5 0.0 -1.574 0.0 |
| -1.7 | 1.0 26.5 13.7 28.5 0.227 -1.574 0.0 |
| -3.2 | 0.8 32.5 14.8 28.5 0.262 -1.574 0.0 |
| -5.0 | -0.5 28.0 3.0 28.5 0.0 -1.574 0.0 |

程序的输出如下表所示:
| 迭代次数 | X | Y | Z |
| ---- | ---- | ---- | ---- |
| 第1次 | 9.0643356698 | 13.9744013198 | 28.49088823106 |
| 第2次 | 9.5242775216 | 16.5935998894 | 29.51163005427 |
| 第3次 | 10.1995493714 | 15.0153226290 | 32.4647295181 |
| 第4次 | 10.5980021371 | 11.0918751729 | 30.315874159 |
| 第5次 | 11.3524524995 | 10.2802239269 | 33.0284420210 |
| 第6次 | 11.8455499713 | 2.4803175141 | 33.7681237207 |

4. 非平面表面的感知

在非平面表面感知方面,有一套新颖的自动化感知技术。

4.1 边缘检测方法

边缘是分隔不同强度区域的像素轮廓,可以定义为图像中亮度突然变化的轮廓。

一种简单的边缘检测方法是计算(g(x, y))在(x)和(y)方向的方向导数,即梯度滤波器:
- (g_1=\frac{\partial g(x,y)}{\partial x})
- (g_2=\frac{\partial g(x,y)}{\partial y})

得到的梯度通过(g=\sqrt{g_1^2 + g_2^2})计算,相位为(\varphi=\tan^{-1}(\frac{g_2}{g_1}))。当梯度(g)高于指定阈值时,认为该像素位于边缘上。

基于此概念,有多种边缘检测滤波器,如梯度滤波器、罗盘滤波器和拉普拉斯滤波器等。常见的梯度滤波器(如Prewitt、Sobel和各向同性滤波器)计算局部和的水平和垂直差异,减少图像数据中的噪声影响,并且在均匀区域输出为零。

计算机视觉系统通常需要将场景分割成组成对象,这基于对象边界,而对象边界由边缘表示,即灰度级的突然变化。图像(f(x, y))的空间导数在边缘方向上呈现局部最大值,用于测量(f)沿(r)方向(\theta)的梯度:
(\frac{\partial f}{\partial r}=\cos\theta\frac{\partial f}{\partial x}+\sin\theta\frac{\partial f}{\partial y})

当(\frac{\partial}{\partial\theta}(\frac{\partial f}{\partial r}) = 0)时,(\frac{\partial f}{\partial r})取得最大值,此时边缘方向(\theta_g=\tan^{-1}(\frac{f_y}{f_x}))。

边缘检测算子有两种类型:梯度算子和罗盘算子(也称为掩码)。这些算子是正交梯度(f_x)、(f_y)或方向梯度(\frac{\partial f}{\partial r})的有限差分近似。对于一个(p×p)的掩码(H),在位置((m, n))对任意图像(U)进行操作的内积由相关性给出:
(\Delta_{n,m}\langle H, U\rangle=\sum_{i}\sum_{j}h(i,j)u(m + i, n + j))

梯度算子有一对掩码(H_1)和(H_2),分别测量图像(u(m, n))在正交方向的梯度:
- (g_1(m,n)=\Delta_{n,m}\langle H_1, U\rangle)
- (g_2(m,n)=\Delta_{n,m}\langle H_2, U\rangle)

梯度向量的大小和方向由下式给出:
- (g(m,n)=\sqrt{g_1(m,n)^2 + g_2(m,n)^2})
- (\theta(m,n)=\tan^{-1}(\frac{g_2(m,n)}{g_1(m,n)}))

综上所述,3D感知和非平面表面感知技术在计算机视觉领域有着重要的应用,通过卡尔曼滤波、边缘检测等方法,可以实现准确的3D重建和表面感知。客户端 - 服务器程序为实际应用提供了可行的解决方案,帮助机器人获取周围环境的3D信息。这些技术的结合将推动计算机视觉在更多领域的发展和应用。

3D感知与非平面表面感知技术解析(续)

5. 非平面表面感知的后续处理

在完成边缘检测后,对于非平面表面感知还有进一步的处理步骤。

5.1 曲线追踪

从相机图像中提取感兴趣的区域可以使用曲线追踪方法。曲线追踪的目的是确定图像中特定曲线的走向,从而界定出感兴趣的区域。具体步骤如下:
1. 首先,基于边缘检测的结果,选择一个起始点。这个起始点通常是边缘上的一个像素。
2. 然后,根据一定的规则(如顺时针或逆时针方向),检查起始点相邻的像素,找到下一个属于曲线的像素。
3. 重复步骤2,直到回到起始点或者无法继续找到相邻的曲线像素为止。

通过曲线追踪,可以将图像中的特定曲线提取出来,为后续的分析做准备。

5.2 曲线性质预测

在提取出曲线后,需要预测曲线的性质。这里使用分段线性近似方法,具体步骤如下:
1. 将曲线划分为多个小段。可以根据曲线的长度或者曲率变化来确定分段的长度。
2. 对于每个小段,使用线性函数进行近似。可以通过最小二乘法等方法来拟合线性函数。
3. 根据拟合的线性函数,分析曲线在每个小段的性质,如斜率、截距等。

通过分段线性近似,可以更好地理解曲线的整体性质,为非平面表面的感知提供更准确的信息。

6. 技术总结与应用展望
6.1 技术总结
  • 3D感知方面 :卡尔曼滤波在3D线和3D平面的重建中发挥了重要作用。通过不断迭代更新状态估计器和误差协方差矩阵,可以从多个2D图像中准确地重建出3D表面。同时,客户端 - 服务器程序为实际应用提供了一种可行的解决方案,使得机器人能够获取周围环境的3D信息。
  • 非平面表面感知方面 :边缘检测是基础,通过计算方向导数和梯度,可以找到图像中的边缘。曲线追踪和分段线性近似方法则进一步处理边缘信息,帮助我们理解非平面表面的性质。
6.2 应用展望
  • 机器人领域 :这些技术可以帮助机器人更好地感知周围环境,实现更精确的导航和操作。例如,机器人可以根据3D感知信息避开障碍物,根据非平面表面感知信息进行物体抓取。
  • 计算机视觉领域 :在图像识别、场景重建等方面,这些技术可以提高识别和重建的准确性。例如,在医学图像分析中,可以通过3D感知和非平面表面感知技术更好地分析人体器官的结构。
7. 相关技术对比

为了更好地理解这些技术,下面对一些相关技术进行对比。

技术名称 优点 缺点 适用场景
卡尔曼滤波 能够有效处理噪声,通过迭代更新提高估计精度 对初始值敏感,计算复杂度较高 3D重建、状态估计
梯度滤波器 简单直观,能有效检测边缘 对噪声敏感,可能产生虚假边缘 边缘检测
分段线性近似 能够简化曲线分析,提供曲线的局部性质 可能丢失曲线的一些细节信息 曲线性质分析
8. 操作建议与注意事项
8.1 卡尔曼滤波操作建议
  • 初始值选择 :初始状态向量和误差协方差矩阵的选择对结果有重要影响。可以根据实际情况选择合适的初始值,或者通过前几个测量向量进行估计。
  • 迭代次数控制 :迭代次数过多可能会增加计算时间,而过少可能会导致估计精度不够。可以根据指定的协方差误差来控制迭代次数。
8.2 边缘检测操作建议
  • 阈值选择 :梯度阈值的选择会影响边缘检测的结果。如果阈值过高,可能会丢失一些边缘;如果阈值过低,可能会产生过多的虚假边缘。可以通过实验来选择合适的阈值。
  • 滤波器选择 :不同的滤波器有不同的特点和适用场景。例如,Prewitt滤波器计算简单,Sobel滤波器对噪声有一定的抑制作用。可以根据实际需求选择合适的滤波器。
8.3 曲线追踪和分段线性近似操作建议
  • 分段长度选择 :分段长度会影响曲线性质预测的准确性。如果分段过长,可能会丢失曲线的局部特征;如果分段过短,可能会增加计算复杂度。可以根据曲线的特点和分析需求来选择合适的分段长度。
9. 总结

3D感知和非平面表面感知技术是计算机视觉领域的重要组成部分。通过卡尔曼滤波、边缘检测、曲线追踪和分段线性近似等技术,可以实现准确的3D重建和表面感知。在实际应用中,需要根据具体情况选择合适的技术和参数,以达到最佳的效果。同时,这些技术在机器人、计算机视觉等领域有着广阔的应用前景,未来有望得到更广泛的发展和应用。

graph LR;
    A[图像输入] --> B[边缘检测];
    B --> C[曲线追踪];
    C --> D[分段线性近似];
    D --> E[非平面表面性质分析];
    F[2D图像组] --> G[卡尔曼滤波3D重建];
    G --> H[3D表面信息];
    I[客户端 - 服务器程序] --> J[图像采集与传输];
    J --> K[3D信息处理];

以上流程图展示了整个3D感知和非平面表面感知的流程,从图像输入开始,经过边缘检测、曲线追踪等步骤完成非平面表面性质分析,同时通过客户端 - 服务器程序和卡尔曼滤波实现3D重建。这些技术相互配合,为计算机视觉应用提供了强大的支持。

本 PPT 介绍了制药厂房中供配电系统的总体概念与设计要点,内容包括: 洁净厂房的特点及其对供配电系统的特殊要求; 供配电设计的一般原则与依据的国家/行业标准; 从上级电网到工厂变电所、终端配电的总体结构与模块化设计思路; 供配电范围:动力配电、照明、通讯、接地、防雷与消防等; 动力配电中电压等级、接地系统形式(如 TN-S)、负荷等级与可靠性、UPS 配置等; 照明的电源方式、光源选择、安装方式、应急与备用照明要求; 通讯系统、监控系统在生产管理与消防中的作用; 接地与等电位连接、防雷等级与防雷措施; 消防设施及其专用供电(消防泵、排烟风机、消防控制室、应急照明等); 常见高压柜、动力柜、照明箱等配电设备案例及部分设计图纸示意; 公司已完成的典型项目案例。 1. 工程背景与总体框架 所属领域:制药厂房工程的公用工程系统,其中本 PPT 聚焦于供配电系统。 放在整个公用工程中的位置:与给排水、纯化水/注射用水、气体与热力、暖通空调、自动化控制等系统并列。 2. Part 01 供配电概述 2.1 洁净厂房的特点 空间密闭,结构复杂、走向曲折; 单相设备、仪器种类多,工艺设备昂贵、精密; 装修材料与工艺材料种类多,对尘埃、静电等更敏感。 这些特点决定了:供配电系统要安全可靠、减少积尘、便于清洁和维护。 2.2 供配电总则 供配电设计应满足: 可靠、经济、适用; 保障人身与财产安全; 便于安装与维护; 采用技术先进的设备与方案。 2.3 设计依据与规范 引用了大量俄语标准(ГОСТ、СНиП、SanPiN 等)以及国家、行业和地方规范,作为设计的法规基础文件,包括: 电气设备、接线、接地、电气安全; 建筑物电气装置、照明标准; 卫生与安全相关规范等。 3. Part 02 供配电总览 从电源系统整体结构进行总览: 上级:地方电网; 工厂变电所(10kV 配电装置、变压
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值