机器人视觉处理与智能垃圾收集技术解析
1. 非平面表面感知中的梯度算子
在图像处理中,梯度算子是检测图像边缘的重要工具。常见的梯度算子有 Prewitt 算子和 Sobel 算子,它们的形式如下:
Prewitt 算子
-
水平方向
:
[
\begin{bmatrix}
-1 & 0 & 1 \
-1 & 0 & 1 \
-1 & 0 & 1
\end{bmatrix}
] -
垂直方向
:
[
\begin{bmatrix}
-1 & -1 & -1 \
0 & 0 & 0 \
1 & 1 & 1
\end{bmatrix}
]
Sobel 算子
-
水平方向
:
[
\begin{bmatrix}
-1 & 0 & 1 \
-2 & 0 & 2 \
-1 & 0 & 1
\end{bmatrix}
] -
垂直方向
:
[
\begin{bmatrix}
-1 & -2 & -1 \
0 & 0 & 0 \
1 & 2 & 1
\end{bmatrix}
]
梯度图 ( g(m, n) ) 需要进行阈值操作。若 ( g(m, n) ) 超过阈值 ( t ),则像素点 ( (m, n) ) 被判定为边缘点。阈值 ( t ) 可通过研究 ( g(m, n) ) 的累积直方图来设定,使得具有最大梯度的 5 - 10% 的像素被判定为边缘。边缘图 ( \varepsilon(m, n) ) 可表示为:
[
\varepsilon(m, n) =
\begin{cases}
1, & g(m, n) > t \
0, & \text{otherwise}
\end{cases}
]
由上述算子生成的边缘图通常以粗实线作为边界,这些边界本身可能有两条边缘。细化算法有助于将这样的图像转换为一组简单的数字弧,大致沿着中轴分布。
2. 曲线跟踪与曲线拟合
2.1 曲线跟踪
边缘检测算子生成的边缘图是构成图像边缘的像素的空间分布。然而,对图像进行解释性分析需要了解边缘的性质,这就需要知道边缘的连通性或连续性,这就需要使用轮廓跟踪方法或边缘跟踪。该方法将边缘的像素作为一个连续的数组获取,其中每个连续的成员都是完全位于边缘上的相邻点。可以使用动态规划来找到边缘上两个给定点之间的最优路径。以下是从抓取的图像中跟踪曲线的程序流程:
Begin:
Find image // Collect the image (Im) from the camera of the robot and transfer it to the client machine //
Find the pixel matrix (Pm) from the image.
If:
The image is a color image
Then:
Convert it to grayscale values.
Apply the Prewitt’s operator to the pixel matrix to calculate the horizontal (Hg) and vertical (Vg) gradient and find their vector sum as G.
Find a suitable threshold // a suitable threshold value (T) is chosen for the pixel matrix //
If:
G > T
Then:
It is an edge.
Else:
End for
Arrange the points obtained by the above procedure to represent a continuous curve.
End for
End;
2.2 曲线拟合
对于给定的一组点,找到最适合这些值的曲线方程称为曲线拟合。一旦从边缘图中追踪到定义曲线的点,问题就变成了找到一个包含任意常数的方程,该方程能最好地定义曲线。可以使用以下方法之一进行曲线拟合:
1.
图形法
- 以合适的比例将给定点绘制成图形。
- 绘制最佳拟合直线,使点在直线两侧均匀分布。
- 选取两个任意点 ( (x_1, y_1) ) 和 ( (x_2, y_2) ),计算 ( m ) 和 ( c )。
2.
最小二乘法
3.
矩法
4.
分组平均法
当曲线为线性规律 ( y = mx + c ) 时,图形法按上述步骤进行。但当点不能用直线近似时,可生成平滑曲线,使用曲线的规律并将其简化为线性形式。然而,图形法在这种情况下无法产生准确和唯一的拟合。最小二乘法在确定能拟合给定数据的近似曲线的形式方面帮助不大,它只能在曲线的性质事先已知的情况下确定方程中的最佳系数。随着多项式阶数的增加,求解方程变得极其困难,而且该原理很难应用于由 ( x ) 和 ( y ) 的二次(或更高)方程定义的曲线(例如 ( \frac{x^2}{a^2} + \frac{y^2}{b^2} = 1 ) 所表示的圆、椭圆和双曲线)。
为了预测曲线的性质,这里提出一种图形方法来估计一组点的曲率。从图像边缘提取的点应具有良好的接近度和足够的连续性。每条曲线都有一个特征斜率变化模式,可以通过曲线中连续点的切线来找到。由于很难预测所有瞬时点的切线,我们将研究切割等长弦的割线,使弦形成一组连续的连接线线段。因此,我们将研究曲线的分段线性近似模式。
2.3 分段线性近似示例
以圆和椭圆为例,曲线被近似为连续连接的线段。线段的大小通过斜率阈值近似于曲线。分段线性近似假设每个线段的斜率近似于曲线在中点处的切线,并且曲线在两个这样的点之间不会突然变化,这种变化将作为噪声被去除。从一个线段到另一个线段的斜率变化由角度 ( \theta_1, \theta_2, \cdots ) 表示,这些角度可以作为曲线的特征模式被观察到。线段被延伸到曲线之外形成割线,以便于视觉检查。
- 圆 :在二维空间中,任意一个圆的连续弦所形成的角度都相等,这可以通过简单的几何公理和定理证明。
- 椭圆 :如图所示,角度 ( \theta_1, \theta_2 ) 逐渐减小到最小值,然后逐渐增大,形成周期性变化的角度。
需要注意的是,为了获得相当准确的关系,弦长应谨慎选择。弦长过小会由于边缘映射图像中存在的噪声而导致许多异常结果;弦长过大则会降低预测的准确性和效率。一旦预测出曲线的性质,就可以应用坐标几何原理来估计其参数,如圆心、半径、焦点等。
以下是曲线拟合的伪代码:
Begin:
Divide the curve into small numbers of segments
Find gradient // obtain the slope of the tangents (θi) at each point of the segment on the curve //
If:
All the slopes of the segment are nearly equal
Then:
Predict the curve as a circle
ElseIF:
The slopes gradually decreases first to a minimum and increases gradually
Then:
Predict the curve as an ellipse
End;
3. 曲线检测程序
曲线检测程序旨在识别机器人环境中物体的弯曲边缘。该程序主要分为两个基本部分:边缘图生成器和曲线识别系统。
3.1 边缘图生成器
边缘图生成器是一种传统算法,它在图像上实现 Prewitt 或 Sobel 边缘检测算子。这里的“图像”是从运行在机器人上的彩色图像服务器程序获取的,该程序将帧发送到 Java 客户端。为了提高效率,其余的处理在客户端进行。
3.2 曲线识别系统
生成边缘图后,根据其内容选择边缘图的一部分并传递给曲线识别系统。曲线检测基于分段线性近似理论,该理论基于每个曲线都表现出独特的斜率模式,这种模式可以从连续切割曲线的等长割线形成的微分角度中研究得到。
以下是客户端和服务器程序的流程图:
客户端程序流程图
graph TD;
A[Start] --> B[Get color image from camera, Initialize counter count = 0];
B --> C{count < 320x240};
C -- Yes --> D[Send RGB pixel value to client, Increment count];
D --> C;
C -- No --> E{Is interrupted};
E -- Yes --> F[Stop];
E -- No --> B;
服务器程序流程图
graph TD;
A[Start] --> B{Is interrupted};
B -- Yes --> C[Stop];
B -- No --> D{Whether Completed};
D -- Yes --> E[Convert to Gray Scale];
D -- No --> F{count < 320 x 240};
F -- Yes --> G[Read RGB pixel value from server, Increment count];
G --> F;
F -- No --> H[H = horizontal gradient, V = vertical gradient, G = sqrt (H^2 + V^2)];
H --> I[Edge Map E = Threshold(G)];
I --> J[Apply Thinning Algorithm];
J --> K[Sequence edge points into curve points];
K --> L[Choose approximate chord length and form piece-wise linear approximation];
L --> M[Find differential angle between successive lines and predict the nature of curve];
M --> N[Display Result];
在程序执行期间,客户端前端显示输出。第一个窗口显示机器人相机抓取的图像,第二个窗口显示程序生成的边缘图。窗口提供两个控制按钮:“HOLD”和“PREDICT”。“HOLD”按钮用于冻结视频帧,以便使用稳定的图像进行进一步处理。使用鼠标在边缘图上选择图像的一部分后,点击“PREDICT”按钮将启动所选部分的曲线识别程序,并显示结果。灰色线条表示可能的圆形区域,断线表示偏差。然而,噪声图像的影响是该程序性能的一个限制因素。
4. 智能垃圾收集
4.1 简介
智能垃圾收集是移动机器人的实时应用之一,它利用机器人的运动、抓手以及视觉系统。该程序的目标是收集一组给定颜色的盒子并将它们带到一个地方。盒子的颜色不是限制,可在程序运行时设置。
首先,选择盒子的颜色并获取图像。逐像素检查每个图像与盒子颜色的匹配情况。如果像素值落在特定范围内(该范围由用户设置),则将该像素设为黑色,否则设为白色。这样,整个图像被映射为另一个图像,其中黑色点类似于盒子的颜色。之后,将图像分成 12 个块(3 × 4),统计每个块中的点数,找到点数最多的块。如果该值超过预设值(预设值的设置是为了避免将噪声视为物体),则选择该特定块,机器人移动到该物体处进行抓取。如果物体的表面平面与抓手臂不平行,机器人可能无法在第一次尝试时抓取,需要进行更多尝试。
4.2 算法和源代码
服务器算法
Step 1: Open the server socket and wait for the client to join.
Step 2: Send the image and wait for the next instruction.
Step 3:
If next instruction = IMAGE
Then go to Step – 2.
Else go to Step – 4.
Step 4: If next instruction = STOP
Then stop the robot.
Go to Step – 2.
Else go to Step – 5.
Step 5: If next instruction = EXIT
Then go to Step – 11.
Else go to Step – 6.
Step 6: If next instruction = GO
Then go to Step – 7.
Else go to Step – 2.
Step 7: Send Image and get angle and instruction.
Step 8: If angle = 45
Then turn by angle. Go to Step – 9.
Else turn by angle.
Move 250 mm.
Goto Step – 9.
Step 9: If Beam break state = true
Then close the gripper.
Turn towards origin and move to origin.
Drop the object there and return to initial position.
Step 10: If instruction = IMAGE
Go to Step – 7.
Else If instruction = STOP Go to Step – 2.
Else Go to Step – 11.
Step 11: If Client connected.
Then Go to Step – 7.
Else Go to Step – 12.
Step 12: Stop.
客户端算法
Step 1: Open the client socket and connect to the server.
Step 2: Get the image.
Step 3: Select the color of the box. Get the user instruction.
Step 4: If instruction = IMAGE
Go to Step – 2.
Else if instruction = GO
Go to Step – 5.
Else go to Step – 2.
Step 5: Get the next image.
Step 6: I = 0, C = color of the box,
Threshold = value of range, M = min. upper limit.
Image() = color image, Ang(12) = the angles for 12 blocks
Step 7: For I = 0, I < 320×240, I++
If abs(image(I) - C) <= threshold
Image(I) = black
k = (i/320)/80*4 + (i%320)/80;
count[k] ++
Else Image(I) = white
Step 8: If MAX(count) > M
Then keep k such that count(k) = MAX(count)
Step 9: Send Ang(k) if k has max count
Else send 45.
Step 10: If Client connected
Goto Step – 5.
Else goto Step – 11.
Step 11: Stop.
4.3 程序输出和操作说明
在主菜单中有四个按钮:“Get Image”、“Color”、“Go”和“Stop”。
- “Get Image”:从服务器获取图像,通常用于拍摄彩色盒子的图像,用于在程序运行时设置盒子的颜色。获取盒子图像后,图像将显示在左窗口。
- “Color”:在收到盒子图像后点击此按钮,之后其他按钮将被禁用,此时选择包含盒子颜色的图像部分,程序获取的盒子颜色将显示在“Box Color”区域。如果盒子颜色获取不正确或想重新选择,再次点击“Get Image”按钮,然后重复上述步骤。
- “Go”:用户对盒子颜色满意后点击此按钮,机器人将在其环境中搜索盒子。如果找到,机器人将向其移动,直到抓取并将其放置在原点,然后返回原始位置继续扫描环境。该程序将持续运行,直到关闭窗口。
- “Stop”:如果用户出于某种原因想停止机器人,点击此按钮,机器人将在下次获取图像的周期中停止。
程序还有两个滑块:“Threshold value”和“Max. count value”。“Threshold value”用于设置像素值与盒子颜色的接近范围,程序通过该范围判断哪些像素接近盒子颜色。“Max. count value”用于设置子窗口中接近盒子颜色的像素数量阈值,包含最多此类像素的子窗口将决定机器人的移动方向。
总结
技术要点总结
| 技术领域 | 要点 |
|---|---|
| 非平面表面感知 | 使用 Prewitt 和 Sobel 梯度算子检测边缘,通过阈值操作生成边缘图,细化算法优化边缘图 |
| 曲线跟踪与拟合 | 曲线跟踪使用动态规划找最优路径,曲线拟合有图形法、最小二乘法等,分段线性近似可预测曲线性质 |
| 曲线检测程序 | 分为边缘图生成器和曲线识别系统,受噪声图像影响 |
| 智能垃圾收集 | 利用机器人运动、抓手和视觉系统,通过颜色识别和块计数确定目标位置 |
整体应用与展望
这些技术在机器人视觉处理和智能应用中具有重要意义。曲线检测和拟合技术有助于机器人识别环境中的物体形状,智能垃圾收集则展示了机器人在实际任务中的应用能力。然而,噪声图像对曲线检测程序性能的影响以及机器人抓取物体时可能遇到的问题,都需要在未来进一步优化。随着技术的不断发展,机器人的视觉处理和智能应用将更加准确和高效,为更多领域带来便利。
超级会员免费看

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



