APP下载

多点检测交互系统的研究

2010-03-24高净业黄岸仲

关键词:高斯气泡纹理

高净业,黄岸仲

(杭州电子科技大学图形图像研究所,浙江杭州310018)

0 引 言

随着科技的发展触摸技术已经走入了大众的生活,从银行自动取款机到随身所带的手机,触摸技术无处不在。它的优点在于摆脱了传统输入设备的限制,提供可视化的操作界面,简便了输入的操作,丰富了交互方式,支持来自屏幕上的多个输入点进行人机交互操作[1]。本系统是一台面向娱乐的大型交互系统。虽然多点触摸技术越来越成熟,但是市场上常见的多点触摸系统价格依然十分昂贵。究其原因为多点触摸交互系统制作材料和研发成本较高[2]。现今,大型多点触摸系统目前主要用在大型会议、产品发布会议、商场与企业展厅等领域,在桌面互动娱乐方面的应用还很少见。为了减少材料和研发的成本,本系统采用红外线多点触摸技术,利用反射的红外线计算触摸点的位置。这种方法实现的交互系统价格低廉,虽然在精度上有所欠缺,但是能很好的满足娱乐的需要。

1 硬件系统结构

系统采用基于计算机视觉和受抑全内反射技术的多点触摸屏作为硬件框架,主要硬件包括主机、显示器、视频分配器、红外摄像头、投影机和红外二极管等。该系统具有成本低、硬件结构简单、安装方便等特点。触摸屏的设计原理如图1所示[3],红外LED发射红外线进入亚克力板,当亚克力面板的厚度大于8mm时,光线会发生在亚克力内不停反射,而不会跑出来,这就叫做全内反射,但当你的手指碰到亚克力表面时,全内反射被破坏,光线被手指反射出来,此时,亚克力下方正好有红外摄像头捕捉到手指反射的亮点,摄像头捕捉到的亮点会送到计算机进行处理,形成输入,有几个亮点,就形成几个输入点。

图1 受抑全内反射图

2 交互系统的设计

2.1 多点检测方法

为了准确求得交互点,系统采用的方法是背景差法。该方法的原理为,开始时读入几帧作为背景的基图像,以后读入的图像减去原始的背景,然后用高斯滤波法去掉噪点,得到图像的亮度变化。变化的点就是用户触摸的交互点。求出变化亮点的中心点和近似面积,面积很小的点是噪声点,去掉一些面积很小的噪声点,这些点就是所求的交互点。

一幅原始图像在获取和传输过程中会受到各种噪声的干扰,使图像质量下降,对分析图像不利。反映到图像画面上,主要有两种典型的噪声。一种是幅值基本相同,但出现的位置随机的椒盐噪声,另一种则每一点都存在,但幅值随机分布的随机噪声。为了抑制噪声、改善图像质量,要对图像进行平滑处理。

高斯滤波器是根据高斯函数的形状来选择权值的线性平滑滤波器[4]。高斯平滑滤波器对去除服从正态分布的噪声是很有效果的。对图像来说,常用二维零均值离散高斯函数作平滑滤波器。由于高斯函数的可分离性,大高斯滤波器可以有效实现。通过二维高斯函数的卷积可以分两步来进行,首先将图像与一维高斯函数进行卷积,然后将卷积的结果与方向垂直的相同一维高斯函数进行卷积。因此,二维高斯滤波的计算量随滤波模板宽度成线性增长而不是成平方增长。这些性质使得它在早期的图像处理中特别有用,表明高斯平滑滤波器无论在空间域还是在频率域都是十分有效的低通滤波器。滤波后得到的交互点图像如图2所示。

图2 滤波后的图像

2.2 OpenCV实现算法

这里高斯滤波算法通过OpenCV编程实现,OpenCV是Intel公司支持的开源计算机视觉库。它轻量级而且高效——由一系列C函数和少量C++类构成,实现了图像处理和计算机视觉方面的很多通用算法。算法部分代码:

//高斯滤波后图像

IplImage*dst_Gauss=cvCreateImage(cvGetSize(src),src->depth,src->nChannels);

cvCopy(src,dst_Gauss,NULL);

//原图像与高斯滤波后图像之差

IplImage*dst_differ=cvCreateImage(cvGetSize(src),src->depth,src->nChannels);

3 交互程序实现

检测程序把检测到的触摸点的坐标通过套接字发送给虚拟互动程序实现与场景的交互[5]。“鱼翔浅底”是模拟鱼在水池中游动的场景。数条鱼在水波中自由游动,当手指点中其中一条鱼的时候,鱼就会停止游动并且缓慢地摆动尾巴,此时会有一个带有文字的气泡框从鱼的口中冒出,当按住的时间较长或者放开手指的时候,气泡框会慢慢消失,鱼将重新开始游动。其效果如图3所示。

图3 鱼翔浅底效果图

3.1 水波实现

为了模拟一个真实的鱼的生存环境,需要实现水波荡漾的效果。程序首先渲染一个水中的场景:给每一条鱼指定一条闭合曲线路径,让鱼沿着路径游动。然后在场景中放置两台虚拟摄像机,一台摄像机朝着水中,一台摄像机朝着天空,两台摄像机分别把目标场景渲染到纹理。这两张纹理一张表示水外面的环境,一张表示水里的环境,用来模拟水面的反射和折射的效果。观察一个真实的水面的时候,在不同的角度观察到水面折射和反射的关系也是不同的,这就是根据菲涅耳定律得出的结果。在虚拟场景中用不同的视角观察同一个水面的时候,得到的场景画面也是不相同的,由此可以认为在不同的观察视角下,纹理之间的混合不是固定的,它们之间的混合比例会随着视角的变化而变化。两张纹理按这个比例融合成一张纹理,这样就产生了水面反射和折射的效果。水波荡漾的效果其实就是变动纹理贴图坐标的位置。程序中是使用shader中的噪声函数实现顶点和纹理的波动得到的。

3.2 气泡框效果

虚拟环境中的鱼被用户触摸到的时候,鱼会冒出一个气泡框,气泡框的背景是半透明的,而上面的文字不透明。气泡框里面的文字是实时更新的,因此无法使用图像处理软件把文字预先写上。解决的方法是,预先把气泡框的背景图做好,这是一张带有透明通道的半透明贴图,接下来最主要的工作是文字和图片的结合。程序中使用了一种比较方便的方法。程序使用开源字体库freetype得到所需要的文字的字点矩阵,然后把字阵写到背景图片的相应位置。

3.3 多点逻辑

多点检测程序把检测到的点的坐标传给虚拟互动程序。程序传递数据是通过套接字实现的,每一帧最多传递20个坐标。摄像机的分辨率是640×480,左下角为坐标原点。虚拟场景画面的分辨率是1 024×768,中心点是坐标原点。投影的时候会产生位置的偏差,为了使两个空间的坐标一一对应必须对坐标进行校准。在虚拟场景的特定位置画出几个校准点,然后通过手指触摸使程序记录这些点在摄像机空间中的位置,这样两个空间就形成映射的关系,程序通过插值得到640×480中所有的点的对应点。

检测程序每一帧的时候都会传来很多个点给交互程序。手指触摸是一个连续的过程,但是点的传递是一个离散的过程,为了判定相邻两帧传过来的点是属于同一个点,还是新生的点,程序设定的规则是,如果相邻两帧上的点的坐标距离很近,就视为同一个点,否则就属于新生的点。实验证明这种规则是很有效的。

4 系统实现及结果

基于以上软硬件设计方案和关键技术,采用VC++、OpenCV和OpenGL作为开发工具,实现了多点触摸交互系统。系统实物图如图4所示。鱼翔浅底的水波荡漾和鱼吐气泡框实现较高真实感的三维桌面效果。

图4 系统实物图

5 结束语

本文介绍了一种低成本的多点触摸交互系统的核心功能设计实现过程。介绍了鱼翔浅底交互程序中的水波荡漾效果和气泡框文字效果。结果表明,该系统具有较好的真实感、实时性、互动性和娱乐性。同时,利用该系统框架很容易开发出具有较高真实感和交互性的桌面三维效果,在桌面三维虚拟展示和互动娱乐方面具有较好的应用前景。

[1] Han JY.Low Cost Multi-Touch Sensing through Frustrated Total Internal Reflection[C].Seattle,WA,USA:ACM Press,2005:115-118.

[2] 李谦升.基于计算机视觉的多点触摸系统的设计与实现[D].上海:上海大学,2008.

[3] Wang F,Ren Y S,Liu Z.A Robust Blob Recognition and TrackingMethod in Vision-based Mu lti-touch Technique[C].Sydney,NSW:IEEEPress,2008:971-974.

[4] 李彦军,苏红旗,等.改进的中值滤波图像去噪方法研究[J].计算机工程与设计,2009,33(12):10-12.

[5] 李乐山.人机界面设计[M].北京:科学出版社,2004:26-32.

猜你喜欢

高斯气泡纹理
SIAU诗杭便携式气泡水杯
浮法玻璃气泡的预防和控制对策
基于BM3D的复杂纹理区域图像去噪
数学王子高斯
天才数学家——高斯
冰冻气泡
使用纹理叠加添加艺术画特效
TEXTURE ON TEXTURE质地上的纹理
消除凹凸纹理有妙招!
从自卑到自信 瑞恩·高斯林