在这篇文章中,我们将探讨机器视觉中的运动检测。有两种非常常见的方法来实现这个目标:第一种称为差分运动检测(motion by difference ),第二种称为光流(optical flow)。差分运动检测是一种简单且计算量不大的方法,但它提供的信息有限。您可以判断是否发生了运动,并确定运动发生的区域,但无法很好地了解运动的方向和速度。另一方面,光流计算量很大,但能提供大量信息。您可以得到图像中不同小区域的运动速度和方向向量。光流需要先了解一种称为遮罩(masking)的机器视觉方法,因此今天我们只讨论差分运动检测。我将首先介绍这种方法的理论背景,然后在我们的Python代码中设置差分运动检测,并进行一些实验以了解其效果。
继续阅读月度归档:2024年09月
机器视觉(二)背景减法
我们再来看一个图像减法的应用,这个应用叫做背景减法。我们之前讨论过的图像减法应用是颜色减法,这种方法只有在我们知道所寻找对象的颜色时才有效。而背景减法则不同,即使我们不知道所寻找对象的颜色,它也能起作用。但是,背景减法只在图像非常静止且我们寻找的对象进入或离开视野时才有效。让我们通过编写一些代码来学习背景减法的工作原理。
在背景减法中,我们只想看到视野中新的或不同的东西。我们可以通过拍摄一张照片,将其保存为某个变量,然后等到一个新对象进入视野,再拍摄一张新照片。我们可以将旧图像减去新图像,这样就会得到第三张图像,显示两张图像之间的不同之处。让我们编写一些代码来实现这一点。首先,我们要改变的是,不再将图像分解为各个颜色分量,而是使用一个内置的OpenCV函数将彩色图像转换为灰度图像,这个函数叫做cvtColor
。cvtColor
需要两个输入参数:我们想要转换的图像和一个算法调用,告诉它我们想要如何转换颜色。我们将使用COLOR_BGR2GRAY
,使用OpenCV内置的红绿蓝到灰度转换。这种转换不会将图像分解为各个颜色分量,而是以一种模拟人眼感知颜色的方式进行转换。
机器视觉(一)图像减法与目标定位
我们了解到,图像在数学上表示为数字矩阵。这可能是机器视觉中最重要的基本概念,因为一旦我们认识到图像是数字,我们就意识到我们可以对图像执行数学运算。机器视觉领域的大部分工作都在于弄清楚我们可以对图像应用哪些数学运算和算法,以便获得我们从图像中提问的答案。
今天,我们将介绍一些在机器视觉中特别有用的简单数学运算。我们将从图像减法开始,并将其应用于两种不同的情况,两者的目的是在图像中隔离单个对象。然后,我们将介绍一种平均运算,这将帮助我们找到隔离对象的位置。
继续阅读正向运动学分析DH编程实例
在机器人运动学中,正向运动学(Forward kinematics)是指利用机器人的运动方程,根据关节参数的指定值计算末端执行器的位置。
在机械工程中,Denavit–Hartenberg参数(也称为 DH 参数)是与特定惯例相关的四个参数,用于将参考系附加到空间运动链或机器人操纵器的链接上。
Jacques Denavit和Richard Hartenberg于 1955 年引入了这一惯例,以标准化空间连杆的坐标系。Richard Paul于 1981 年证明了其对机器人系统运动分析的价值。虽然已经开发了许多用于连接参考系的惯例,但Denavit–Hartenberg惯例仍然是一种流行的方法。
下面我们通过一个Python的实例来更深入了解这一方法在机械臂设计中的应用。这里用到的Python库是Robotics Toolbox for Python。还是用回之前的运动学图示:
继续阅读Denavit-Hartenberg坐标系
初步规则
Denavit-Hartenberg方法的第一步是为运动学图表分配坐标系。在开始查看Denavit-Hartenberg坐标系规则之前,有几个初步规则。首先,记住每个关节至少需要一个坐标系,末端执行器也需要一个坐标系。注意,坐标系可以多于这个数量,有时多一些坐标系会非常有用,但不能少于这个数量。例如,如果运动学图表有三个关节,您需要至少四个坐标系;如果有五个关节,则需要至少六个坐标系,等等。
继续阅读旋转矩阵
旋转矩阵是一种变换矩阵。该矩阵的目的是在欧几里得空间(Euclidean Space)中执行向量的旋转。几何学为我们提供了四种类型的变换,即旋转、反射、平移和调整大小。此外,变换矩阵使用矩阵乘法过程将一个向量转换为另一个向量。当我们想要改变向量的笛卡尔坐标并将它们映射到新坐标时,我们会借助不同的变换矩阵。
继续阅读线性代数直观指南
尽管上了两门线性代数(linear algebra)课,我的知识仍停留在“矩阵(matrices),行列式(determinants),特征值(eigen)以及什么什么”。
为什么?好吧,让我们来看看这种课程形式:
- 课程名为线性代数,但重点放在矩阵和向量(vectors)上。
- 使用助记符来教授行/列顺序等概念,而不是解释其原因。
- 偏爱抽象例子(二维向量!三维向量!),直到最后一周才开始涉及现实世界的话题。
幸存者是物理学家、图形程序员和其他受虐狂。我们错过了关键的见解:
继续阅读