四線電阻屏校正算法

轉自:http://gulianjun.blog.163.com/blog/static/2134621522013427439237/

在網上找到一個點校正法,號稱是最佳的校正方法,但是在我的7寸屏上X軸的誤差還是比較大,達到30個像素。而Y軸則相對好的多,不到10個像素。以前沒有做過電阻屏,這次做電阻屏,可謂是困難重重呀。現在做出來的效果還是有很大毛病的,我後期會改進。

先介紹校正的方法的:

X,Y表示LCD上的座標,x,y表示電阻屏A/D後的數據那麼:

X1 = A*x1 + B*y1 + C

X2 = A*x2 + B*y2 + C

X3 = A*x3 + B*y3 + C

因爲電阻屏和LCD可能有角度問題,所以X的座標和觸摸的y是有關係的。

Y1 =D*x1 + E*y1 + F

Y2 = D*x2 + E*y2 + F

Y3 = D*x3 + E*y3 + F

 

http://blog.csdn.net/allen6268198/article/details/7432013 這個博客上也介紹了這個方法,只是用的表示符號不同而已,

Xa’=k1*xa + k2*ya+k3  ---------  2-1

Ya’=k4*ya + k5ya+k6   ----------  2-2

Xb’=k1*xb + k2*yb+k3  ---------  2-1

Yb’=k4*yb + k5yb+k6   ----------  2-2

Xc’=k1*xc + k2*yc+k3  ---------  2-1

Yc’=k4*yc + k5yc+k6   ----------  2-2

通過高數上的各種算法,求出

     Divider =  (Xa’ – Xc’)*(Yb’ – Yc’) - (Xb’ – Xc’)*(Ya’ – Yc’)

                (Xa- Xc)*(Yb - Yc) - (Xb - Xc)*(Ya - Yc)

             k1 = ---------------------------------------------------

                                    Divider

                (Xa’ – Xc’)*(Xb - Xc) - (Xa - Xc)*(Xb’ – Xc’)

            k2 = -------------------------------------------------------------

                                    Divider

             Ya’*(Xc’*Xb – Xb’*Xc) +Yb’*(Xa*Xc’ – Xc’*Xa) +Yc’*(Xb’*Xa – Xa’*Xb)

     K3 = --------------------------------------------------------------------------------------------------------

                                    Divider

                  (Ya - Yc)*(Yb’ – Yc’) - (Yb - Yc)*(Ya’ – Yc’)

             k4 = ----------------------------------------------------------

                                    Divider

                  (Xa’- Xc’)*(Yb - Yc) - (Ya - Yc)*(Xb’ – Xc’)

             k5 = ----------------------------------------------------------

                                   Divider

             Ya’*(Xc’*Yb – Xb’*Yc) +Yb’*(Xa’*Yc – Xc’*Ya) + Yc’*(Xb’*Ya – Xa’*Yb)

         K6 = -----------------------------------------------------------------------------------------------

                                    Divider

 

說實話我是真看不明白這是怎麼算出來的。三個變量,三個等式就可以算出來了爲什麼算三個要用到六個?搞的那麼複雜。X的三個等式可以得到X裏的三個參數A,B,C;Y的三個等式可以得到Y裏的三個參數D,E,F。X,Y的三個參數的算法是完全一樣的:

可以把等式改寫爲:

Z0 = K1*x0 + K2*y0 + K3     式1

Z1 = K1*x1 + K2*y1 + K3     式2

Z2 = K1*x2 + K2*y2 + K3     式3

三元一次方程,忘記是初中還是高中的知識了,想辦法變成二元一次方程,先解出兩個參數,第三個參數自然也得到了。就算忘記看到這裏也知道怎麼做了吧?把K3通過 式1,2,3的減法消去就變成二元一次方程了。

解得:

K1 = [(Z0-Z1)*(y2-y1) - (Z2-Z1)*(y0-y1)]  / [(x0-x1)*(y2-y1) - (x2-x1)*(y0-y1)];

K1 = [(Z0-Z1)*(x2-x1) - (Z2-Z1)*(x0-x1)]  / [(x2-x1)*(y0-y1) - (x0-x1)*(y2-y1)];

K3隨便代入任何一個式都可以得到結果。

 

個人感覺這個算法說的是挺有道理的,也在大蝦的論壇裏看到有人說這個算法比較精確,可是我算完後X軸的偏差還是比較大。可能是我用的7寸屏的原因,480×800的,搜到的一些信息是電阻屏越大邊緣部分誤差越大,校正也越不好做。這個算法是2002年的(大蝦論壇裏有下載),那時候的屏都比較小,所以會比較精確。現在都是電容屏了似乎很少有高人去弄電阻大屏的校正算法了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章