C# 触摸屏校准算法研究
所谓触摸屏校准,其实就是硬件坐标转屏幕坐标的过程。最近试了下windows 7 的校准,总的感觉还可以,不过windows 7校准有个不同之处,就是单点的触摸屏跟多点的触摸屏貌似需要校准点不一样,多点的触摸屏需要16点校准,也不知道这两个方式的实现是否采用了相同的算法。
根据产品的需要最近对触摸屏的各种校准算法进行了研究:
1. 过原点直线比例关系,建立过原点直线方程即y=kx(k为比例系数);k=屏幕横向(或竖向)分辨率/硬件横向分辨率(或竖向);这种方式简单,但缺点也明显,这个需要硬件的安装与屏幕的对应达到一一对应,实际上硬件在安装过程中不可能无误差
2. 通过一般一次线性方程
A1 *x+ B1*y + C1 = Xd;
A2 *x +B2*y + C2 = Yd;
x,y为采样坐标,xd,yd为对应的屏幕坐标
为了要得到相对的精确的系数A1,B1,C1……需要转成二次方程,然后采用高斯消元或者格拉姆对角线法则进行求解;
此算法看似简单,但是在要得到相对精确的系数需要进行相对复杂的计算,但是这个算法也有优势,可以使用任意多个校准点,校准点的数量要根据实际情况来确定,否则太多的校准点反而带来冗余。Win CE里的校准算法好像就是使用了该方法,此算法校准结果还不错,适用于触摸屏。
3.矩形变换,其实是使用了数字图像处理类似的技术,通过仿射变换把硬件的触摸矩形转成屏幕分辨率矩形,此算法需要点数学知识,就不详细描述。
此算法适用于触摸屏、电子白板校准。
4.基于拉格朗日插值算法进行校准,此方式是通过期刊论文里看到的,实际在模拟测试的时候发现校准结果偏差巨大,也不知道我这边是我这边在写此算法的时候存在bug还是本身就不适用于校准,此算法本身基于最小二乘,最小二乘本身多用于曲线关系。了解的朋友还多多指点。
总结,上述几个算法除了1最简单的没有写之外,其它的我都用C#进行了简单的实现,并使用到真实触摸设备和电子白板上。根据测试结果2和3方法校准结果还不错,已应用于产品上;以上是本人的研究,写的不对的还请指教,或者有更好方式的大家互相交流交流。
作者 e@Board
补充:软件开发 , C# ,