一、实验选题

基于肤色分割的手势识别

二、实验要求

设计一个应用系统实现相关功能,提供原始文件库,以及测试库。对系统的功能可以进行定量的评价, 可以逐步演示功能模块。

三、实验内容

1. 平台选择
本实验基于OpenCV库,并在使用python语言进行实现。

OpenCV是一个开源的跨平台计算机视觉库,可以运行在Linux、Windows、Android和Mac OS操作系统上。它轻量级而且高效——由一系列 C 函数和少量 C++ 类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。

选用OpenCV的原因是能够很方便的调用连接在电脑的摄像头,而且能够清楚直观地对图像容器进行精确的,创新性的操作。

使用python语言的原因是其开源特性使得可以加入更多的函数库,如引入numpy库进行数组的操作,也方便今后的扩展。

2. 处理技术介绍

2.1 处理基本思路
基本思路如下图所示

2.2 摄像头获取图像
使用openCV库的cv2.VideoCapture(0)函数获取摄像头信息,摄像头使用Logitech HD Webcam C270(720P)。

2.3 颜色空间转换
通常摄像头得到的图像都是基于RGB颜色空间的,RGB三个颜色通道分别表示红绿蓝。在RGB色彩空间中R、G、B三分量相关性强,并且光亮信息融合在这三个分量当中,RGB空间的图像很容易收到光照影响,分别查看高亮度和低亮度条件下手掌皮肤图片(图2.2和图2.3)的RGB通道图像。

使用PS软件提取手掌区域的无背景图片,进行RGB通道分离显示直方图,再合并生成直方图。

可以从图2.4与图2.5看出,高亮度手掌与低亮度手掌的的RGB分布区块差异很大。由于光照的改变引起肤色亮度的变化会使R、G、B也存在显著的变化,在这样的条件下,在RGB色彩空间直接利用R、G、B值建立肤色模型进行肤色分割得到的结果是不可靠的。

而HSV(也叫HSB)颜色空间都可以很好的分割出肤色区域,HSV色彩空间中三个分量H、S、V分别用色调(Hue)、饱和度(Saturation)和亮度(Intensity)来描述色彩。HSV色彩空间不仅直接反映了人类观察色彩的方式,也有利于图像处理,在对色彩信息的利用中,光照强度对于图像的影响大多体现在对于亮度分量V的影响。所以如果能够将亮度信息从色彩中分离出来,而只使用能反映色彩本质的色度和饱和度来实现聚类分析,会达到很好的效果,这也是HSV空间在色彩图像处理和计算机视觉中应用非常广泛的原因。

将高亮度和低亮度条件下手掌皮肤无背景图片(图2.2和图2.3),转换为HSV颜色空间,进行H、S、V通道分离,并生成分布直方图。

可以从图2.6与图2.7看出,高亮度手掌与低亮度手掌的的HSV分布中,只有V分量很不稳定,而H、S分量十分稳定在一开始直方图左侧。有一个相对固定的范围来检测肤色颜色。

RGB颜色空间为一个立方体,而HSV空间可表示为一个圆柱体或圆锥体,他们之间的转换关系为:


下一篇博客我们会讲到图像的预处理。