2020-02-2020.05 计算机视觉课程利用SVM做的基于手势识别的播放器,一个人完成,还有好多问题,如果以后有精力再弄好看点。
肤色提取有多种,常用的包括RGB空间、HSV空间以及YCrCb空间的提取,本次用到的肤色提取模型是基于YCrCb颜色空间的椭圆模型。 算法原理: 百度百科的参考链接:https://baike.baidu.com/item/YCrCb/10874556?fr=aladdin YCrCb原来是为了兼容老式电视机而设计的,但随着肤色检测的需要,YCrCb模型相比于传统的RGB和HSV模型能够较好地消除光照产生的影响,故在视觉处理中常被用来 进行肤色检测。 由于前人已经做了大量地统计分析,如果将皮肤信息映射到YCrCb空间,则在CrCb二维空间中皮肤像素点近似成一个椭圆分布。因此,如果我们构建一个CrCb椭圆模型,我们只需要判断这个像素点(Cr,Cb),我们只需要判断是否在这个椭圆内我们就能确定是肤色像素点,否则就不是。 代码参考MyFuncs.py中的skinMask()函数。
傅里叶描述子是一种图像特征,具体来说,是一个用来描述轮廓的特征参数。其基本**是用物体边界信息的傅里叶变换作为形状特征,将轮廓特征从空间域变换到频域内,,提取频域信息作为图像的特征向量。即用一个向量代表一个轮廓,将轮廓数字化,从而能更好地区分不同的轮廓,进而达到识别物体的目的。 详细请参考:https://blog.csdn.net/Lemon_jay/article/details/89349006
(写论文时请不要直接复制粘贴,由于内容很多我自己也有些写不太下去,这里只是用我觉得能描述清楚的语言介绍,并不适合直接作为书面语言,请按照原理流程自行撰写书面描述,可以参考我的推荐阅读论文) a)把图片二值化,并去除无关干扰项(非手势部分,比如手臂、脸部、额头等) b)提取手势轮廓,对每个轮廓点对应的坐标构建一个复数(x,y)构建为u=x+i*y, 对复数u做傅里叶变换。 c)将傅里叶变换后的频域向量,从中间那项做截断(因为轮廓信息主要在高频部分,但又由于具体的轮廓复杂度难以估计,具体的向量维数不确定,我们从中间向量按两头取相同数量的子向量以此代表整体的轮廓信息) d)对提取的傅里叶算子做简单的归一标准化处理后得到我们需要的训练向量和测试向量,等待将其送入到SVM分类处理。
a)预处理:此次试验由于采用的是笔记本的摄像头,其分辨率不高且试验中不同的光照条件还是会对试验的结果造成一定的影响。这些干扰分别是高斯白噪声和椒盐噪声,使用高斯滤波器和中值滤波器,我们可以在一定程度上消除它们带来的影响。
b)后处理:肤色提取后的手势由于硬件设备和光照的原因,图像中可能会出现一些小黑点或者手势边缘过于尖锐,为了消除这些影响,我们使用一些形态学操作:腐蚀和膨胀、开操作。
a)在视觉处理中,通常一张图像上我们要研究的内容只占其中的一部分,其它部分是非研究部分,也就是不感兴趣的部分。因此,我们需要提取出我们的研究部分(手势部分)。但在此次项目中,为了简便,我们提前规定好了ROI区域,要求在试验中,手势部分必须人为地保持在ROI区域。
支持向量机的主要功能是解决一个简单的二分类和多分类问题。通过构建一系列的回归运算和拉格朗日损失函数的决策函数构建超决策平面实现分类。 (请注意,这里还是为了简要地说明原理,不要直接复制套用)例如,桌面上摆放着若干的红球和黑球,现让你用一根棍子将他们简单地分割为两堆,注意:球是被视为固定位置的,你绝对不能移动任何的小球而只能移动这根棍子。接着,向桌面上增加若干小球,这时,增加的小球很有可能会跑到错误的“阵营”致使分类错误。
——————————————————————————————————————————————