手部姿态的视觉识别程序设计_第1页
手部姿态的视觉识别程序设计_第2页
手部姿态的视觉识别程序设计_第3页
手部姿态的视觉识别程序设计_第4页
手部姿态的视觉识别程序设计_第5页
已阅读5页,还剩31页未读 继续免费阅读

下载本文档

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

文档简介

-PAGEI-题目:手部姿态的视觉识别程序设计摘要手势从古至今一直都是人们的一种最基本的交流方式,某些时间甚至比语言交流更加的可靠方便。随着科技的进步和发展,计算机逐渐的走进了每个人的生活中,所以手势识别也作为一项人机交互技术被人们所研究,其涉及的领域包括医学、交通和摄影等。人机交互最重要的就是用户体验,只有用户体验良好的技术才能真正的被广大用户所认可。近几年,人机交互技术的发展飞快,参与人机交互相关技术研究的人数众多,这其中就有许多令人震撼的研究成果,比如键盘和鼠标、手机的触摸屏等。手势识别技术是近年所研究出来的一种新型的人机交互方式,这种技术通俗一点的来陈述就是计算机利用一系列的数学算法计算并识别出读入的人们手部的姿态,然后做出一定响应的过程,属于机器学习的范畴。边缘检测、手部区域检测与手部特征识别技术都是手势识别中经常应用的技术。手势识别的一般过程可以简单描述为三个阶段:预处理,特征提取,模板匹配。预处理通俗来说就是将读取的手势图片中的噪声信号过滤;特征提取就是确定一个手势的特征,然后将这个特征从手势图片中提取出来备用;模板匹配就是将提取出来的特征通过欧氏距离的判定来确定图片对应的手势。本文设计的是手部姿态识别的程序,该MATLAB代码经过调试后可以对一些简单的手势进行识别。关键词:预处理;边缘检测;特征提取;模板匹配AbstractGestureshavealwaysbeenthemostbasicwayofcommunicationforpeoplefromancienttimestillnow,andtheyareevenmorereliableandconvenientthanlanguagecommunicationatcertaintimes.Withtheprogressanddevelopmentofscienceandtechnology,computershavegraduallyenteredeveryone'slife,sogesturerecognitionisalsostudiedbypeopleasahuman-computerinteractiontechnology,anditsfieldsincludemedicine,transportationandphotography.Themostimportantthingforhuman-computerinteractionisuserexperience.Onlytechnologieswithgooduserexperiencecanbetrulyrecognizedbythevastnumberofusers.Inrecentyears,thedevelopmentofhuman-computerinteractiontechnologyisfast,andtherearealargenumberofpeopleinvolvedintheresearchofhuman-computerinteractionrelatedtechnologies,amongwhichtherearemanyshockingresearchresults,suchaskeyboardandmouse,touchscreenofmobilephone,etc.Gesturerecognitiontechnologyisanewtypeofman-machineinteractiondevelopedinrecentyears.Thistechnologyisapopularstatementthatthecomputerusesaseriesofmathematicalalgorithmstocalculateandrecognizethelearnedgesturesofpeople'shands,andthenmakesacertainresponse.Itbelongstothecategoryofmachinelearning.Edgedetection,handregiondetectionandhandfeaturerecognitionareallcommonlyusedtechniquesingesturerecognition.Thegeneralprocessofgesturerecognitioncanbesimplydescribedasthreestages:preprocessing,featureextractionandtemplatematching.Preprocessinggenerallymeansfilteringnoisesignalsinthereadgesturepictures;Featureextractionistodeterminethefeatureofagestureandthenextractthefeaturefromthegesturepictureforlateruse.TemplatematchingistodeterminethegesturecorrespondingtothepicturebyjudgingtheEuclideandistanceoftheextractedfeatures.Thispaperdesignsaprogramforhandgesturerecognition.TheMATLABcodecanrecognizesomesimplegesturesafterdebugging.Keywords:Pretreatment;Edgedetection;Featureextraction;Templatematching目录TOC\o"1-3"\h\u4921摘要 II6329Abstract 331301目录 414184第1章绪论 6293981.1课题背景与意义 6244401.2国内外发展现状 657621.2.1国内发展现状 7116531.2.2国外发展现状 7233711.3本文的研究主要内容 817402第2章手势识别简述 852752.1手势识别定义 883462.2手势识别的意义 8269152.3手势识别的流程 922380第3章手势图像 919610第4章预处理 1196994.1图像滤波 11175974.1.1中值滤波法 11103674.1.2高斯滤波法 12150984.1.3均值滤波法 1236394.2图像二值化 13267864.2.1二值化图像 13164914.2.2P参数法 1365644.2.3模式法 1327440第5章MATLAB简介 1487265.1MATLAB简述 14289805.2MATLAB的功能 1613095.2.1数值计算与符号计算功能 17285565.2.2绘图功能 17327495.2.3Simulink仿真 17228275.3MATLAB的语言特点 175091.效率高 17119872.使用方便 1891203.开放性好 18163134.语句简单 18303715.高效方便的运算方式 18586.绘图功能 18104005.4MATLAB的优势 18121205.4.1优秀的编程环境 19279435.4.2简单的程序语言 1922485.4.3高效的数据处理能力 1956105.4.4出色的图形处理能力 19288985.4.5广泛应用模块集合工具箱 20126885.4.6实用的程序接口 20124715.5MATLAB的函数 208263第6章基于MATLAB的手势识别实现方法 2220776.1边缘检测 22123596.1.1边缘检测函数 23125996.1.2MATLAB中边缘检测的实现 23145406.2特征提取 25242686.2.1特征提取函数 25252856.2.2MATLAB中特征提取的实现 25123846.3匹配识别 2718600结论 294982致谢 3029517参考文献 3124950附录 3217059附录A手势识别源代码 32第1章绪论课题背景与意义随着科技的不断地进步和发展,人机交互逐渐地进入了更多用户的生活之中,但是简单的触摸屏和鼠标键盘这种最基础的人机交互方式好像已经逐渐地变得麻烦起来了,所以手势识别这种技术开始走进了各个研究人员的视野中。有些时候,一个简单的手势就可以表达出一个人很多句话想要表达的意思,所以手势是一个人们最原始但是却最方便最有效的一种交流方式,如果能将手势应用到人机交互这一领域,这无疑是一项伟大的成就,所以现在越来越多的电子产品应用了手势识别的相关内容,如近几年比较火的刷脸支付和指纹识别等[1][2]。人们的日常生活当中,人机交互几乎无处不在,但是键盘、鼠标、触摸屏等传统人机交互方式在某些场合是低效率甚至是不可用的。随着人们的科技水平和要求的不断提高,人机交互的需求和质量也日渐提高,首当其冲的就是人脸识别、语音识别、手势识别等,这些人机交互的方法的出现,不但可以让人机交互更加的便捷通用,而且能让人更加自然的控制机器。手势识别的发展不仅让人们可以更加高效便捷的生活,同时又可以让人们在工作时免去一些不必要的危险[3]。国内外发展现状国内发展现状作为世界最大的发展中国家,近几年中国的手势识别技术也是发展的相当迅速,在国内许多优秀的研究人员和领先于世界的科技巨头都加入了手势识别的研究,取得了许多令人称赞的研究成果[4]。上海大学的研究人员丁友勇等人运用改进的LBP算法,利用AdaBoost分类器进行手势识别,建立了多种手势数据集,其中包括一些大角度变化的手势图像[5]。实验表明该方法可较好地对手势特征进行分割和分类[5]。基于大小手的裸手手势识别[6]由中国科学技术大学和哈尔滨工业大学的藤达,刘岩[6]等人研究,将双手分为大手和小手,两手重叠时按照一只手处理,他们利用背景差分算法将背景去除,利用大小手算法检测出手势,再结合动态时间手势进行识别,该系统实现了17个常用手势的识别,识别率可达94.1%[6]。国外发展现状手势识别作为一个被长期研究的对象,许多国外的研究人员已经有了很多出色的研究成果。手势识别随着技术的不断成熟与发展,也逐渐变得更加的完善和便利,应用到了国内外许多大企业的项目上。韩国Inda大学和Korea Polytechnic大学的Jong Shill Lee、Young Joo Lee等人用熵分析法从背景复杂的视频流中分割出手势区域并进行手势识别。使用链码的方法检测手势区域的轮廓,最后计算出从手势区域的质心到轮廓边界的距离。该系统可识别6种手势,平均识别率超过95%;6个人分别做每个手势的识别率平均达到90%~100%[7]。印度研究者Meenakshi Panwar在视觉手势识别的基础上提出了一种基于结构特征的手势识别算法,通过背景去除、方向检测、拇指检测和手指数量检测,来最终识别手势。于成龙等人采用基于视觉的组合特征进行手势识别,将手的面积、周长、重心、面积比和长宽比等特征结合,使得识别率得以提高[8]。现在有一种比较流行的滤波方法,这种方法是粒子滤波器,它可以实现追踪噪声的状态再进行进一步的滤波。粒子滤波器使用一组加权粒子逼近系统的后向概率分布。粒子滤波器通过连续反复更新粒子的状态和重量,从粒子的平均状态预测目标对象的位置,实现目标跟踪。LarsBretzner等使用粒子滤波器进行收拾的定位跟踪[9]。NikolayStefanov等在粒子滤波器中引入了变长马尔科夫模型解决了表现非连续变化的手势跟踪问题[10]。CaifengShan等结合粒子滤波器和MeanShift算法二者的优点,提出一种MeanShiftEmbeddedParticleFilter的方法,实现对手势的实时跟踪[11]。Gianni等使用三个粒子滤波器同时跟踪人手和头部,通过引入重采样和退火步骤,提高了对遮挡和肢体快速变化的鲁棒性[12]。本文的研究主要内容本文针对人类手势的计算机视觉识别程序展开研究,拟完成matlab下的程序设计任务,相关的研究内容与需要解决的问题如下:1.图像的收集与标准化:主要是指以图片的方式获取手势图像,并通过基本的图像处理,使得每一幅图像都能符合使用标准,例如图像的大小、格式、目标在图像中的大体比例等参数。2.手势图像的目标分割:主要是指如何从获取的图像中分割出来人类手部的图像,去除其他无用的图像部分。3.特征提取在手势识别中的过程:如何从获得的手势图像目标的像素数据中,采用图像分析的方法获得手势图像的特征,例如角点、轮廓、方向等信息,并采用何种方法进行识别。手势识别简述2.1手势识别定义在计算机科学中,手势识别指的就是计算机可以实时的通过摄像头捕捉到手势的图像,然后进行一些预处理,最后识别出手势的样子和这个手势想要表达的意思,最后做出响应。手势识别不一定是必须是人手部的姿态,也可以是人的脸部,就比如现在最火的刷脸支付,其实也算是一种手势识别。2.2手势识别的意义现在手势识别依旧算是一个比较火热的研究课,而且截止到目前已经有了许多优秀的研究成果,而且也有许多优秀的研究人员进行了大量的相关实验。由于目前手势识别应用的环境和识别的种类较多,所以不同的研究者就根据自身需要研究并产生了许多不同的手势识别技术。将手势识别应用在虚拟现实的情况下,可以让人们有一种身临其境的感觉,使人们在虚拟场景中更有可能地去感受现实。手势是一种具有简洁性和直接性的人机交互方式,这种人机交互方式不仅效率高,也会让一般用户的使用感受更加的好。手势识别的出现令某些不方便用语言进行交流的情况下可以让人们有交流的方法。手势识别在某些场合可以代替语言交流,甚至高于语言交流,比如在某个安静的房间里,简单的手势交流不但可以表达清楚手势发出者想要表达意思,同时也可以在不影响其他人的情况下将这个信息传递出去,所以手势识别的出现是必然的,因为这种交流方式在某一情况是必须的,也是十分方便的。2.3手势识别的流程针对手势输入方法的研究,采用计算机视觉的方式输入手势并选择合适的手势识别方法和编程工具,做好手势识别的前期工作。对手势图像进行预处理,然后提取出图像的边缘,在与计算机中已经输入的模板进行匹配,选择出匹配最佳的模板图片,这张模板图片就是识别结果。结合上面的设计流程和思路,使用MATLAB开发工具进行代码编写和构建手势识别系统,最终达成手势识别的目的。手势图像为了能让计算机识别各种手势图像的类型,就要将图像转换为计算机可以运算的符号,通常有两种类型:一维波形,比如核磁共振、心脑电波图等。二维图像,比如照片、文字、指纹等。3.1灰度图灰度代表一个像素的亮度值,在黑白照片中,它可以通过渐变而不是像肉眼看到的那样简单的非黑色来区别于灰度。灰度分段越精细,它就能够准确地表示单个图像的信息。其中灰度值的范围是从零到二百五十五,零代表全黑,而二百五十五代表全白。在手势识别的过程中,首先都会将由计算机捕捉到的手势图像转换成灰度图,因为在计算机视觉中的中灰度图像可以更好的描述一幅图像,因为计算机的语言中只有数字,而灰度图就相当于把一张彩色的图片给量化了,然后让计算机可以有效且清晰地识别出这张图片。3.2简单的图像操作在手势识别之前可能要对获得的图片进行一些简单的操作,使计算机进行手势识别时更加的准确.3.2.1平移平移是将原图像向上下左右平移一段距离,它在MATLAB中的实现方式是移动后的结果图像=imtranslate(原始图像,移动方向),移动方向=[h,v],其中h>0右移、h<0左移动、v>下移、v<0上移。3.2.2旋转旋转图像就是将图像旋转一个角度,它在MATLAB中的实现方式为结果图像=imrotate(原始图像,旋转方向A),其中A>0为逆时针旋转。3.2.3图像的缩放缩放就是将图像按照一定比例放大或缩小,它在MATLAB中的实现方式为结果图像=imresize(原始图像,缩放倍数A),其中A>1为放大。3.2.4剪切图像的剪切就是将图像的某一部分提取出来,手势识别中有的手势图像的大小可能难以被计算机所使用,所以我们要对手势图像进行剪切,然后将剪切出来的大小合适的图像用于后续的手势识别。3.2.5亮度调整图像亮度调整操作在MATLAB中的函数为voidCimage:AdjustLight(intnLight),其中需要调整的亮度大小为输入的参数。nLight的值是正数表示增大手势图像的亮度,反之则是降低手势图像的亮度。手势识别时我们采用的图像均为256灰度图像,因此任何一点的RGB三个数值大小相等,也就是说任一点的像素值的饱和度为0,一般在这种情况下,我们可以用代码nR+nLight来调整R通道的亮度值,G和B通道同理。预处理预处理获得的手部姿态图像是手势识别的第一步也是不可或缺的一步。手势图像在生成和变换过程中更容易受到外界噪声的影响,由于噪声会在一定程度上改变图像质量,因此必须对图像进行滤波、锐化和去噪等预处理。预处理的最重要的目的是去除图像中的噪声,增强图像中的有用信息,通过在一定程度上恢复输入过程中产生的损失,预处理在滤波的过程中整体进行,这种滤波的主要目的是滤除图像中的噪声,保存图像的有用信息。在绝大多数的情况下获得的手势图像都会扩大取景的范围,这种范围的扩大会使计算机进行许多无用的计算,而且会对之后的手势识别有一定程度的干扰,所以预处理也可以让计算机更加的准确读入包含手势的部分,这个过程的主要难度还是如何判断哪部分需要保留,如果判断错误将会对后期的识别有非常大的影响[3]。4.1图像滤波图像在获取、传输和保存过程中会受到噪声的影响,对图像质量和后续的处理将会造成很大影响,所以我们在进行手势识别之前要进行滤波,手势识别中经典的滤波方法有中值滤波法、高斯滤波法和均值滤波法等。4.1.1中值滤波法中值滤波是一种非线性平滑方法,将每个像素点的灰度值设置为该点的特定相邻窗口中所有像素的灰度值的中值[13][14]。在光学测量条纹图像的相位分析和处理方法中发挥特别的作用,但对条纹中心分析法几乎没有影响。中值滤波器是由外国研究人员上个世纪七十年代所提出的非线性滤波器的思想,并迅速成为了非线性滤波器的典型代表,滤除实值离散信号就经常由非线性滤波器来完成。从一维空间的角度来看中值滤波器,它的实质是一个包含奇数个像素的滑动窗口,窗口中间的像素值被窗口中每个像素值的中值替换。它以二维方式传播,使用某种形式的二维窗口,它主要是一个3*3和5*5的模板。中值滤波的优点是,它能够克服线性滤波带来的模糊,同时有效地揭示脉冲噪声,以此来保护良好的边缘特征。但是中值滤波窗口内各点对输出的作用是相同的,如果希望强调中间点是邻近点的作用,则可以采用加权中值滤波法[15]。4.1.2高斯滤波法高斯滤波器表面上是对图像的噪声行处理,但是实质上它的作用在信号,它会对信号进行平滑处理,这种对信号的平滑处理也算是一种对噪声的过滤。由于这种误差是累积传输的,许多图像处理材料从早期就引入高斯滤波,以获得高信噪比的图像信噪比。高斯-拉普拉斯变换与此相关,为了实际获得良好的图像边缘,首先对图像应用高斯平滑滤波器,去除噪声,确定二次微分向量,确定二次微分的零交叉点处的边缘,在计算期间它成为频域乘积的空间面积卷积。4.1.3均值滤波法平均值滤波是一种常见的线性滤波算法,也就是说,模板提供给图像上的目标像素。这个模板包含相邻像素(当目标像素的中心形成过滤器模板时,将删除目标像素周围的8个像素,即目标像素本身),然后将这个模板中所有像素的平均值用来替换原始像素值。均值滤波方法是从图像数据中生成模板,例如3x3矩阵或5x5,然后处理该矩阵模板。模板将模板提供给图像上的目标像素,模板中包含其周围的相邻像素(围绕目标像素,8个像素形成滤镜模板,即删除目标像素本身),并且模板中所有像素的平均值明确地说,这9个数字的平均值取代了中间的数字。FPGA中则将目标像素周围的八个点相加,然后除以八以替换目标像素点,这种操作更加的简便快捷。以上介绍的集中手势识别的经典滤波方法在MATLAB中都有相对应的函数供我们直接使用。4.2图像二值化图像离散化是通过将图像上像素点的灰度值设置为0或255来以黑白方式表示整个图像的过程。在数字图像处理中,二值图像占据着非常重要的位置,图像的二值化大大减少了图像中的数据量,所以更有可能将目标的轮廓突出。图像二值化的常见方法是p参数法、模式法等。4.2.1二值化图像在进行手势识别之前,要将原图像转化为二值化图像,因为二值化图像可以很清楚的表明哪里是手部的轮廓,哪里是背景,这样计算机就可以对这张手势图像有一个大致的位置估计,可以使接下来的手势识别更加的顺利。其次,为了执行二值图像的处理和分析,首先对灰度图像进行二值化以获得二值化图像[15]。所有灰度大于或等于阈值的像素被判定为属于要识别的特殊物体,这些大于或等于阈值的灰度值由全白代替,否则,将这些像素点将从对象区域中排除,这些小于阈值的灰度值由全黑代替。4.2.2P参数法P参数法大部分情况下都会被应用在灰度图像中,它的大致的使用流程是先获得图像的直方灰度图和它在目标中所占的百分比,然后逐渐积累,直到达到那个百分比,记录达到这个百分比时的灰度值,然后使用这个灰度值来分割图像。但是在现实情况中,已知对象所占的面积比率十分罕见,通常都是按照一定的比例推算出来的,这种方法在文字部分所在比率可以估算出来的场合来使用才会更加的有效。4.2.3模式法如果灰色直方图具有双峰值,则对象的灰色级别和背景将分别显示在两个峰值附近。因此,将山谷的中心值作为阈值来识别称为模式方式。但是,在显示情况下,灰色直方图不像理想的那样平滑,因为几个小隆起会生成几个局部极值,自动的判定将会变得不方便。因此,更简单的方法是使用这两个点来平滑灰色直方图、选取临界值、检查所选灰色周围的1k的两个点,并且推测灰色值是否为极端值。MATLAB简介5.1MATLAB简述MATLAB是由美国mathworks公司发布的主要面对可视化、科学计算以及交互式程序设计的高科技的计算环境。它将科学数据可视化、矩阵计算、数值分析以及非线性动态系统的建模和仿真等众多强大的功能集合在一个易于使用的视窗环境当中,为工程设计、科学研究以及必须进行有效数值计算的众多科学领域提供了一种全面的解决方案,并在很大程度上摆脱了传统上的非交互式程序设计语言(如C、Fortran)的编辑模式,代表了当今国际科学计算软件的先进水平[12]。MATLAB的应用范围非常广泛,包括通讯、信号与图像处理、测试和测量、控制系统设计、财务建模和分析以及计算生物学等众多应用的领域。附加的工具箱(单独提供的专用MATLAB函数集)扩展了MATLAB应用环境,主要用来解决这些应用领域内特定类型的问题[16]。它有如下的特点:(1)功能较强的数值运算。MATLAB中含有丰富的,涉及范围广的函数。这些函数涉及到的领域有数学、工学和医学等,每个函数都有明确的标注,这让各个领域的人在使用的时候可以更加简单的发现那些函数,从而高效的进行对这一领域的研究,这让这些研究者们极大地节省了操作电脑的时间,可以将更多地心思放在对该领域课题的思考上面。(2)先进的资料视觉化。MATLAB在用户使用时可以应用MATLAB中的图形架构,这可以让用户可以制作出一些相比其他环境更高品质的图形,来让这些用户在它们的领域研究更加的顺利。(3)简单却又高阶的程式环境。MATLAB作为一种直译型的程式语言,MATLAB可以让它的用户快速地完成对某一个程序的编写,这就明显区别于其他的编译环境,而且在MATLAB中这些编程还不需要编译就可以运行。(4)开放及可延伸的架构。MATLAB允许使用者使用大多数的数学原始码、更改现存函数、检视运算法,甚至加入自己的函数使MATLAB成为使用者所须要的环境。MATLAB的本意是由英文矩阵实验室的翻译而翻译过来,因为MATLAB中使用的大部分的编程都是以矩阵为主要的载体的。MATLAB主要的应用还是给编程人员们进行编程,因为它具有许多非常强大的功能和良好的编程环境,比如MATLAB可以对不同领域的不同数据进行数据分析和对一些数学运算进行高效的运算。MATLAB由于它的简洁高效等优点,MATLAB被广泛应用到了各个科研领域,这些领域涉及到了工学、医学、土木工程、数学建模和各种测量领域等。矩阵计算是MATLAB的灵魂,其创始人的设计哲学是“一切都是矩阵”,所以矩阵遍布MATLAB。如果再加上附加的工具箱,可以说能解决绝大部分工程与科学研究问题。也正是基于这一点,MATLAB的软件十分的庞大,可能有些方面就没有那么人性化[17]。MATLAB还有另外一种翻译,这种翻译被称为矩阵工厂,这个翻译可以说是因为MATLAB的大部分运算都是以矩阵为主要的载体。MATLAB的编程环境相对于其他编程环境来说一点也不落后,甚至有些方面显得比其他编程环境更加的高级,MATLAB可以运行各个国家的权威研究所公布的大部分科学的计算和对这些科学的编程运行。MATLAB又因为它不但可以进行对某一数值的分析,还可以将这个分析的结果可视化,并且除此之外MATLAB还将它们与非线性系统的模拟和分析功能与数值分析等功能共同合并到了同一个窗口之中,这就让用户在使用MATLAB进行一些科学的运算时可以有更方便的操作过程,这就让MATLAB大大地摆脱了传统的运行环境模式,让用户的人机交互更加的自然。除此之外,MATLAB中有大量的函数模型,这些模型大部分都是不断进行更新的最新的科研研究成果,并且代表了目前各个领域的研究人员所研究出来的最高水准。MATLAB是目前被人们大量使用的三大数学软件之一,这三个软件是被人们公认的最好的数学科学应用的软件。MATLAB可以进行矩阵的运算、各种函数以及一些函数图像的呈现和与其他的编程语言进行联动,MATLAB在日常生活中主要应用于工程学、控制领域、信号与统计和图像处理等多个领域[18]。MATLAB的基本数据单元是矩阵,MATLAB的指令公式非常类似于数学和工程中常用的格式,所以用MATLAB解决一些数学编程类问题比用c和FORTRAN等语言解决同样的数学问题容易得多,并且可以节省许多运算的空间。此外,MATLAB还吸收了Maple等许多编程软件的优点,使MATLAB成为了一个强大的数学编程软件。MATLAB是由MATLABWorks开发的,并已更新为MATLABR2018a版本。MathWorks成立于1984年,总部位于美国马萨诸塞州迪克市,在全球15个国家拥有超过两千名员工,是为工程师和科学家提供数学计算软件的顶级供应商,其主要产品有MATLAB、Simulink和PolySpace产品系列。MATLAB的最初起源可以追溯到1980年前后,当时任美国新墨西哥大学计算机科学系主任的教授在教授线性代数课时想使用计算机来解决,但当时流行的软件包Linpack和Eispack同其他高级语言编程十分不方便,便自己开始写相关程序,这就是MATLAB的雏形。早期的MATLAB使用的是FORTRAN语言编写的,这种语言虽然简单,但是由于它是免费的,所以吸引了大批的使用者。后来经过几年的发展,在JohnLittle的推动下,由JohnLittle、CleveMoler和SteveBanger合作成立了MathWorks公司,从这时起MATLAB核心代码用C语言编写,功能也越来越强大。随着技术的不断地提升和发展,MATLAB的各项功能也越来越完善和强大。MATLAB的4.0突破性版本是在1992年引进的,微电脑版本是在1993年引进的。它可以在Windows3.X上运行,并且除此之外可以在许多的环境中运行,这一点令MATLAB的应用越来越广泛。MATLAB在1997年,推出了支持更多数据结构的MATLAB5.0,以获得更方便、更完善的编程语言(虽然那时许多程序员都不认为MATLAB是编程语言)。2000年,Simulink有了显着的改进。在那之后MATLAB的发展就非常的迅速了,这里就不一一去说明了。现在,MATLAB已经不在仅仅是一个矩阵实验室了,它已成为线性代数、自动控制理论、数值分析领域的新型高级语言。5.2MATLAB的功能MATLAB自推向市场以来,风风雨雨20多年,现已经独树一帜了。MATLAB的主要特性包括可靠的数字计算和符号计算功能、强大的绘图功能、简单易懂的语言系统以及许多应用程序工具箱。但是,由于这些特性的原因,MATLAB软件变得非常庞大,因此要求计算机需要拥有较高的性能,这些是对MATLAB的开发和推广不利的。5.2.1数值计算与符号计算功能MATLAB将矩阵作为数据操作的基本单元,使矩阵相关操作非常简洁、方便和高效。“所有数据都可以转换为行列”,这就是MATLAB的哲学。5.2.2绘图功能MATLAB拥有给高级人员使用的高层绘图和给一般用户使用的底层绘图,这两种绘图级别就让MATLAB对于拥有特别需求的用户可以得到不同层次的绘图方式。这种绘图层次的分类就让有着不同操作要求的不同用户可以更加方便的应用绘图功能。底层绘图操作相对于高层绘图更加的简单方便,适合一些学生和对绘图要求不是很高的用户使用。用户有高层绘图需求的话,就可以保证用户不用考虑太多的因素与绘图细节,只要一些基本操作就行。5.2.3Simulink仿真Simulink是MATLAB中的一个应用广泛的部分,Simulink为某些领域的仿真做出了巨大的贡献,比如电厂的过程控制和电场中一些常见的故障的处理方式等。Simulink并不需要用户具有多么强大的编程能力,用户完全可以通过那些代表性十分强烈的控件的相互联系去实现仿真某一复杂的控制系统。Simulink在操作时非常的灵活,而且它的适用领域非常的广阔。Simulink在仿真时对一些细节和流程显示的十分清晰,并且它能对这些控制环节进行实际封闭且高效的运行。Simulink因为以上介绍的这些诸多好处,早已被广泛地应用到了一些复杂的各个信号处理和过程控制的设计中。除此之外,一些其它的编程软件在实现某一过程中都可能会被要求应用Simulink或者是提出在Simulink运行某一环节的申请。5.3MATLAB的语言特点效率高MATLAB是一种科学的高级语言,它允许用数学语言格式编写程序,因此MATLAB的编程过程更接近人类的思维方式,在MATLAB中计算就像你使用草稿纸进行一些计算,由于编程的思维方式更广泛,同时也提高了用户的使用效率。使用方便MATLAB是一种给用户使用体验极佳的软件,它不但可以解释程序还能够在它的运行环境中去运行这些程序,而且运行的过程十分灵活和方便。MATLAB和其他的编程语言相比,把编程、编译、链接和执行融合成了一体,这使MATLAB可以在同一个界面更加的灵活,快速的发现并指出语法错误等,这就让用户的编程、修改和调试的速度大幅度增加,这在某种程度上也为用户提供了方便的编译环境。开放性好MATLAB可以和C语言的编程环境互通,因为C语言作为MATLAB之前的一个环境,受到了MATLAB的借鉴,所以C语言的移植性就被MATLAB所继承,这就使C语言的运行环境可以运行MATLAB程序。MATLAB中的所有重要文件都是打开、可读和可写的源文件,所以用户可以修改原始源文件,使其成为自己的新文件。语句简单MATLAB可以将许多输入和许多输出分别对应起来,这种对应就让MATLAB中出现了许多中不同的排列组合,这些排列组合再对应相同的函数名,就让同一个函数可以在不同的环境发挥不通的作用,这就让MATLAB的函数应用范围变得十分广阔。这种数组组合用于表示函数的方式不仅丰富了MATLAB的功能,而且节省了大量的存储空间,使MATLAB文件更加简单高效。高效方便的运算方式MATLAB中有许多比如矩阵加减乘除、矩阵之间的关系运算和矩阵之间的逻辑运算等运算符,在MATLAB中某些运算可以直接复制大多数上述运算符,以便在数组之间进行操作,但是有些运算符不能直接复制,只要我们将'.'添加到某些运算符后就可直接用于数组运算。此外,这些运算符不需要定义数组维,但只需提供特殊的库函数,这些算法使MATLAB解法更加简单。绘图功能MATLAB中的绘图功能相比于其他的编程软件是十分方便且优秀的,它的绘图软件中包含大量坐标的绘制,和数量庞大的绘图函数。在绘图时只需要调用MATLAB中已有的绘图函数就可以完成对图像的绘制,并且可以在已经绘制好的图像里标注一些点或线的信息。这种直观并且方便的绘图功能是其他编程语言不具有的。5.4MATLAB的优势某种语言之所以传播如此之快,并表现出如此旺盛的生命力,是因为被称为第四代计算机语言的MATLAB利用丰富的功能资源,将程序员从复杂的程序代码中解放出来,使得FORTRAN和c等高级语言不必直接操作计算机硬件资源。MATLAB自研发就一直以简单的操作环境而出名,MATLAB的运行环境十分符合人们在草纸上计算的过程,整个编程都像是自己在心里计算一样,而不是像其他编程软件有那么多额外的规则限制。5.4.1优秀的编程环境MATLAB由一系列工具组成,用户可以直接使用简单的程序语言功能和文件。MATLAB的连续升级和更新使MATLAB用户界面变得越来越完美,这种界面更接近人们在日常生活中使用最多的PC界面,使MATLAB与用户之间的人与计算机的交互更加流畅,更加方便操作。MATLAB的新版本还提供了完整的帮助系统,用户可以更方便地使用它。虽然MATLAB编程环境很简单,但是提供了较完整的调试系统,这就令程序可以不经过编译就可以直接运行,同时还能及时的将错误报告给用户,并能分析出原因且给用户修改建议。5.4.2简单的程序语言用户可以在命令窗口中同步命令和输入语句的执行,也可以在完成大型程序的编译之后再将整个大型程序一起执行。由于新版本的MATLAB基于c++编程语言,因MATLAB的语法非常类似于c++,并且是符合用户公式描述格式的语法。这使得MATLAB对于非计算机研究者更加方便。此外,MATLAB还具有良好的便携性,这也是MATLAB能够融入并应用到各种领域中的一个重要原因。5.4.3高效的数据处理能力由于MATLAB拥有的功能涉及到了许多不同的领域,因此绝大多数领域的用户都可以轻松地使用MATLAB。MATLAB的功能非常严谨,这些功能大部分也是目前科研的最新研究结果,这些功能被许多代优秀的研究人员优化和改进。一般来说,MATLAB可以在计算量要求相同时直接调用函数,从而大大减少编程工作量,因此可以在某些情况下代替c语言,甚至效果要优于c语言。MATLAB的功能不仅包括最基本的矩阵和特征向量等,而且MATLAB还包括非常复杂的功能。这些函数可以解决的问题包括矩阵运算、方程解、微分方程解、三角函数、傅里叶变换和动态建模。5.4.4出色的图形处理能力MATLAB的图像处理功能相对于其他的编程语言来说一直都是十分的出类拔萃。这种图像处理功能可以用图形向量和矩阵来表示,同时这种图像处理功能还可以用于标记和列印图形。此外,还可以使用MATLAB来进行工程映射和科学计算。新版本的MATLAB在整个图形处理方面都更加的完善并且使整体图形处理功能更加的完整高效,而MATLAB还为其他软件不可用的功能提供了特殊的处理功能。同时,MATLAB具有特殊的可视化要求,MATLAB还具有一些函数,这些函数还包含了响应处理功能,能够保证不同用户的不同需求。5.4.5广泛应用模块集合工具箱MATLAB中有许多由各个领域的权威人士研究的工具箱,这些工具箱经过该领域的大牛检查和完善,已经日渐完善,而且它们功能强大,可以满足各个领域用户的需求。普通用户可以直接使用工具箱完整地编程、学习和评估自己的代码。MATLAB工具箱目前涉及多个领域,包括模糊逻辑、数学统计、小波分析、信号处理、模型预测、地图工具、各种模拟、与DSP的通信、非线性控制和嵌入式系统开发。5.4.6实用的程序接口MATLAB在大部分情况下都可以运行那些在C语言环境中编写的C语言程序段,因为MATLAB在它的最新版本被允许使用C语言编程环境的各种功能,所以MATLAB和C语言编程环境有一定的相似性,这就使它们可以相互通用。因此,普通的用户就可以在实际的编程应用中建立一些可以在MATLAB环境中进行编写的C语言程序。MATLAB在Web的服务程序允许在Web上使用一些MATLAB所具备的某些数学和图形的相关程序段。MATLAB与其他的编译环境的最明显的区别就是,MATLAB有可以被扩展的扩展系统和被称为工具箱的一些特殊的子程序库。每一个工具箱都有一个它所针对的一个领域,这些工具箱可以说是对某一领域进行量身定做的,这些领域和之前所介绍的MATLAB的应用领域大体上一致。5.5MATLAB的函数MATLAB中的函数十分的丰富,也涉及到了各个领域,这也是MATLAB运算功能强大的原因之一,比如数学中的各种函数、逻辑运算的各种函数和用来模拟随机发生时间的随机函数。但是即使MATLAB拥有各种各样的函数,但决定不能包含所有的函数,所以MATLAB还提供了自定义函数功能。常见的数学函数MATLAB中提供了许多内建函数,比如三角函数和多项式函数等。使用函数时需要注意的是等式的右边放函数名,等式的左边放计算该函数的表达式。除此之外,这些函数都可以嵌套,就是当做另一个函数的自变量使用。以下是编程中可能经常使用的部分函数,取余函数:rem(a,b),求a%b的值。幂指函数:exp(A),求e的幂指数。取整函数:round函数:对输入的值按照所定的规则取整,这种规则是四舍五入;ceil函数:向上取整,取大于等于这个数的第一个整数;floor函数:向下取整,取小于等于这个数的第一个数。常用的数据分析函数MATLAB中也提供了许多用于数据分析的函数,常见的数据分析函数如下:方差(var)函数:var(x,y,z)的三个参数的说明如下:x表示要求方差的矩阵或者向量;y的取值为0或1,0表示以(N-1)归一化,1表示以N归一化,即最后计算时的分母的值;第三个参数表示按行还是按列进行求方差,若值为1则表示按列求方差,若为0表示按行求方差。

fsolve数值解方程(组)函数:fsolve的参数意义大部分与fzero相同,只是优化参数更多了,使用更灵活另外一定注意x0的长度必须与变量的个数相等。它可以直接方便的求解多变量方程组,线性和非线性,超静定和静不定方程,还可求解复数方程fun同样可以是句柄、inline函数或M文件。基于MATLAB的手势识别实现方法MATLAB中大部分的图像识别都是从图像中提取如轮廓矩、区域矩、直方图等表现特征,但是人的手部姿态是一个复杂的变形体,不能仅靠这些简单的参数来确定手部的姿态。人的手部姿态随着关节的转动、手指间角度的变化都会呈现出不同的手势,所以手势识别的参数构造一定要具有一定的相对不变且要在各种情况下都能进行有效的识别[19]。边缘检测将输入图像中灰度值变化剧烈的点找到就是边缘检测的目的,这种灰度值变化特别大的点表现出来的经常就是图像的轮廓。如果我们能够将输入的图像的边缘准确的找到,那么就说明着我们可以将这个物体在图像中发现它的在目标图像中差不多的位置,这就意味着我们能够对现实中的那个物体的位置进行定位并且可以对它的一些参数进行测量,检测大致的流程如图6-1所示,图6-1边缘检测流程图6.1.1边缘检测函数边缘检测是运用sobel算子进行边缘提取的,其函数说明见表6-1所示:表6-1边缘检测函数说明函数原型voidSobel_Image(int*Graydata,longwidth,longheight,int*edgedata)入口参数Graydata,二值化图片(灰度值取值0/255)Width,图片宽度(以像素点个数为单位)Height,图片高度(以像素点个数为单位)出口参数Edgedata,边缘检测后图片(灰度值取值0/1)6.1.2MATLAB中边缘检测的实现该程序的边缘检测阈值经过多次试验后设定为90,边缘检测在MATLAB仿真中主要代码如下,voidSobel_Image(int*Graydata,longwidth,longheight,int*edgedata){ intSobel_X[9]={-1,0,1,-2,0,2,-1,0,1}; intSobel_Y[9]={1,2,1,0,0,0,-1,-2,-1}; inti,j; intThreshold=90; inttemp1=0,temp2=0,temp3=0; for(i=1;i<height-1;i++){ for(j=1;j<width-1;j++){ temp1=Sobel_X[0]*(*(Graydata+(i-1)*width+j-1))+Sobel_X[1]*(*(Graydata+(i-1)*width+j))+Sobel_X[2]*(*(Graydata+(i-1)*width+j+1))+Sobel_X[3]*(*(Graydata+(i)*width+j-1))+Sobel_X[4]*(*(Graydata+(i)*width+j))+Sobel_X[5]*(*(Graydata+(i)*width+j+1))+Sobel_X[6]*(*(Graydata+(i+1)*width+j-1))+Sobel_X[7]*(*(Graydata+(i+1)*width+j))+Sobel_X[8]*(*(Graydata+(i+1)*width+j+1)); temp2=Sobel_Y[0]*(*(Graydata+(i-1)*width+j-1))+Sobel_Y[1]*(*(Graydata+(i-1)*width+j))+Sobel_Y[2]*(*(Graydata+(i-1)*width+j+1))+Sobel_Y[3]*(*(Graydata+(i)*width+j-1))+Sobel_Y[4]*(*(Graydata+(i)*width+j))+Sobel_Y[5]*(*(Graydata+(i)*width+j+1))+Sobel_Y[6]*(*(Graydata+(i+1)*width+j-1))+Sobel_Y[7]*(*(Graydata+(i+1)*width+j))+Sobel_Y[8]*(*(Graydata+(i+1)*width+j+1)); temp3=abs(temp1)+abs(temp2);if(temp3>Threshold)*(edgedata+i*width+j)=1;//Blackelse*(edgedata+i*width+j)=0;//White } }}特征提取在手势识别中,如何去判断手部姿态是最为关键的,所以如何准确的确定手部的特征就显得非常重要。如果特征寻找错误,那么整个手部姿态识别也有极大的概率发生错误,手部姿态的分类就不能准确的判断。当我们需要判断一个手部姿态时,要考虑它在不同情况下所代表得不同的意思,要具体情况具体分析,不能只根据一种情况来判这个手势的意思[20]。特征形成、特征提取、特征选择是特征提取与选择的三个步骤。特征选择就是指一个手势图像可能有许多个可以识别的特征,如手指的角度、手掌的面积和手指的个数等等,但是如果对这些特征全部进行一个比较和处理会占用大量的计算空间,虽然得到的结果更加的精确,但是在一般的手势识别中不需要那种非常高的精度,所以我们要根据我们手势识别的环境和目标来进行一次特征的选择,选择出在这个特定的环境最具有代表性的特征,然后对该特征进行一个有效的提取,最后完成识别。有效的特征选择可以大大地提高手势识别的效率,也可以让计算机有更多的计算空间来计算更多内容。6.2.1特征提取函数提取特征值是对图片的Hu不变一阶、二阶、三阶矩进行提取,其函数说明见表6-2所示:表6-2提取特征值函数函数原型voidOriginMoment(int*edgedata,longwidth,longheight,int*output)入口参数Edgedata,边缘检测后的图片Width,图片宽度(以像素点个数为单位)Height,图片高度(以像素点个数为单位)出口参数Output,H1、H2、H3数据存放的数组6.2.2MATLAB中特征提取的实现特征提取是手势识别中最关键的步骤也是最复杂的步骤,手部姿态的特征有很多种,如手指之间的角度、手指的长度和掌心的位置,这些都可以作为一个手部姿态图像的特征,所以我们可以有目的地去提取这些特征,使手势识别更加的准确。手势的特征可以简单分为手部的周长和面积,手部的周长大致的概念就是手势图片中手势边缘上像素点的总和,通过预处理中的边缘检测可以很简单的获得手势图像的边缘,进而求出手势图像的周长;手部的面积大致的概念就是手势图像中手势区域内所包含的像素点个数的总和,手势区域可以通过预处理中的二值化图像获取。本次毕业设计我选择采用胡不便具进行特征提取,胡不变矩的求取主要分为以下几个步骤。(1)先求图片(0+1)阶原点矩、(1+0)阶原点矩、(0+0)阶原点矩。(2)根据原点矩,求出图片的重心坐标。(3)根据重心坐标,求出图片的(1+1)阶、(2+0)阶、(0+2)阶、(2+1)阶、(1+2)阶、(3+0)阶、(0+3)阶几何中心矩。(4)求出。(5)分别求出。在MATLAB中特征提取的主要代码如下:voidOriginMoment(int*edgedata,longwidth,longheight,int*output){intsum_00=0,sum_01=0,sum_10=0;intmiu_00=0,miu_20=0,miu_02=0,miu_21=0,miu_12=0;intmiu_11=0,miu_30=0,miu_03=0; intning_20=0,ning_02=0,ning_11=0; intning_21=0,ning_12=0,ning_30=0,ning_03=0;intx_ba=0,y_ba=0; inti,j; for(i=0;i<height;i++){ for(j=0;j<width;j++){ sum_00=sum_00+*(edgedata+width*i+j); sum_01=sum_01+(*(edgedata+width*i+j))*j; sum_10=sum_10+(*(edgedata+width*i+j))*i; } } x_ba=sum_10/sum_00;//重心坐标xy_ba=sum_01/sum_00;//重心坐标y miu_00=sum_00;//perimeter=miu_00; for(i=0;i<height;i++){ for(j=0;j<width;j++){miu_11=miu_11+(i-x_ba)*(j-y_ba)*(*(edgedata+width*i+j));miu_20=miu_20+(i-x_ba)*(i-x_ba)*(*(edgedata+width*i+j));miu_02=miu_02+(j-y_ba)*(j-y_ba)*(*(edgedata+width*i+j));miu_21=miu_21+(i-x_ba)*(i-x_ba)*(j-y_ba)*(*(edgedata+width*i+j));miu_12=miu_12+(i-x_ba)*(j-y_ba)*(j-y_ba)*(*(edgedata+width*i+j));miu_30=miu_30+(i-x_ba)*(i-x_ba)*(i-x_ba)*(*(edgedata+width*i+j));miu_03=miu_03+(j-y_ba)*(j-y_ba)*(j-y_ba)*(*(edgedata+width*i+j)); } }ning_20=miu_20/(miu_00*miu_00);ning_02=miu_02/(miu_00*miu_00);ning_11=miu_11/(miu_00*miu_00);ning_21=miu_21/(miu_00*miu_00);ning_12=miu_12/(miu_00*miu_00);ning_30=miu_30/(miu_00*miu_00);ning_03=miu_03/(miu_00*miu_00); *(output)=ning_20+ning_02;*(output+1)=(ning_20-ning_02)*(ning_20-ning_02)+4*ning_11*ning_11;*(output+2)=(ning_30-3*ning_12)*(ning_30-3*ning_12)+(3*ning_21-ning_03)*(3*ning_21-ning_03); *(output+4)=sum_00; return;}6.3匹配识别静态手势识别的定义就是在某时刻的输入图像中,能够准确识别出用户的手部做出的是哪一种姿势,其中模板匹配就是最具代表性的方法,因为这种识别方法相对于其他的方法来说实现起来更加的简单方便,匹配速度更快。这种算法核心就是从输入的待识别图像提取出若干特征量和对应的模板来比较,从而判断待识别的归类。我的匹配思路大致就是先在计算机里预先输入几个模板,并获得这些模板的数据,然后再输入一张手势图像,也获得这张图像的数据,然后对这输入的图像和各个模板逐个像素点求欧式距离,然后选取获得欧式距离最小的那模板作为手势识别的结果并输出。欧式距离用来表征空间中两点间的真实距离,对于n维空间上的点M和N,M和N之间的欧式距离可以表示为各目标“点”与样本点之间的欧式距离的大小。最后选择一个与输入图像欧式距离最小的模板输出即可。仿真结果计算机中识别流程计算机中手势识别的流程一般是用摄像头获取原始图像,然后对图像进行预处理,然后进行手势分割边缘检测等操作,最后用已输入的模板和输入的图像进行比较来完成识别,具体流程如图6-2所示,图6-2手势识别流程图仿真结果以下几张图片是我选择的模板的图片,如图6-3所示,图6-3手势识别模板输入一张图片,然后获得输入图像的RGB图、灰度图、二值化图和边缘检测图,如图6-4所示,图6-4运行结果图像这张输入的图片经过运行得出的结果和模板3最为匹配,于是输出结果为手势3。匹配结果如图6-5所示,图6-5匹配结果结论本文的主题是手部姿态识别的程序设计,主要的思路就是输入一张经过预处理的手部姿态图片,然后根据这张图片的手部姿态特征,如手指个数、手指之间的角度来进行和模板的匹配,最终实现识别手势的目的。这次使用MATLAB来进行这次手势识别的仿真的结果表明了这个程序具有一定的抗干扰能力和记忆能力,并且对一些手势有识别能力,这种方法是一种有效的手势识别方法,但是对于某一些图片的识别可能会有一些误差。这一次的毕业设计让我对MATLAB的使用更加的深入,并且对MATLAB有了一个更全面的认识,而且对手势识别技术也有了一定的理解和掌握。现在正是手势识别进行的火热年代,如果能将这种识别技术应用到我们的生活中就可以大大地提高我们生活的质量,使人机交互更加的流畅和自然。我相信经过手势识别领域的研究人员们的不懈努力之下一定会将基于MATLAB的手势识别技术推广到各个领域中。附录附录A手势识别源代码closeall;clearall;clc;function[outputIma]=Sobel_Image(inputIma)Sobel_X=[-1,0,1,-2,0,2,-1,0,1];Sobel_Y=[1,2,1,0,0,0,-1,-2,-1];Threshold=90;[height,width]=size(inputIma);outputIma=zeros(height,width);fori=2:height-1forj=2:width-1temp1=Sobel_X(1)*inputIma(i-1,j-1)+Sobel_X(2)*inputIma(i-1,j)+Sobel_X(3)*inputIma(i-1,j+1)+...Sobel_X(4)*inputIma(i,j-1)+Sobel_X(5)*inputIma(i,j)+Sobel_X(6)*inputIma(i,j+1)+...Sobel_X(7)*inputIma(i+1,j-1)+Sobel_X(8)*inputIma(i+1,j)+Sobel_X(9)*inputIma(i+1,j+1);temp2=Sobel_Y(1)*inputIma(i-1,j-1)+Sobel_Y(2)*inputIma(i-1,j)+Sobel_Y(3)*inputIma(i-1,j+1)+...Sobel_Y(4)*inputIma(i,j-1)+Sobel_Y(5)*inputIma(i,j)+Sobel_Y(6)*inputIma(i,j+1)+...Sobel_Y(7)*inputIma(i+1,j-1)+Sobel_Y(8)*inputIma(i+1,j)+Sobel_Y(9)*inputIma(i+1,j+1);%temp3=sqrt(temp1*temp1+temp2*temp2);temp3=abs(temp1)+abs(temp2);if(temp3>Threshold)outputIma(i,j)=1;%BlackelseoutputIma(i,j)=0;%Whiteendendendendfunction[H1,H2,H3,perimeter]=OriginMoment(image)%以下是特征提取H1=int32(0);H2=int32(0);H3=int32(0);perimeter=int32(0);sum_00=int32(0);sum_01=int32(0);sum_10=int32(0);miu_00=int32(0);miu_20=int32(0);miu_11=int32(0);miu_02=int32(0);miu_21=int32(0);miu_12=int32(0);miu_30=int32(0);miu_03=int32(0);ning_20=int32(0);ning_02=int32(0);ning_21=int32(0);ning_12=int32(0);ning_11=int32(0);ning_30=int32(0);ning_03=int32(0);x_ba=int32(0);y_ba=int32(0);[height,width]=size(image);forx=1:heightfory=1:widthsum_00=sum_00+image(x,y);sum_01=sum_01+(y-1)*image(x,y);sum_10=sum_10+(x-1)*image(x,y);endendx_ba=sum_10/sum_00;%重心坐标xy_ba=sum_01/sum_00;%重心坐标ymiu_00=sum_00;perimeter=miu_00;forx=1:heightfory=1:widthmiu_11=miu_11+(x-x_ba-1)*(y-y_ba-1)*image(x,y);miu_20=miu_20+(x-x_ba-1)*(x-x_ba-1)*image(x,y);miu_02=miu_02+(y-y_ba-1)*(y-y_ba-1)*image(x,y);miu_21=miu_21+(x-x_ba-1)*(x-x_ba-1)*(y-y_ba-1)*image(x,y);miu_12=miu_12+(x-x_ba-1)*(y-y_ba-1)*(y-y_ba-1)*image(x,y);miu_30=miu_30+(x-x_ba-1)*(x-x_ba-1)*(x-x_ba-1)*image(x,y);miu_03=miu_03+(y-y_ba-1)*(y-y_ba-1)*(y-y_ba-1)*image(x,y);endendning_20=miu_20/(miu_00*miu_00);ning_02=miu_02/(miu_00*miu_00);ning_11=miu_11/(miu_00*miu_00);ning_21=miu_21/(miu_00*miu_00);ning_12=miu_12/(miu_00*miu_00);ning_30=miu_30/(miu_00*miu_00);ning_03=miu_03/(miu_00*miu_00);H1=ning_20+ning_02;H2=(ning_20-ning_02)*(ning_20-ning_02)+4*ning_11*ning_11;H3=(ning_30-3*ning_12)*(ning_30-3*ning_12)+(3*ning_21-ning_03)*(3*ning_21-ning_03);endarea=int32(0);%面积perimeter=int32(0);%周长%读进图像[filename,pathname]=uigetfile({'*.bmp';'*.jpg';'*.gif'},'选择图片');RGB_data=imread([pathname,filename]);[ROW,COL,DIM]=size(RGB_data);%提取图片的行列数R_data=sin

温馨提示

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

评论

0/150

提交评论