【《手势检测算法概述》2000字】_第1页
【《手势检测算法概述》2000字】_第2页
【《手势检测算法概述》2000字】_第3页
【《手势检测算法概述》2000字】_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

手势检测算法概述1.1手势检测方法1.1.1帧间差分法帧间差分法是一种通过视频图像序列的连续两帧图像做差分运算获取目标轮廓的方法。当监控场景中出现异常目标运动时,相邻两帧图像之间会出现较为明显的差别,两帧相减,得到图像所对应位置像素差的绝对值,再对其阈值进行判断,最后分析视频或图像的物体运动特性。如下是帧间差分法的计算公式:其中D(x,y)是连续两帧图像之间的差分图像,I(t)和I(t-1)分别是t和t-1时的图像,T为差分图像二值化时选取的阈值,D(x,y)=1表示前景,D(x,y)=0表示背景。如图为帧间差分法框图:优点:算法实现简单,复杂度低,运行速度快;自适应性强,对场景光线变化不敏感。缺点:手势在运动时灰度值相近,容易产生“空洞”现象;差分图像边缘轮廓较粗,产生“双影”现象;对手势的完整区域不易提取,只能提取出大致轮廓;严重依赖所选时间间隔和阈值。1.1.2光流法光流场(OpticalFlow)是用来表征图像中像素点的灰度值发生变化趋势的瞬时速度场。在现实世界中,目标的运动通常是通过视频流中各个像素点灰度分布的变化表征的。图2-1表现了昆虫在飞行过程中所处的三维光流场。C图中箭头的长度和指向表征了各点光流的大小和方向。美国学者Horn和Schunck在1981年提出了光流场的计算方法,他们在两帧图像的灰度变化和时间间隔都很小的前提下,推导出了光流的基本约束方程,从而奠定了光流场计算的理论知识。利用光流场法实现目标检测的基本思想是:首先计算图像中每一个像素点的运动向量,即建立整幅图像的光流场。如果场景中没有运动目标,则图像中所有像素点的运动向量应该是连续变化的;如果有运动目标,由于目标和背景之间存在相对运动,目标所在位置处的运动向量必然和邻域(背景)的运动向量不同,从而检测出运动目标。通过计算光流场得到的像素运动向量是由目标和摄像机之间的相对运动产生的。因此该类检测方法可以适用于摄像机静止和运动两种场合。但是光流场的计算过于复杂,而且在实际情况中,由于光线等因素的影响,目标在运动时,其表面的亮度并不是保持不变的,这就不满足光流基本约束方程的假设前提,导致计算会出现很大的误差。1.2.3背景差分法对于一个稳定的监控场景而言,在没有运动目标,光照没有变化的情况下,视频图像中各个像素点的灰度值是符合随机概率分布的。由于摄像机在采集图像的过程中,会不可避免地引入噪声,这些灰度值以某一个均值为基准线,在附近做一定范围内的随机振荡,这种场景就是所谓的“背景”。背景差分法是当前运动目标检测技术中应用较为广泛的一类方法,它的基本思想和帧间差分法相类似,都是利用不同图像的差分运算提取目标区域。不过与帧间差分法不同的是,背景减法不是将当前帧图像与相邻帧图像相减,而是将当前帧图像与一个不断更新的背景模型相减,在差分图像中提取运动目标。如图是背景差分法的示意图:首先利用数学建模的方法建立一幅背景图像帧B,记当前图像帧为fn,背景帧和当前帧对应像素点的灰度值分别记为B(x,y)和(x,y),将两帧图像对应像素点的灰度值进行相减,并取其绝对值,得到差分图像计算公式:利用背景减法实现目标检测主要包括四个环节:背景建模,背景更新,目标检测,后期处理。其中,背景建模和背景更新是背景减法中的核心问题。背景模型建立的好坏直接影响到目标检测的效果。所谓背景建模,就是通过数学方法,构建出一种可以表征“背景”的模型。获取背景的最理想方法是在没有运动目标的情况下获取一帧“纯净”的图像作为背景,但是,在实际情况中,由于光照变化、雨雪天气、目标运动等诸多因素的影响,这种情况是很难实现。1.3手势检测算法选择与优化手势检测算法是进行手势识别的重要步骤之一。首先需要对视频图像进行采集,然后进行分割,不仅如此,还需要由对图像搭配的模板和进行识别的主题算法,这样,就可以不断学习与模板进行比较,进而进行分类和识别操作。如图是进行手势识别的一般处理步骤:实现手势录制识别的核心代码:WhileTrue:#读取视频帧ret,frame=cap.read()#镜像转换frame=cv2.flip(frame,1)cv2.imshow(‘Original’,frame)#双边滤波frame=cv2.bilateralFilter(frame,5,50,100)#绘制矩形,第一个为左上角坐标(x,y),第二个为右下角坐标#rec=cv2.rectangle(frame,(220,50),(450,300),(255,0,0),2)Rec=cv2.rectangle(frame,(self.x1,self.y1),(self.x2,self.y2),(255,0,0),2)#定义roi区域,第一个为y的取值,第二个为x的取值#frame=frame[50:300,220:450]frame=frame[self.y1:self.y2,self.x1:self.x2]cv2.imshow(‘bilateralFilter’,frame)#背景分差法运动检测bg=bgModel.apply(frame,learningRate=0)#现实背景分差法的窗口cv2.imshow(‘bg’,bg)#图像边缘处理--腐蚀fgmask=cv2.erode(bg,self.skinkernel,iterations=1)#显示边缘处理后的图像cv2.imshow(‘erode’,fgmask)#将原始图像与背景减法+服饰处理后的model做“与”操作bitwise_and=cv2.bitwise_and(frame,frame,mask=fgmask)#显示与操作后的图像cv2.imshow(‘bitwise_and’,bitwise_and)#灰度处理gray=cv2.cvtColor(bitwise_and,cv2.COLOR——BGR2GRAY)#高斯滤波blur=cv2.GaussianBlur(gray,(self.blurValue,self.blurValue),2)cv2.imshow(‘GaussianBlur’,blur)#使用自适应阈值分割(adaptiveThreshold)Thresh=cv2.adaptiveThreshold(blur,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C,Cv2.THRESH_BINARY,11,2)cv2.imshow(‘thresh’,thresh)Ges=cv2.resize(thresh,(100,100))#图像的阈值处理(ostu)cv2.imshow(‘threshold1’,thresh)Ifpredict==True:#img=cv2.resize(thresh,(100,100))img=np.array(Ges).reshape(-1,100,100,1)/255prediction=p_model.predict(img)final_prediction=[result.argmax()forresultinprediction[0]]Ges_type=self.gesture[final_prediction]#print(ges_type)cv2.putText(rec,ges_type,(self.x1,self.y1),fontFace=cv2.FONT_HERSHEY_COMPLEX,fontScale=1,thickness=2,color=(0,0,255))cv2.imshow(‘Original’,rec)1.4本章小结本章主要介绍了关于手势检测的常用算法

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论