基于C语言的形状识别

上传人:无*** 文档编号:171544449 上传时间:2022-11-27 格式:DOC 页数:11 大小:252.50KB
返回 下载 相关 举报
基于C语言的形状识别_第1页
第1页 / 共11页
基于C语言的形状识别_第2页
第2页 / 共11页
基于C语言的形状识别_第3页
第3页 / 共11页
点击查看更多>>
资源描述
1、CDIO设计目的 在学习了数据图形的基础上,进行编写摄像头采集程序,对采集的程序进行预处理,对预处理的图像进行特征提取,如分散度,拒不变量等特征,进行模式识别,区分各种形状。2、CDIO设计正文2.1图像识别图像分析技术分类的三种基本范畴(1) 低级处理:图像获取、预处理,不需要智能(2) 中级处理:图像分割、表示与描述,需要智能(3) 高级处理:图像识别、解释,缺少理论,为降低难度,设计得更专用。 对于一个数字图形的识别可以分为以下四个步骤:(1) 数码图片的获取,(2 ) 图像的彩色边缘检测、图像的分割,(3) 图象的颜色特征和形状特征提取(4) 图像的分类识别。 我们的设计主要是根据图形的边缘特征,以此来与机器记忆中的特征值进行比较,如果比较相近,那么就可以认为是指定的图形形状。边缘是图像的一个基本特征,携带了图像中的大量信息,边缘检测不仅能得到关于边界的有用的结构信息,而且还能极大地减少要处理的数据,很多图像处理和识别算法都以边缘检测为重要基础。边缘按其颜色特征可分为灰度边缘和彩色边缘。(1)灰度图像可由图像亮度函数来描述,灰度边缘可以定义为图像亮度函数的具有边缘特征的不连续点的集合,它描述了灰度函数的局部突变。(2)彩色图像可由图像色彩函数来描述,彩色边缘可以定义为图像色彩函数的具有边缘特征的不连续点的集合,它描述了色彩函数的局部突变。长期以来人们主要致力于灰度边缘的研究并取得了很好的效果。但彩色边缘能比灰度图像提供更多的信息。有研究表明,彩色图像中,大约有90的边缘与灰度图像中的边缘相同,也就是说,有 10的边缘在灰度图像中是检测不到的。因此,彩色边缘的检测受到越来越多的重视。彩色边缘检测的方法:(1)输出融合法 分别对红,绿,蓝三个颜色通道(或其他颜色空间分量)执行边缘检测,最后的输出是这三幅边缘图像的合成 阈值RGB边缘_R边缘_G边缘_B边缘图像图1输出融合法(2)多维梯度法将三个梯度结合成一个,只需检测一次边缘,从而缩短了整个彩色边缘检测的过程。R多维梯度计算GB边缘图像阈值图2多维梯度法以上两种彩色边缘检测算法中常用的梯度算子有:罗伯特交叉(Robert cross)算子,蒲瑞维特(Prewitt)和索贝尔(Sobel)算子。其中,索贝尔算子是效果较好的一种,并且可以直接应用于彩色图像的各个颜色通道。 对于特征提取。我们可以根据形状特征或者颜色进行提取。(1) 形状特征:图像经过边缘提取和图像分割等操作,就会得到边缘和区域,也就是获得了目标的形状。任何物体的形状特征均可由其几何属性(如长度、面积、距离、凹凸等),统计属性(如投影)和拓扑属性(如连通、欧拉数)来进行描述。可以用来表示形状的特征包括几何特征和矩特征。(2) 颜色特征: 由于颜色特征具有旋转不变性和尺度不变性,因而,在图象识别技术,颜色是使用最广泛的特征之一。而颜色特征的提取是利用颜色特征进行图象识别的关键之一。目前,大部分系统都采用颜色比例分布作为颜色基本特征, 这就是图象领域中的直方图法。 颜色特征提取后,如何用数值来有效的表示图像在颜色上的相似程度,这便是相似度量问题相似度量也是直接影响识别效果的重要环节,在模式识别技术中,特征的相似度量均采用距离法 ,即特征的相似程度用特征向量的空间距离来表示。 经过彩色边缘检测,图像分割和特征提取,对分割后的图像进行模式匹配,并制作出用户界面,最终实现图像的分类和识别。2.1.1 图形识别系统的设计 在了解了图形识别的原理的基础之后就是系统的设计,对于图形的识别matlab 是一个比较好的工具,里面集成了关于凸图像处理的函数库,比较方便,但是如果可以把做成的系统使用更加广泛的编程java或者.Net中的C#的话,它的实用性就比较的强了,考虑到系统调用摄像头,以及可以方便的进行已有图形的识别,我们选择使用.Net 开发环境中的C#作为系统开发设计的语言,对于图像处理.Net 类库里面已经有了比较多的方法,同时作为一个比较流行的开发平台,一些开源的进行图像处理的第三方类库,对于我们来说也是比较实用的,最总我们选择了一个比较有名的开源类库AForge.NET。 AForge.NET是一个专门为开发者和研究者基于C#框架设计的,他包括计算机视觉与人工智能,图像处理,神经网络,遗传算法,机器学习,模糊系统,机器人控制等领域。 这个框架由一系列的类库组成。主要包括有:AForge.Imaging 一些日常的图像处理和过滤器AForge.Vision 计算机视觉应用类库AForge.Neuro 神经网络计算库AForge.Genetic -进化算法编程库AForge.MachineLearning 机器学习类库AForge.Robotics 提供一些机器学习的工具类库AForge.Video 一系列的视频处理类库AForge.Fuzzy 模糊推理系统类库AForge.Controls 图像,三维,图表显示控件我们使用其中的AForge.Imaging 进行了图形的识别,因为在此命名空间里面包括了我们进行简单图形识别的类,所以我们的操作相对就比较简单了,直接使用其中的类进行操作即可,在识别出对应的形状之后,我们使用颜色进行标记,以此显示出,所对应的形状。为了比较方便的对于一些纸质的图片进行是识别,我们使用了其中的视频处理类AForge.Video,可以很方便的调用摄像头,进行拍照,并对拍照的图片进行识别。2.1.2系统界面 本系统直接利用窗体设计实现,界面简单友好,方面用户使用,如图3所示。 图3 图像识别系统界面本系统通过编程实现调用笔记本电脑的摄像头,利用摄像头拍摄图片作为系统检测的图像, 之后通过编程检测图像的轮廓确定为何种图形。在拍摄图片的过程中,由于摄像头像素有限,拍摄的图片存在各种干扰,因此尽量在光线较好的环境下进行拍摄。在后续编程过程中,也可以先将图片进行降噪处理,再对图片进行轮廓检测,提高本系统的精确率,系统调用摄像头的界面如图4所示。 图4 系统调用摄像头界面2.1.3 系统识别效果 调用摄像头并进行识别的识别效果,如图5所示图5 图形识别2.1.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( ); colorFilter.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.MinHeight = 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( Color.Yellow, 2 ); / circles Pen redPen = new Pen( Color.Red, 2 ); / quadrilateral Pen brownPen = new Pen( Color.Brown, 2 ); / quadrilateral with known sub-type Pen greenPen = new Pen( Color.Green, 2 ); / known triangle Pen bluePen = new Pen( Color.Blue, 2 ); / triangle for ( int i = 0, n = blobs.Length; i n; i+ ) List 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 ) ); else List corners; / 三角形 或者四边形 if ( shapeChecker.IsConvexPolygon( edgePoints, out corners ) ) / 获取子类型 PolygonSubType subType = shapeChecker.CheckPolygonSubType( corners ); Pen pen; if ( subType = PolygonSubType.Unknown ) pen = ( corners.Count = 4 ) ? redPen : bluePen; else pen = ( corners.Count = 4 ) ? brownPen : greenPen; 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 WebCam private WebCamCapture webcam; private System.Windows.Forms.PictureBox _FrameImage; private int FrameNumber = 30; public void InitializeWebCam(ref System.Windows.Forms.PictureBox ImageControl) webcam = new WebCamCapture(); webcam.FrameNumber = (ulong)(0ul); webcam.TimeToCapture_milliseconds = FrameNumber; webcam.ImageCaptured += new WebCamCapture.WebCamEventHandler(webcam_ImageCaptured); _FrameImage = ImageControl; void webcam_ImageCaptured(object source, WebcamEventArgs e) _FrameImage.Image = e.WebCamImage; public void Start() webcam.TimeToCapture_milliseconds = FrameNumber; webcam.Start(0); public void Stop() webcam.Stop(); public void Continue() / change the capture time frame webcam.TimeToCapture_milliseconds = FrameNumber; / resume the video capture from the stop webcam.Start(this.webcam.FrameNumber); public void ResolutionSetting() webcam.Config(); public void AdvanceSetting() webcam.Config2(); 3、设计总结或结论 通过这次项目设计加深了自己对于图像处理的理解,同时在实践的基础上对于AForge.NET 类库的使用有了比较深的理解,以前只是在文档上了解此类库的作用,在这次实践上,对于此类库的功能是更加的佩服,设计人员将更多的方法,封装在类库里面帮助其他开发者进行更好的对于算法的设计,从声音,视频,图像,神经网络,机器学习无所不有。同时在设计中碰到的问题在小组的一起努力之下终于还是克服了,增强了团队开发的能力,对于自己是很大的提高。4、参考文献1胡学龙等著 数字图像处理 电子工业出版社,2006.9.2朱衡君编著 MATLAB语言及实践教程 清华大学出版社,2005.3陈怀琛. MATLAB机器在理工科课程中的应用. 西安电子科技大学出版社,2007.4董长虹等. MATLAB信号处理与应用 国防工业出版社,2005.5 李在铭. 数字图像处理、压缩与识别技术 电子科技大学出版社,2000.
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 管理文书 > 施工组织


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!