梁登的csdn技术博客
一、简介
CCV是一个建立在openCV基础上的一个开源的架构,其全称是Community Core Vision。它是一个开源的跨平台计算机视觉和机器感知解决方案。它以视频作为输入流,从中捕捉跟踪到的触点信息,包括事件(手指下压、移动、释放等)及触点坐标,这些信息是构建一个多点触控系统所必须。CCV可以以网络摄像机和视频设备作为输入,也支持基于TUIO/OSC/XML等协议的各种应用,以及很多多点触控技术,如FTIR, DI, DSI, 和 LLP等等。CCV更是为支持未来的视觉应用(客户模块/滤波器)作了前瞻性的扩展。
特性:
[1]简单的用户界面。新界面更加直观,易于理解和使用
[2]滤波器(动态背景提取、高通、放大器/标定器(scaler)、阀值)。这意味着它可以为各种光学设备提供支持,包括FTIR、DI、LLP、DSI等。以后还会陆续增加更多的滤波器模块。
[3]相机开关。当用户电脑同时连了好几个相机的时候,只需一个按钮操作就可以搞定相机切换,无需退出程序,重新连接外设。
[4]输入开关。只需按钮操作,就可以把视频输入流从在线相机切换为本地录像,反过来也一样。
[5]动态网格校正。对于桌面过小或者过大的用户来说,可以通过设置校准点或者创建更小点来保持正常的处理速度和系统性能。
[6]图像投射。你可以对视频做水平或垂直翻转,如果视频显示的方向不对。
[7]网络广播。你可以通过直接从配置的程序发送OSC TUIO消息来快速调试程序。
[8]跨平台。在windows,mac,linux上都可以使用
参考资料
二、CCV相关概念
TUIO
TUIO 是一个为可触多点表面定义了标准协议与应用编程接口的开放架构。TUIO协议允许交互式表面上的抽象描述的传输,例如传输触摸和接触物体的状态。 这个协议对跟踪应用者的控制数据编码并将它传送到任何可以解码的客户端应用程序。 目前最新的版本是2.0
http://www.tuio.org/
全内反射:
当光从光密媒质(两种媒质比较时,光通过得慢的媒质叫做光密媒质.例如,空气和水来比较,水就是光密媒质)进入光疏媒质且入射角大于临界角时,在两媒质交界处将发生光的全内反射。
如果将疏媒质的厚度控制到非常薄,例如使两块直角棱镜的底面靠得很近,那么,即便在全反射角度的情况下,透射光依然是可以取出的,亦即全反射受到抑制。
最近几年,人们利用受抑全内反射 FTIR技术制作出了多点输入触摸屏。 触摸技术的突破是从FTIR(Frustrated Total Internal Reflection,受抑全内反射)技术开始的,这份功劳归功于纽约大学的Jeff Han。 在了解了大概的历史之后,我们现在动手来做我们自己的FTIR多点触摸桌(Multi Touch Table)。
FTIR 多点触摸(FTIR Multi Touch)的原理
红外LED(IR LED)发射红外线进入亚克力板(Acrylic),当亚克力面板的厚度大于8mm时,光线会发生在亚克力内不停反射,而不会跑出来,这就叫做全内反射(Total Internal Reflection),但当你的手指(或者其他材质如硅胶等有一定韧性和反射性的材料)碰到亚克力表面时,全内反射(Total Internal Reflection)被破坏,光线被手指反射出来,此时,亚克力下方正好有红外摄像头(IR Camera)捕捉到手指反射的亮点,摄像头捕捉到的亮点会送到计算机进行处理,形成输入,有几个亮点,就形成几个输入点。FTIR 多点触摸(FTIR Multi Touch)的原理就是这样。
三、CCV运行效果及整体流程
CCV进行触点提取的步骤是:
Source image->background abstraction
->object smooth->highpass filter->amplification
或者说是
采集图像->背景分离->目标平滑->高通滤波->幅值增强->得到触点
四、CCV的工作流程
系统要求:
Windows and Mac: Quicktime (附录1)
Linux: libpoco
背景去除
当跟踪到的图像中没有看到指头时,按下“背景移除按钮”获取背景;如果环境中光线变化常常变化,还需要打开“动态提取”开关
滤波:
高通、幅度、平滑滤波
高通滤波是从手的影像中再提取出指头的关键步骤,幅度增强是为了使手指头部分更明显(图像增强),平滑是为了除去噪声干扰(图像去噪),是触点提取过程更加稳定,用专业术语来说是鲁棒性更高(robustness)。
注:为什么高通滤波可以把手指从手的影像中分割出来?
这是由手所成的像的特征决定的(手指头清晰,其他部分与背景的界限模糊,所以高频信息集中在手指部分)
阀值选取(threshhold)
不断调整阀值,直到最后得到的跟踪图像(tracked image)中,只能看到手指头,而且没有虚假触点存在。
参数选择影响最终触电提取的精确度
改变输入清晰度、帧率、通信、视频以及触点设置
CCV的设置文件保存在 config.xml 中
通过对config文件的更改可以改变如下的参数值
1. 输入清晰度、帧率
2. 网络通信地址和端口
3. 测试用的视频文件
4. 可以跟踪的最大触点数目
五、对CCV界面的功能以及概念的的几个解释
1. Blob: 一个明亮发光对象,可以翻译为点或触点。
2. Blob tracking: 给每个点分配一个ID号。对每一帧画面进行分析,区别每个触点,并与其在上一帧的状态进行对比。
3. Blob detection: 从图片中检测出比环境更亮或者更暗的区域的过程。
4. Threshold Slider: 调整追踪点的像素范围(大小)。只有大于这个阈值的点才会被转换成一个追踪点。
5. Min Blob Size: 调整可以接受的最小点大小。只有大于这个值,一个点才会被分配一个ID。
6. Max Blob Size: 调整可以接受的最大的点大小。当一个点的大小大于这个值后将失去被分配的ID。将重新选择点。
7. Smooth Slider: 平滑图像并且从图像中过滤噪音
8. Highpass Blur Slider:移除图像中模糊的部分,保留比较明显的明亮的部分。
9. Highpass Noise: 在HighPass Blur之后从图像中过滤掉噪音。
附录 关于quicktime
QuickTime是苹果公司提供的系统及代码的压缩包,它拥有C和Pascal的编程界面,更高级的软件可以用它来控制时基信号。在QuickTime中 时基信号被叫做影片。应用程序可以用QuickTime 来生成,显示,编辑,拷贝,压缩影片和影片数据,就象通常操纵文本文件和静止图像那样。除了处理视频数据以外,QuickTime3.0还能处理静止图像,动画图像,矢量图,多音轨,MIDI音乐,三维立体,虚拟现实全景和虚拟现实的物体,当然还包括文本。它可以使任何应用程序中都充满各种各样的媒体。QuickTime包括影片工具箱、图像压缩两个管理器,加上内嵌的一套组件。