1)觸摸屏為什麼需要校正?


    觸摸屏與LCD顯示屏是兩個不同的物理器件。 LCD處理的像素,例如我們通常所說的分辨率是600x800,實際就是指每行 的寬度是600個像素,高度是800個像素,而觸摸屏處理的數據是點的物理坐標,該坐標是通過觸摸屏控制器採集到的。兩者之間需要一定的轉換。


    其次,在安裝觸摸屏時,不可避免的存在著一定的誤差,如旋轉,平移的,這同樣需要校正解決。


     再次,電阻式觸摸屏的材料本身有差異而且隨著時間的推移,其參數也會有所變化,因此需要經常性的校正(電容式觸摸屏只需要一次校正即可,這是由兩者不同的材料原理造成的,具體可參閱有關電阻式和電容式觸摸屏對比的文章)


 


2)如何校正?


   觸摸屏的校正過程一般為:依次在屏幕的幾個不同位置顯示某種標記(如"+", 用觸摸筆點擊這些標記,完成校正。


   如果P T (x, y)表示觸摸屏上的一個點, P L (x, y)表示LCD上的一個點,校正的結果就是得到一個轉換矩陣M,使P L (x, y) = M· P T (x, y)


 


 (3) 校正原理


    我們知道二維幾何變換包含三種平移、旋轉和縮放。這三者的矩陣表示為:


 


平移M T


 触摸屏校正原理


縮放M S


 触摸屏校正原理


旋轉M R


 触摸屏校正原理


 


所以 P L = M R ·M T ·M S · P T 將這個公式展開,其結果為:


触摸屏校正原理


 


   在上面的公式中,LCD上的坐標( X L Y L )和触摸屏上的坐標( X T Y T )是已知的,而其他的則是我們需要求的: θ, S Y, S X, T Y, S X 共有5個變量,至少需要五個方程,因為每組點坐標(P L, P T )可以得到兩個方程,因此我們需要採集三組點坐標。但是上面的方程涉及三角函數,運算複雜,我們可以進一步簡化為:


 


触摸屏校正原理


 





 變量雖然多了一個,但是解題過程簡單多了,更適合計算機計算,而且採集點的數量仍然為3組。


 


 假設LCD三個點的坐標為( X L1 Y L1 ),( X L2 Y L2 ),( X L2 Y L2 ,對應觸摸屏上的三個點是( X T1 Y T1 ),( X T2 Y T2 )。 ( X T3 Y T3 ,則聯立兩個方程組為:


 


 触摸屏校正原理


 


  這樣,觸摸屏的校正實際上就是解上面的方程組,得到6個係數:ABCDEF。而上面方程組按照克萊姆法則解即可。


  在得到6個係數後,以後通過觸摸屏得到的所有坐標,帶入公式(1)中就可以得到LCD上以像素表示的坐標。


  


  觸摸屏的校驗原理說完了,但是原理與實現之間還是有一些差距的,例如根據原理我們只需3個坐標點就可以了,可是在很多系統為了精度的需要而採集5個坐標點,那麼如何處理這5個點呢? (直接用上面的方程顯然不行)具體的實現可以參考另一篇博文: http://blog.sina.com.cn/s/blog_5d9051c00100eec9.html


 


:克拉姆法則


触摸屏校正原理






前面說過,只需要三組點坐標,我們就可以完成觸摸屏的校正,其基本公式為:


 tslib中的校正算法实现


     實際上,在校正時,採集的觸摸屏的點坐標有一定的誤差,也就是說採集幾個三組點坐標,分別計算ABCDEF,其結果不盡相同。


    tslibts_calibrate中,採集了五組點坐標,具體代碼參見ts_calibrate.c中的perform_calibration()


    一般來說,採集的點越多,校正的精確性就越高。為了在計算過程中兼顧5個點的坐標, ts_calibrate將公式(1)變換如下:


 tslib中的校正算法实现


 


   以第一組(ABC)為例, 進一步變換為:


tslib中的校正算法实现


  n表示坐標的數量,ts_calibrate中就是5,分別對 X T Y T X L X L X T X L Y T (X T ) 2 (Y T ) 2 Y T 求和,帶入公式(3)中,就可以求出ABC,同理可求DEF


    解的時候用的是逆矩陣的方法,即:


        


     P 0 = M · P 1 ======> (M) -1 P 0 = P 1


 


      我們可以看出,運用上述方法可以處理任意多的採集點,而不局限於5個,只是採集點過多就會冗餘,對校正精確性的提高作用很少,反而增加了計算時間。


 

創作者介紹
創作者 立你斯 的頭像
立你斯

立你斯學習記錄

立你斯 發表在 痞客邦 留言(0) 人氣()