理解多点触控/图像采集
在考虑多点触控系统时,将它分解成几个组成部分是有利的,这些组成部分协同工作以形成整个系统。因此,管道中的第一步始终是采集。在本书的后面,我们将描述我们将从中获取数据的硬件,但现在,我们将讨论如何在软件中对这些数据进行建模。
首先,我们需要提出一个格式来描述系统。我们在采集阶段进行此操作,因为管道中更下游的每个组件都需要了解此格式是什么,以及如何与之交互。在数字信号处理中使用的其他系统中,数据以原始图像数据包或以众所周知的格式的原始声音数据包的形式导入。例如,图像通常以 Y:Cr:Cb(在 RAW 模式图像中看到)或 RGB(在网络摄像头和更便宜的数码相机等其他设备中)的形式导入,声音通常以 PCM 数据的形式表示。
PCM 或任何图像模式都不直接适用于多点触控,因为在这种情况下来自传感器的數據可能既不模拟声音也不模拟图像。我们倾向于将来自传感器的數據视为直方图數據,即网格上某一点的强度。成像模型最能表示这一点,但很明显,RGB 或 Y:Cr:Cb 都不能正确描述这一点。我们需要为我们自己的使用定义一个新的格式。
第一步是描述我们基础设备的平均分辨率。这可能会有很大差异,低端电容传感器和压力传感器提供非常低分辨率的數據源,而图像传感器会产生大量細節的數據,通常细节太多,难以处理。您的系统的良好起点是 8 位分辨率(表示 2^8 = 256 个不同的可能参考点),但您的传感器可能需要更大的范围。
确定什么是可用數據以及什么是噪声是我们解决方案的下一部分。传感器通常可以在启动时执行此操作,或者通过从传感器收集多个數據样本、对这些數據进行平均并使用结果作为平台噪声的参考来进行校准例程(算法 1)。同样,由于这依赖于硬件,因此实施者将决定多少样本以什么速率就足够了。要记住的一点是,许多传感器依赖于温度,并且可能发生漂移,因此将校准例程实现为环形缓冲区并使用运行平均值持续校准可能是有利的。
正如稍后将非常清楚地说明的那样,任何多点触控系统中的主要敌人都是噪声。在我们的例子中,噪声仅仅是错误的信息。它如何变得不正确(例如,传感器到缓冲区分辨率映射错误)并不像它实际上有多不正确(白噪声与粉红噪声或其他有色噪声)那样重要。例如,维纳反卷积可以校正由于白噪声而经常发生的错误。其他类型的噪声可以通过动态规划算法从信号中去除。
认识到在采集级别,我们不需要完美。我们在這裡浪费的时间越多,我们在管道中更下游的时间就越少,以使设备对用户的输入做出响应。虽然尝试通过编程方式去除噪声是值得的,但最好的方法是确保噪声永远不会进入系统,并且应该在硬件传感器实施中进行处理,我们将在本书后面讨论。
为了本书的目的,我们需要描述一个模型,该模型对任何编程示例都通用。为了简单起见,该模型不会描述物理传感器,而是描述一个理论上的“完美传感器”,在该传感器中我们可以相信所有數據都是 100% 正确的。错误考虑将在适当的时候指出,但在讨论我们的传感器模型时不会考虑。
概述中描述的所有多点触控的基础都是基于具有二维输入传感器的想法。传感器不需要高分辨率,而且由于我们将经常对其进行采样,因此我们希望尽早丢弃尽可能多的數據。我们理论上的模型传感器将具有 8 个元素的水平和垂直分辨率,由 8 位分辨率组成。假设水平和垂直轴上的 8 个元素是等间距的,无论这种间距是几毫米还是厘米(或更多)都与我们的模型无关。在我们的模型中,我们将 8 位深度称为 **压力分辨率**,并将水平和垂直分辨率统称为 **空间分辨率**。
我们的压力分辨率将被建模为一个整数,其归一化和校准的零压力由 0 表示,我们可以记录的最大压力由 255 表示。在实际系统中,将最低两位保留为指示错误状态(例如,样本溢出可表示分辨率)可能是有利的,但在本模型中,我们的传感器将始终表示完美数据。我们的空间分辨率将被建模为从 0 到 7 的整数,分别位于任一轴上,以矩阵的形式表示。