3、线性校准模型:一维线性映射、二维线性映射、比例因子与偏移量的概念
好,咱们进入正题。触摸校准这事儿,说白了就是找两个坐标系之间的对应关系。一个是触摸屏上报的原始坐标,另一个是屏幕显示的物理坐标。怎么把它们对上?最基础、也最实用的方法,就是线性校准模型。
我个人习惯把线性模型比作一把尺子。你拿一把不准的尺子量东西,量出来的数肯定有偏差。校准就是找出这把尺子的「刻度偏差」和「零点偏移」,然后把它修正成标准尺子。嗯,就是这么回事。
一维线性映射:从一根轴说起
先别急着上二维,咱们从最简单的情况开始。假设你只有一个方向的触摸条,比如一个音量滑条。触摸屏上报一个原始值 Xraw,你想把它映射到屏幕坐标 Xscreen。
这个映射关系长这样:
X_screen = a * X_raw + b
这里有两个关键参数:
- a —— 比例因子(Scale Factor)。它决定了原始值变化一个单位,屏幕坐标变化多少。说白了就是「放大倍数」。
- b —— 偏移量(Offset)。它修正了零点位置。触摸屏的(0,0)和屏幕的(0,0)往往不在一起,b就是把这个差距补上。
举个例子。我手头有个老项目,触摸条原始值范围是 0~1000,但屏幕坐标是 0~100。那比例因子 a 就是 100/1000 = 0.1。如果触摸屏在原始值为 0 时,屏幕坐标已经是 5 了,那偏移量 b 就是 5。最终公式就是 Xscreen = 0.1 * Xraw + 5。
二维线性映射:平面上的对齐
一维搞明白了,二维就好办了。触摸屏是个平面,有 X 和 Y 两个轴。但问题来了——两个轴不是独立的。触摸屏的 X 轴可能和屏幕的 X 轴有旋转,Y 轴也可能有缩放差异。所以二维线性映射比一维复杂一些。
标准形式是这样的:
X_screen = A * X_raw + B * Y_raw + C
Y_screen = D * X_raw + E * Y_raw + F
你看,每个屏幕坐标都同时依赖触摸屏的 X 和 Y 原始值。这就是「耦合」——两个轴互相影响。
这 6 个参数(A、B、C、D、E、F)就是我们要校准的目标。其中:
- A 和 E 是主比例因子,对应 X 和 Y 方向的缩放。
- B 和 D 是交叉耦合项,处理旋转和剪切变形。
- C 和 F 是偏移量,修正零点位置。
比例因子与偏移量的物理意义
咱们把这两个概念拆开细说。
| 参数 | 物理含义 | 典型来源 |
|---|---|---|
| 比例因子 | 触摸屏分辨率与屏幕分辨率的比值 | ADC 采样精度、屏幕像素密度 |
| 偏移量 | 触摸屏原点与屏幕原点的位置差 | 传感器安装偏差、玻璃厚度 |
| 交叉耦合项 | 轴之间的旋转和剪切 | 贴膜角度、传感器非正交 |
比例因子为什么不是 1?你想想看,触摸屏的 ADC 可能是 12 位的,输出范围 0~4095。而屏幕分辨率是 1024x600。如果不缩放,原始值 4095 对应屏幕坐标 4095,早超出屏幕了。所以比例因子就是做这个「范围压缩」的。
偏移量呢?更直观。触摸屏的物理原点在传感器左下角,但屏幕的原点在左上角。这两个点不重合,偏移量就是把这个差距算出来。
核心要点: 线性校准模型本质上是在解一个线性方程组。你只需要采集 3 个以上的校准点(理论上 3 个点解 6 个未知数),就能算出所有参数。点越多,精度越高,但计算量也越大。我一般取 5 个点——四个角加中心,效果比较均衡。
校准流程:从采样到参数求解
实际操作中,校准分三步走:
- 采集原始点:在屏幕上显示 n 个目标点,让用户点击,记录触摸屏上报的 (Xraw, Yraw) 和对应的屏幕坐标 (Xscreen, Yscreen)。
- 构建方程组:把 n 组数据代入二维线性映射公式,得到 2n 个方程。
- 求解参数:用最小二乘法解这个超定方程组,得到 A~F 六个参数。
嗯,这里要注意。n 必须大于等于 3,否则方程数不够。我见过有人只采 2 个点,结果解出来的参数在屏幕中间准,边缘全偏。为什么?因为 2 个点只能确定一条直线,解不出旋转和剪切。
知识体系:线性校准模型的核心逻辑
下面这张图把整个知识结构串起来了。你看一眼就明白:一维是基础,二维是扩展,比例因子和偏移量是贯穿始终的灵魂。
你看,从一维到二维,核心思想没变——都是线性变换。区别只在于维度增加后,参数变多了,计算复杂了。但只要你理解了一维的比例因子和偏移量,二维的交叉耦合项也不过是「轴之间的比例因子」而已。
最后说一句。线性模型不是万能的。如果触摸屏有严重的非线性失真(比如边缘弯曲),线性模型就搞不定了。但那是后面章节的事。现阶段,先把线性模型吃透——它是所有校准算法的基础,也是你排查问题的第一把刀。