(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個係數:A、B、C、D、E、F。而上面方程組按照克萊姆法則解即可。
在得到6個係數後,以後通過觸摸屏得到的所有坐標,帶入公式(1)中就可以得到LCD上以像素表示的坐標。
觸摸屏的校驗原理說完了,但是原理與實現之間還是有一些差距的,例如根據原理我們只需3個坐標點就可以了,可是在很多系統為了精度的需要而採集5個坐標點,那麼如何處理這5個點呢? (直接用上面的方程顯然不行)具體的實現可以參考另一篇博文: http://blog.sina.com.cn/s/blog_5d9051c00100eec9.html 。
附:克拉姆法則
前面說過,只需要三組點坐標,我們就可以完成觸摸屏的校正,其基本公式為:
實際上,在校正時,採集的觸摸屏的點坐標有一定的誤差,也就是說採集幾個三組點坐標,分別計算A、B、C、D、E、F,其結果不盡相同。
在tslib的ts_calibrate中,採集了五組點坐標,具體代碼參見ts_calibrate.c中的perform_calibration()。
一般來說,採集的點越多,校正的精確性就越高。為了在計算過程中兼顧5個點的坐標, ts_calibrate將公式(1)變換如下:
以第一組(A、B、C)為例, 進一步變換為:
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)中,就可以求出A、B、C,同理可求D、E、F。
解的時候用的是逆矩陣的方法,即:
P 0 = M · P 1 ======> (M) -1 P 0 = P 1
我們可以看出,運用上述方法可以處理任意多的採集點,而不局限於5個,只是採集點過多就會冗餘,對校正精確性的提高作用很少,反而增加了計算時間。
留言列表