毕业论文_计算机应用基础

摘要

本论文主要讲述了图像文件(bmp)文件格式下中简单图形的识别,主要是直线和圆的识别,这在工程图的识别和其他领域中都有很多的应用。

【关键词】:图形识别、图像处理、霍夫变换、单义域、多义域、delphi

目录

第一章概述 (4)

第一节引言 (4)

第二节在工程图的识别中常用的方法 (4)

第二章论文的工作基础和工作环境 (6)

第一节数字图像处理技术 (6)

1. 图像处理的基本内容 (6)

2. 主要的图像处理技术 (6)

第二节图像格式-BMP格式 (7)

第三节算法及数学基础 (8)

1. 霍夫变换(Hough Transform) (8)

2. 基于单义域的直线及圆识别算法 (11)

3. 主要技术 (14)

第三章直线和圆的识别和编辑的实现 (15)

第一节系统的层次结构的图示 (15)

第二节系统数据结构及类的设计 (16)

1. 主要类的层次结构 (16)

2. 图形基类(CShape) (17)

3. 图形类(CLine、CCircle) (18)

4. 图形容器类(CShapes) (20)

5. 点类(CPoint) (21)

6. 单义域类(CSegment) (21)

7. 基于单义域识别类(CSegments) (22)

8. 霍夫变换识别直线类(CHTLine) (23)

9. 霍夫变换识别圆类(CHTCircle) (23)

第三节系统功能介绍 (24)

第四章结束语 (29)

参考文献 (30)

第一章概述

第一节引言

计算机技术的发展,使人类社会进入了信息化和自动化,计算机智能识别也随着计算机的发展得到了迅速的发展。特别是图形图像的计算机处理技术更是有了前所未有的进步和应用。计算机识别也逐渐的从图形图像处理的大环境下分离出来作为一门新的高科技研究领域出现。图形图像的识别涉及到的学科很多,包括数字信号处理、工程数学、信息论、运筹学、等,它与计算机、自动化、生物学、关学、视觉心里和生理学、人工智能、智能信息处理等众多领域交叉、综合集成,有广泛的应用。

本论文实现的是基础的图形识别,bmp图像文件格式中对图形的矢量化。识别基本的图元直线和圆。直线和圆是二值图像中最基本的组成元素,也是最常见的图形元素。在工程图的数字化识别中有很大的应用。

关于理想情况的几点说明:

1.所识别的bmp图像文件是经过处理的,没有“噪音”等,在本论文中

直接采用的是用Windows中的画图软件画出的图像。

2.本论文中图像中的图元都是单一的线性,即线宽是一个象素的情况。第二节在工程图的识别中常用的方法

图形的识别最主要的是图形特征的提取,在这个阶段,常用的方法是全局特征方法(包括:不变距,自回归模型、傅立叶描述符、霍夫变换等),全局特征的特征提取方法是理论比较完善的,计算过程比较清楚。针对不同的特征提取处理,采用相对应的模式匹配方法来将图形分类,模式识别迄今已有很多方法,有模板匹配、统计模式识别、句法模式识别、模糊识别和神经网络识别等。

在二值图像的处理中,人们常用的数据结果有游程编码-考虑了扫描行上相邻象素间的相关性;行相邻图法(Line Adjeceney Gragh),是由Pavlidis提

出的一种二值图的数据结构,LAG还考虑了相邻行黑游程之间的相邻关系,遍历时很方便;BAG(Bloek Adjeceney Gragh)是由余斌提出的,它是相邻图LAG 在两个方向上的推广。在本论文中就是利用了LAG的数据结构思想与c++ builder的数据结构相结合的方法即:用下一个象素点是与链表头相邻还是和尾相邻来描述其相邻的关系。

本论文中对交点的处理。目前对交点的处理有下面几类算法:

1.基于网格算法,该算法是通过网格加大搜索步长来跳过交点。

2.基于图段合并的算法,是根据交点处行程段的连通性,以交点为界将

图线分割成图段,记录各段之间的连接及从属关系,然后连接或延长

各分支图段,然后得到整条图线。

在本论文中采用了第二种方法,基于图段合并的算法。

当然现下有很多更好的算法和数据结构,但是大部分是针对具体的结构或者研究方向不具有一般性,所以本论文的实现用了上述的数据结构和方法。

第二章论文的工作基础和工作环境

第一节数字图像处理技术

将客观世界实体或图片等通过不同的量化(数字化)手段送入计算机,由计算机按使用要求进行图像的平滑、增强、复原、分割、重建、编码、存储、传输等种种不同的处理,需要时把加工处理后的图像重新输出,这个过程称为图像处理。因此,图像处理的含义是用计算机对图像进行加工处理以得到某种预期的效果,它本质上是一种二维数字信号处理技术。

1.图像处理的基本内容

图像处理的基本内容可以归结为:

1.对图像进行增强或修改。

以改变或强调图像信息的某些特点(增强有用信息,无用信息),改善图像的视觉质量;

2.描述图像的特征并进行特征抽取和分析。

例如提取图像的纹理特征、频谱特征、边界特征和颜色特征等;对像素用某个标准衡量并进行分类比较,将抽取的特征归结为一定的模式,这属于模式识别的范围;

3.图像的重建(Reconstruction)。

对图像的某些部分合并或进行重新组织,这种技术是从N—1维的信息用某种算法得到N维的图像,例如计算机视觉就是这样的一种技术。

2.主要的图像处理技术

2.1 图像的增强和恢复

图像增强所追求的目标是改善图像的视觉质量,符合人们的主观要求,它不追究图像客观质量的降低原因。图像的视觉质量是因人而异的,其质量

的高低和好坏受观看者的心理、爱好和文化素质等因素的影响。图像的恢复则致力于探索图像质量降低的原因,并尽可能消除图像质量的降低,恢复图像的本来面目。

2.2 图像的压缩编码

彩色数字图像通常是由三个二维数组组成的,其信息量相当大,这给图像的传输、处理、存储和显示等带来很大的负担。但问题的另一方面是图像中又往往存在很多冗余信息,在传输和存储时可以对数字图像进行一定方式的编码,删除图像中的冗余信息,以提高图像传输和存储的效率。

2.3 图像重建

在医学和工程应用中,利用超声波、x射线等技术取得物体的多幅来自不同角度的投影图,通过计算可得到物钵内部的图像,这种技术称为投影重建,例如CT就是图像重建的一个应用。

2.4 图像的分割和描述

计算机按照一定的客观测度(例如灰度、颜色和几何性质等)将图像中包含的物体和区域从图像中区分出来,称为图像的分割。用适当的数学语言来表示被分割出来的物体或区域的结构和统计特性,或用数学语言表示区域问的关系,称为描述。图像经分别和描述后,可较为容易地分类和识别。

第二节图像格式-BMP格式

BMP(Bitmap-File)图形文件是Windows采用的图形文件格式,在Windows 环境下运行的所有图像处理软件都支持BMP图像文件格式。Windows系统内部各图像绘制操作都是以BMP为基础的。Windows 3.0以前的BMP图文件格式与显示设备有关,因此把这种BMP图像文件格式称为设备相关位图DDB(device-dependent bitmap)文件格式。Windows 3.0以后的BMP图像文件与显示设备无关,因此把这种BMP图像文件格式称为设备无关位图DIB(device-independent bitmap)格式,目的是为了让Windows能够在任何类型的显示设备上显示所存储的图像。BMP位图文件默认的文件扩展名是BMP或者bmp(有时它也会以.DIB或.RLE作扩展名)。

文件结构

位图文件可看成由4个部分组成:位图文件头(bitmap-file header)、位图信息头(bitmap-information header)、彩色表(color table)和定义位图的字节阵列,它具有如下所示的形式。

第三节算法及数学基础

1.霍夫变换(Hough Transform)

霍夫变换是图像处理中从图像中识别几何形状的基本方法之一。其基本思想就是把图像平面上的点对应到参数平面上的曲线,最后通过统计特性来解决问题。自1962年Hough公布了该算法以来,由于其良好的抗噪声性能和对部分遮盖的不敏感等特性,霍夫变换在模式识别领域得到广泛的应用,如直线、圆、椭圆、矩形等几何图形检测,任意形状区域的边界提取,二维或三维运动的参数估计等。

下面就于本论文相关的直线和圆的识别进行简单的介绍。

1.1 霍夫变换识别直线

霍夫变换识别直线,是将图像空间中的一点变换为参数空间中的一条直线。图像空间中同一直线上的点,经霍夫变换所形成的直线相交于参数空间中的一点,该点坐标代表图像空间中直线的斜率及截距。利用累加数组累计参数空间中通过该点的直线条数,即代表图像空间中直线上的点数。

图1.1 霍夫变换识别直线(1)

设已知一黑白图像上画了一条直线,要求出这条直线所在的位置。我们知道,直线的方程可以用y k x b =?+来表示,其中k 和b 是参数,分别是斜率和截距。过某一点00(,)x y 的所有直线的参数都会满足方程00y k x b =?+。即图像空间中的一点00(,)x y 确定了参数空间中的一族直线。方程00y k x b =?+在参数k--b 平面上是一条直线。这样,图像x--y 平面上的一个前景像素点就对应到参数平面上的一条直线。

霍夫变换识别直线的算法描述如下:

Step1. 初始化一块缓冲区,对应于参数平面,将其所有数据置为0。

Step2. 对于图像上每一前景点,求出参数平面对应的直线,把这直线上的所有点的值都加1。

Step3. 找到参数平面上峰值点的位置,这些位置的坐标就是原图像上直线的参数,每个位置对应于原图像上的一条直线。

上面是霍夫变换识别直线的基本思想。在实际应用中,y k x b =?+形式的直线方程没有办法表示x=c 形式的直线(这时候,直线的斜率为无穷大)。所以实际应用中,是采用参数方程:

cos sin x y ρθθ=+

这样,图像平面(x, y )空间上的一个点就对应到参数ρθ空间中的一条正弦曲线上。在变换后的空间中这条正弦曲线上的任意一点对应于原始图像平面(x, y )空

x y这个点,而(x, y)空间中所有共线的点经间的一条直线,这条直线必通过(,)

i i

过变换后所对应的各正弦曲线都相交于一点。

图1.2 霍夫变换识别直线(2)

1.2 霍夫变换识别圆

1)半径已知的圆的识别

利用霍夫变换检测出半径已知的圆形,是将图像平面上的每一点对应到参数平面上的一个以已知半径为半径的圆。经过霍夫变换,在参数平面上得到圆相交于一点,这个点的坐标即为原图形坐标平面上待识别的圆心坐标。

算法可以简单描述为:取和图像平面一样的参数平面,以图像上每一个前景点为圆心,以已知的半径在参数平面上画圆,并把结果进行累加。最后找出参数平面上的峰值点,这个位置就对应了图像上的圆心。

2)未知半径的圆的识别

在第一个问题基础上,把参数平面扩大称为三维空间,即x--y--R三维,对应圆的圆心和半径。图像平面上的每一点就对应于参数空间中每个半径下的一个圆,在参数的三维空间中得到一个圆锥。最后找出参数空间中的峰值点,即得到待识别的圆的圆心和半径。

由于霍夫变换具有良好的抗噪声性能和对部分遮盖的不敏感等特性,又不受图像旋转的影响,在很多领域都有广泛的应用,有关霍夫变换的研究和改进也很多。例如广义霍夫变换、随机霍夫变换、快速霍夫变换等等,就是针对直线的霍夫变换也有很多改进算法。由于时间的原因,在本软件中,只是使用了标准的霍夫变换算法。

2.基于单义域的直线及圆识别算法

霍夫变换为几何图形的识别的一个重要算法,但是由于该标准算法的时间

O N,其中m是参数坐标的维数,虽然有不少针复杂度和空间复杂度都是()m

对具体问题(例如直线识别)的改进算法,其在实际使用中也存在计算量大的问题。针对本论文的工作的实际情况,参考文献【1】,并进行了适当的简化,完成了论文的识别部分。下面就对这个基于单义域的识别算法进行简单的介绍。

2.1 多义域的获得

单义域是指对待识别的图形进行分割得到的具有单一的几何意义(线段或圆弧)点的集合。对图片进行从上往下、从左往右的扫描,根据交点进行分割得到多义域,多义域中的点构成一个连通区域。对多义域进行识别并分割得到单义域。

多义域由链表实现。

算法描述如下:

1.对图形进行从上往下、从左往右的扫描;

2.对每一个前景点,判断其是否为交点;

3.将该点与现有的多义域的头(如果其头节点不是交点)、尾(如果其尾节点不是交点)节点进行比较,如果与头节点相邻,将其插入到该

多义域的头节点之前;如果与尾节点相邻,将其插入到该多义域的尾

节点之后。

4.如果该前景点不属于任何现有多义域,则以该点为头节点生成新的多义域。

5.直到图形扫描完毕。

注:交点的判断。

由此得到的多义域将是一个线段、一个圆弧或者线段和圆弧的组合。在后续的识别过程中将把不是单义域的进行分裂。

2.2 最小二乘法拟合直线和圆

最小二乘法首先由Karl Gauss 为进行行星轨道预测的研究而提出的。现在最小二乘法已经变成从实验数据来进行参数估计的主要手段。由最小二乘法获得的估计在一定条件下有最佳的统计特性:一致、无偏、有效。它提供给我们一个数学程式,通过它能获得一个在最小方差意义上与实验数据最好拟合助模型。

运用最小二乘法进行圆的拟合公式如下:

其中,(,)i i x y 为样点,00(,)x y 为所求圆心,为半径,为平均径向误

差,

为最大径向误差。

2.3 多义域分裂和单义域的识别

对2.1中得到的多义域,运用最小二乘法进行拟合,对于拟合不成功的多义域运用首尾相连最大距离法进行分裂,得到单义域,并记录下各单义域的拟合结果,供全局考虑,识别直线和圆用。

算法描述如下:

1.从2.1得到的多义域列表里取第一个多义域;

2.对选中的多义域运用最小二乘法进行圆的拟合;如果得到的平均径向误差和最大径向误差小于指定阈值,则认为拟合成功,该多义域为一圆

弧的单义域;记录拟合的结果,作为总体识别的种子圆,转向5执行,否则执行3。

3.对选中的多义域运用最小二乘法进行直线拟合;如果得到的平均距离误差和最大距离误差小于指定阈值,则认为拟合成功,该多义域为一线

段的单义域;记录拟合结果,作为总体识别的种子直线,转向5执行,否则执行4。

4.该多义域为多个线段或圆弧的组合。将该多义域的头尾节点连接,计算该多义域中各点与头尾节点连线的距离,取距离最大的点,对该多义

域进行分裂,得到两个新的多义域,取代原先的多义域;转向2执行。

5.取多义域列表中的下一个,转向2执行。

由此,所有的多义域都分裂为单义域,并对各单义域进行了拟合。

2.4 总体整合,识别直线和圆

对2.3得到的单义域列表进行总体的整合,得到直线和圆。

1.选取单义域列表中的第一个单义域,将其拟合的图形(直线或圆)作为种子图形;

2.将列表中其他单义域的识别结果与种子图形进行比较,如果误差小于指定阈值,则属于同一直线或同一圆,将其与选定单一域进行合并,

从列表中删除该单义域;

3.计算选定单义域的几何数据,得到图形;

4.选取列表中的下一个单义域,转动2执行。

3.主要技术

3.1 Borland C++ Builder

本论文的编程环境之所以选用c++ builder 是因为他有以下的优点:

⑴.输出入接口设计简单

⑵.提供一流的开发环境

⑶.提供最标准的C/C++鲁开发工具

⑷.提供丰富的组件与最强劲的调试工具VCL类库中封装了Windows的图形设备接口(GDI),使得用户很方便地在应用程序添加图像或处理图像。

图像类主要有Tbitmap、TBrush、TCanves、TFont、TgraphakControl、Tgraphic、Ticon、TJPEGImage、TPen和Tpictur以Tmatifile类。

3.2 虚类及虚方法的使用

虚类和虚方法的使用在本论文中主要是Cshapes基类及虚方法的实现。

第三章直线和圆的识别和编辑的实现第一节系统的层次结构的图示

第二节系统数据结构及类的设计1.主要类的层次结构

1.1 图形处理类:

1.2 识别用类:

2.图形基类(CShape)

2.1 描述

图形基类,提供所有图形的标准属性和方法。其他图形类(直线、圆)等都是该类的子类,继承其所有的public属性和方法,对其中的虚方法(virtual)进行重定义和实现。

该类为虚类,其成员函数主要为虚函数,为其所有子类提供统一的接口,但是没有实现。其他模块对图形进行操作时,除非生成新的实例(Instance),都无须知道所操作的是哪个具体的图形,而统一使用Cshape类型,为程序的实现、扩充和维护提供很大方便。

2.2 实现

3. 图形类(CLine 、CCircle )

3.1 描述

图形类是几何图形的具体实现,实现对应几何图形的描述和相关操作。图形类有共同的父类CShape ,对父类中定义的虚方法根据本几何图形的特征进行实现。

根据要求,本系统中实现了直线(CLine )和圆(CCircle )两个图形类。其他简单的几何图形如椭圆、矩形等也可以类似的方法实现,作为本系统的一个扩充。

本系统中,直线类采用直观的0Ax By C ++=的形式来描述直线(既避免点斜式不能描述竖直直线,也避免极坐标方程转换的问题)。因为成比例的两组111(,,)A B C 和222(,,)A B C 表示同一条直线,所以规定,如果B 参数不为0,则1B =,否则A 必定不为0,则1A =。由于要识别图像中的线段,所以增加两个端点进行限制。

直线类有三个点可以编辑:1)两个端点,选中一个端点并移动,是以另一端点为轴进行旋转;2)线段的中点,选中中点并移动,是平移整个直线。

圆类采用222()()c c x x y y R -+-=的形式描述(其中(,)c c x y 为圆心,R 为半径),直观方便。圆上有两个点支持编辑操作:1)圆心,选中圆心并移动,是平移整个圆;2)圆上的一个点,选中该点并移动,是改变圆的半径,圆心不变。

3.2 实现

直线类(CLine )

圆类(CCircle)

4.图形容器类(CShapes)

4.1 描述

图形容器类是图形类的集合类,由C++ Builder的TList继承得到。用来组织对图像的识别结果、组织当前编辑工作的图形对象集。提供添加图形、删除图形、图形编辑等接口。

4.2 实现

相关文档
最新文档