触摸屏上图片移动延迟削减方法
来源:互联网 发布:淘宝组装机为什么便宜 编辑:程序博客网 时间:2024/05/02 02:48
问题背景:
利用红外扫描的触摸屏会因为电视+扫描框+软件处理性能而产生延迟,在图片移动的过程中,会出现图片滞后于手指的情况。在手指移动速度很大的情况下,图片落后的距离会达到10cm左右。
问题分析:
使用高清摄像机,拍摄触摸画面,统计出延迟帧数为4帧,时间为67ms。每秒扫描框可以采集到50-120帧数据(和框性能有关),根据触摸点的个数有所不同(采集性能有限,触摸点多的情况下,单触摸点的采集频率就会降低)。所以每秒延迟的帧数并不固定,问题也就变成了如何预测接下来67ms内的移动距离。
人的手指运动,既有一定的运动规律,又充满突发性。假设用户前5帧运动了1,1,2, 3 ,5个px,接下来很有可能运动在5 – 8 之间(经验所得),也有可能运动0,1,2。
故没法用简单统一的规律预测运动轨迹。但是其中又有一些确定的规律,人不可能跳跃加速,也不可能突然减速,总是有连续的运动过程。如图一。总是先加速再减速,先运动一个加速过程,再有短暂的匀速,然后减速、短暂静止。
图一
在平均8ms每帧的情况下,以延迟8帧作图,就会有如图二中的距离差距。从图中可以发现,在开始运动8帧之后,系统得到了相应,这时候距离差距也达到了较大值,在转换的地方,反而差距会变小,至此完成了一个小的运动周期。
图二
解决方案:
在图二的情况下,最简单的想法会是把启动时间提前,这样红线就可以和标准的线完全重合了,但是仔细想想,并没办法知道用户启动时间到底会花多少帧,而且就算预测到了提前的帧数,也没办法知道前几帧应该向哪儿、运动多少,所以这种办法并没有效果。
后来我发现如果能够在移动过程中改变速度,在一个周期中,在加速的情况下多加速(下降的地方同样,也是个反向加速),因为并没有办法预测究竟该加速多少,或者当前加速的是多是少。比如说遇到一个例子,发现加速函数太小了,根本不够,还是有滞后,后来调整了系数,使得这个例子能够赶上了。接着又遇到一个,发现刚在加速的时候,位置掉头了,一下子图片产生了一个“甩尾”的情况。如图三。
图三
在尝试了一些预测算法、滤波器之后,发现不可能达到很高的预测率,因为这个运动是极其Random的,如图三中的蓝线(也就是标准轨迹)。想要在加速的时候,让图片赶上手指,必定会导致来不及掉头,或者是遇到特别短促的来回平移时,会出现相反运动。
那我们只能退而求其次,尽量能够在加速的时候,给一些加速补偿,减速的时候,再尽量把加速的误差给还掉,在掉头的时候,将所有补偿去掉(抑或是弥补上,因为转向的时候突变,人眼不敏感,也不易察觉),当反向时,又是个新的运动周期。当然,加速、减速的时候都需要平滑的变化,不能突兀。图四展示了处理效果。
图四
这种处理方式下,可以减少40%左右的Delay。但是虽然红线和蓝线已经贴合的很近了,红线却有的部分还是会突出蓝线之外。在表上只是突出一点,在实际软件使用的过程中,却会导致图片比手指还要提前到指定地点,这样的用户体验非常不好。所以只能退而求其次,再次降低加速的系数,使得红线永远不会超过蓝线。这样处理之后,优化的效果在10-20%之间。
加速补偿公式:C = (avgV + a) * T * PreValue / Le;
avgV:前5帧的平均速度/角度/大小
a:加速度
T:加速系数,根据屏幕大小动态调整
PreValue:前一帧的值
Le: 触摸屏上触摸点的个数
补偿限制公式:Limit = fabs(avgV) * 12 / Le;
指数平滑公式:nowCal = alpha * (PreValue + C) + (1-alpha) * PreValue;
Alpha:0.9
- 触摸屏上图片移动延迟削减方法
- JS实例:网页上图片延迟加载的JS代码
- 关于移动设备上图片处理于滑动的网站
- 透明dialog上图片移动、dialog透明,图片不透明
- CSS3实现鼠标移动到图片上图片变大
- CSS实现鼠标移动到图片上图片变大
- CSS3实现鼠标移动到图片上图片变大
- 使用SimpleAdapter 适配器时显示网络上图片方法
- 网页上图片跳动
- 获取网络上图片
- 编写程序,实现使用键盘上的上下左右箭头控制界面上图片的移动。
- 鼠标移动到图片上图片逐渐变大、变清晰(带有过渡效果)
- 网页上图片禁止下载
- Android获取网络上图片
- 上图片预览前端脚本
- 服务器上图片的存储
- 网页上图片模糊问题
- Android上图片文字识别
- 如何判断一个n次多项式是否对称?
- ADB命令
- 我的备份一
- sublime_text.3.0的安装的以及问题解决
- 8天学通MongoDB——第六天 分片技术
- 触摸屏上图片移动延迟削减方法
- 深圳结构化面试真题
- zookeeper acl权限
- MySQL修改表结构的常用方法
- webView使用内部浏览器加载网页
- 解析XML文件并且进行增删改查操作
- Dockerfile: ADD vs COPY
- 有关jsp-title乱码的可能之一之解决
- xcode 'xxx.app' couldn't be opened because you don't have permission to view it