四线电阻屏校正算法

转自: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年的(大虾论坛里有下载),那时候的屏都比较小,所以会比较精确。现在都是电容屏了似乎很少有高人去弄电阻大屏的校正算法了。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值