基于C语言的形状识别

上传人:jiups****uk12 文档编号:38439040 上传时间:2018-05-02 格式:DOC 页数:11 大小:277.05KB
返回 下载 相关 举报
基于C语言的形状识别_第1页
第1页 / 共11页
基于C语言的形状识别_第2页
第2页 / 共11页
基于C语言的形状识别_第3页
第3页 / 共11页
基于C语言的形状识别_第4页
第4页 / 共11页
基于C语言的形状识别_第5页
第5页 / 共11页
点击查看更多>>
资源描述

《基于C语言的形状识别》由会员分享,可在线阅读,更多相关《基于C语言的形状识别(11页珍藏版)》请在金锄头文库上搜索。

1、1 1、CDIOCDIO 设计目的设计目的在学习了数据图形的基础上,进行编写摄像头采集程序,对采集的程序进行预处理,对预处理的图像进行特征提取,如分散度,拒不变量等特征,进行模式识别,区分各种形状。2 2、CDIOCDIO 设计正文设计正文 2.12.1 图像识别图像识别 图像分析技术分类的三种基本范畴 (1) 低级处理:图像获取、预处理,不需要智能 (2) 中级处理:图像分割、表示与描述,需要智能 (3) 高级处理:图像识别、解释,缺少理论,为降低难度,设计得 更专用。对于一个数字图形的识别可以分为以下四个步骤: (1) 数码图片的获取, (2 ) 图像的彩色边缘检测、图像的分割, (3)

2、图象的颜色特征和形状特征提取 (4) 图像的分类识别。我们的设计主要是根据图形的边缘特征,以此来与机器记忆中 的特征值进行比较,如果比较相近,那么就可以认为是指定的图形 形状。 边缘是图像的一个基本特征,携带了图像中的大量信息,边缘 检测不仅能得到关于边界的有用的结构信息,而且还能极大地减少 要处理的数据,很多图像处理和识别算法都以边缘检测为重要基础。边缘按其颜色特征可分为灰度边缘和彩色边缘。 (1)灰度图像可由图像亮度函数来描述,灰度边缘可以定义为图像 亮度函数的具有边缘特征的不连续点的集合,它描述了灰度函数的 局部突变。 (2)彩色图像可由图像色彩函数来描述,彩色边缘可以定义为图像 色彩函

3、数的具有边缘特征的不连续点的集合,它描述了色彩函数的 局部突变。 长期以来人们主要致力于灰度边缘的研究并取得了很好的效果。 但彩色边缘能比灰度图像提供更多的信息。有研究表明,彩色图像 中,大约有 90的边缘与灰度图像中的边缘相同,也就是说,有 10的边缘在灰度图像中是检测不到的。因此,彩色边缘的检测受 到越来越多的重视。 彩色边缘检测的方法: (1)输出融合法 分别对红,绿,蓝三个颜色通道(或其他颜色空间分量)执行 边缘检测, 最后的输出是这三幅边缘图像的合成 阈值RGB边缘_R边缘_G边缘_B边缘图像图 1 输出融合法 (2)多维梯度法 将三个梯度结合成一个,只需检测一次边缘,从而缩短了整个

4、 彩色边缘检测的过程。R多维梯度计算GB边缘图像阈值图 2 多维梯度法 以上两种彩色边缘检测算法中常用的梯度算子有: 罗伯特交叉(Robert cross)算子,蒲瑞维特(Prewitt)和索 贝尔(Sobel)算子。其中,索贝尔算子是效果较好的一种,并且可 以直接应用于彩色图像的各个颜色通道。 对于特征提取。我们可以根据形状特征或者颜色进行提取。(1)形状特征: 图像经过边缘提取和图像分割等操作,就会得到边缘和区域, 也就是获得了目标的形状。 任何物体的形状特征均可由其几何属性(如长度、面积、距离、 凹凸等) ,统计属性(如投影)和拓扑属性(如连通、欧拉数)来进 行描述。 可以用来表示形状的

5、特征包括几何特征和矩特征。 (2)颜色特征:由于颜色特征具有旋转不变性和尺度不变性,因而,在图象识 别技术,颜色是使用最广泛的特征之一。而颜色特征的提取是利用 颜色特征进行图象识别的关键之一。目前,大部分系统都采用颜色 比例分布作为颜色基本特征, 这就是图象领域中的直方图法。 颜色特征提取后,如何用数值来有效的表示图像在颜色上的相 似程度,这便是相似度量问题 相似度量也是直接影响识别效果的重要环节,在模式识别技术 中,特征的相似度量均采用距离法 ,即特征的相似程度用特征向量 的空间距离来表示。 经过彩色边缘检测,图像分割和特征提取,对分割后的图像进 行模式匹配,并制作出用户界面,最终实现图像的

6、分类和识别。 2.1.12.1.1 图形识别系统的设计图形识别系统的设计在了解了图形识别的原理的基础之后就是系统的设计,对于图 形的识别 matlab 是一个比较好的工具,里面集成了关于凸图像处 理的函数库,比较方便,但是如果可以把做成的系统使用更加广泛 的编程 java 或者.Net 中的 C#的话,它的实用性就比较的强了,考 虑到系统调用摄像头,以及可以方便的进行已有图形的识别,我们 选择使用.Net 开发环境中的 C#作为系统开发设计的语言,对于图 像处理.Net 类库里面已经有了比较多的方法,同时作为一个比较流 行的开发平台,一些开源的进行图像处理的第三方类库,对于我们 来说也是比较实

7、用的,最总我们选择了一个比较有名的开源类库 AForge.NET。AForge.NET 是一个专门为开发者和研究者基于 C#框架设计的, 他包括计算机视觉与人工智能,图像处理,神经网络,遗传算法, 机器学习,模糊系统,机器人控制等领域。这个框架由一系列的类库组成。主要包括有:AForge.Imaging 一些日常的图像处理和过滤器 AForge.Vision 计算机视觉应用类库 AForge.Neuro 神经网络计算库 AForge.Genetic -进化算法编 程库 AForge.MachineLearning 机器学习类库 AForge.Robotics 提供一些机器学习的工具类库 AFo

8、rge.Video 一系列的视频处理类库 AForge.Fuzzy 模糊推理系统类库 AForge.Controls 图像,三维,图表显示控件 我们使用其中的 AForge.Imaging 进行了图形的识别,因为在此 命名空间里面包括了我们进行简单图形识别的类,所以我们的操作 相对就比较简单了,直接使用其中的类进行操作即可,在识别出对 应的形状之后,我们使用颜色进行标记,以此显示出,所对应的形 状。 为了比较方便的对于一些纸质的图片进行是识别,我们使用了其 中的视频处理类 AForge.Video,可以很方便的调用摄像头,进行拍 照,并对拍照的图片进行识别。 2.1.22.1.2 系统界面系统

9、界面本系统直接利用窗体设计实现,界面简单友好,方面用户使用, 如图 3 所示。图 3 图像识别系统界面本系统通过编程实现调用笔记本电脑的摄像头,利用摄像头拍摄图片作为系统检测的图像, 之后通过编程检测图像的轮廓确定为何种图形。在拍摄图片的过程中,由于摄像头像素有限,拍摄的图片存在各种干扰,因此尽量在光线较好的环境下进行拍摄。在后续编程过程中,也可以先将图片进行降噪处理,再对图片进行轮廓检测,提高本系统的精确率,系统调用摄像头的界面如图 4 所示。图 4 系统调用摄像头界面2.1.32.1.3 系统识别效果系统识别效果调用摄像头并进行识别的识别效果,如图 5 所示图 5 图形识别2.1.42.1

10、.4 系统关键代码系统关键代码 (1) 图像处理关键代码:/ 图形识别private void ProcessImage( Bitmap bitmap )/ 锁住图形BitmapData bitmapData = bitmap.LockBits(new Rectangle( 0, 0, bitmap.Width, bitmap.Height ),ImageLockMode.ReadWrite, bitmap.PixelFormat );/ step 1 - 将背景转换为黑色ColorFiltering colorFilter = new ColorFiltering( );colorFilte

11、r.Red = new IntRange( 0, 64 );colorFilter.Green = new IntRange( 0, 64 );colorFilter.Blue = new IntRange( 0, 64 );colorFilter.FillOutsideRange = false;colorFilter.ApplyInPlace( bitmapData );/ step 2 - 定位图形BlobCounter blobCounter = new BlobCounter( );blobCounter.FilterBlobs = true;blobCounter.MinHeigh

12、t = 5;blobCounter.MinWidth = 5;blobCounter.ProcessImage( bitmapData );Blob blobs = blobCounter.GetObjectsInformation( );bitmap.UnlockBits( bitmapData );/ step 3 - 识别图形并高光显示SimpleShapeChecker shapeChecker = new SimpleShapeChecker( );Graphics g = Graphics.FromImage( bitmap );Pen yellowPen = new Pen( C

13、olor.Yellow, 2 ); / circlesPen redPen = new Pen( Color.Red, 2 ); / quadrilateralPen brownPen = new Pen( Color.Brown, 2 ); / quadrilateral with known sub-typePen greenPen = new Pen( Color.Green, 2 ); / known trianglePen bluePen = new Pen( Color.Blue, 2 ); / trianglefor ( int i = 0, n = blobs.Length;

14、i edgePoints = blobCounter.GetBlobsEdgePoints( blobsi );AForge.Point center;float radius;/ 圆if ( shapeChecker.IsCircle( edgePoints, out center, out radius ) )g.DrawEllipse( yellowPen,(float) ( center.X - radius ), (float) ( center.Y - radius ),(float) ( radius * 2 ), (float) ( radius * 2 ) );elseLis

15、t corners;/ 三角形 或者四边形if ( shapeChecker.IsConvexPolygon( edgePoints, out corners ) )/ 获取子类型PolygonSubType subType = shapeChecker.CheckPolygonSubType( corners );Pen pen;if ( subType = PolygonSubType.Unknown )pen = ( corners.Count = 4 ) ? redPen : bluePen;elsepen = ( corners.Count = 4 ) ? brownPen : gr

16、eenPen;g.DrawPolygon( pen, ToPointsArray( corners ) );yellowPen.Dispose( );redPen.Dispose( );greenPen.Dispose( );bluePen.Dispose( );brownPen.Dispose( );g.Dispose( );/将图形放入剪贴板Clipboard.SetDataObject( bitmap );/ 显示识别后的图形pictureBox.Image = bitmap;UpdatePictureBoxPosition( ); 2 调用摄像头关键代码: 对于摄像头的操作进行了类的封装,方便对于摄像头的操作, 包括开启,停止,继续,以及进行捕捉、保存等操作。class WebCamprivate WebCamCapture webcam;private Syst

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号