所謂觸摸屏校准,其實就是硬件坐標轉屏幕坐標的過程。最近試了下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