颜色跟踪说明#
什么是跟踪颜色,CMUcam4 如何做到?#
颜色跟踪是指获取一幅图像、分离出特定颜色,并提取有关该图像中仅包含该颜色的某个区域位置信息的能力。举个例子,假设给您一张照片,其中有一个红色的球放在一条土路上。如果有人要求您在图像中任何红色的物体周围画一个框,您会很轻松地在球周围画一个矩形。这就是颜色跟踪背后的基本思想。您不需要知道该物体是一个球。您只需要有红色这一概念,就能在图片中分离出该物体。下面,我们将简要介绍 CMUcam4 实际上如何使用相机图像中的信息来执行颜色跟踪。
为了指定颜色,您需要为三个颜色通道定义最小和最大允许值。每一种独特的颜色都由红、绿、蓝值表示,这些值指示每个通道有多少混合到该独特颜色中。指定颜色的棘手之处在于,您需要为所有三个颜色通道定义一个允许值的范围。由于光线并非完全均匀,物体的颜色也并非完全均匀,因此您需要考虑这些变化。然而,您也不希望将这些边界放宽太多,否则许多不需要的颜色也会被接受。由于在 CMUcam4 的情况下,每个颜色通道都被转换为 0 到 255 之间的一个数字,因此您可以用两个数字(一个上限和一个下限)来界定每个通道。如果三个通道中的每一个都有两个限值,这意味着可以用六个值来约束您希望跟踪的整个颜色空间。如果您将颜色想象成一个立方体,其中每一面都是一个不同的颜色通道(红、绿和蓝),那么用于选择颜色的这六个值将在该立方体内部画出一个三维盒子,从而定义您所需的颜色集合。
一旦您为想要跟踪的颜色确定了边界,CMUcam4 就会采用这些边界并处理图像。在图像中跟踪颜色有许多方法,其中一些可能相当复杂。CMUcam4 使用一种简单的单遍算法,独立处理来自相机的每个新图像帧。它从图像的左上角开始,逐行依次检查每个像素。如果它正在检查的像素落在用户指定的颜色范围内,它就将该像素标记为被跟踪。它还会检查当前被跟踪像素的位置,看它是否是迄今为止在图像中找到的所有被跟踪像素中最上、最下、最左或最右的位置。如果它发现该像素在被跟踪区域的当前边界框之外,它就会扩大边界框以包含这个新像素。由于即使单个被跟踪像素的位置也可能改变边界框,边界框有时会在帧与帧之间波动很大。噪声过滤(见下一段)可用于减少部分波动。存储的唯一另一个主要信息是被跟踪像素的水平和垂直坐标之和。在图像结束时,CMUcam4 取被跟踪像素的水平总和与垂直总和,将每一个除以被跟踪像素的总数,得到一个显示被跟踪物体中心所在位置的值。由于每个被跟踪像素只对最终的水平和垂直总和贡献一小部分,被跟踪像素的中心(通常称为质心)通常是比边界框稳定得多的测量值。一旦检查完图像中的所有像素,被跟踪像素的总数还可以与边界框的面积结合使用,以计算被跟踪物体的置信度和其中的像素数量。
噪声过滤使我们能够扩大颜色跟踪范围,从而能够适应图像像素值中较大的变化,而不会导致图像中的其他随机变化被跟踪。噪声过滤背后的思想是,我们只希望在某个像素是一组处于颜色跟踪边界内的像素中的一部分时,才将其视为被跟踪颜色。在 CMUcam4 中,我们以一种只需对图像进行一次遍历的方式来实现这一点。在处理图像中的像素时,CMUcam4 维护一个计数器,用于记录当前行中当前像素之前有多少个连续像素处于被跟踪颜色边界内。如果该值高于噪声过滤值,则当前像素被标记为被跟踪像素。
什么是直方图,它有什么用?#
直方图是一种显示数据频率和分布的图表。对于 CMUcam4,直方图显示的是图像中找到的颜色值的频率和分布。每个条形代表特定通道的一段颜色值范围。CMUcam4 可以将 0 到 255 的可能颜色值划分为 1、2、4、8、16、32 和 64 个不同的区间。每个区间包含图像中落在某些颜色边界内的像素数量。因此,某个特定区间中的较大值意味着在图像中找到了许多该颜色。每个直方图仅代表一个选定的颜色通道。
直方图是抽象图像内容的一种方式。它们有许多用途,例如原始的物体识别、阈值处理或颜色平衡。它们对于区分不同的纹理特别有用。尝试在关闭自动增益的情况下将 CMUcam4 对准两个不同纹理的表面,注意它们颜色分布的差异。这种效果可用于区分地板表面或检测障碍物。