几何图形的识别和编辑设计论文文档格式.docx

上传人:b****4 文档编号:16713567 上传时间:2022-11-25 格式:DOCX 页数:26 大小:253.46KB
下载 相关 举报
几何图形的识别和编辑设计论文文档格式.docx_第1页
第1页 / 共26页
几何图形的识别和编辑设计论文文档格式.docx_第2页
第2页 / 共26页
几何图形的识别和编辑设计论文文档格式.docx_第3页
第3页 / 共26页
几何图形的识别和编辑设计论文文档格式.docx_第4页
第4页 / 共26页
几何图形的识别和编辑设计论文文档格式.docx_第5页
第5页 / 共26页
点击查看更多>>
下载资源
资源描述

几何图形的识别和编辑设计论文文档格式.docx

《几何图形的识别和编辑设计论文文档格式.docx》由会员分享,可在线阅读,更多相关《几何图形的识别和编辑设计论文文档格式.docx(26页珍藏版)》请在冰豆网上搜索。

几何图形的识别和编辑设计论文文档格式.docx

针对不同的特征提取处理,采用相对应的模式匹配方法来将图形分类,模式识别迄今已有很多方法,有模板匹配、统计模式识别、句法模式识别、模糊识别和神经网络识别等。

在二值图像的处理中,人们常用的数据结果有游程编码-考虑了扫描行上相邻象素间的相关性;

行相邻图法(LineAdjeceneyGragh),是由Pavlidis提出的一种二值图的数据结构,LAG还考虑了相邻行黑游程之间的相邻关系,遍历时很方便;

BAG(BloekAdjeceneyGragh)是由余斌提出的,它是相邻图LAG在两个方向上的推广。

在本论文中就是利用了LAG的数据结构思想与c++builder的数据结构相结合的方法即:

用下一个象素点是与链表头相邻还是和尾相邻来描述其相邻的关系。

本论文中对交点的处理。

目前对交点的处理有下面几类算法:

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

2.基于图段合并的算法,是根据交点处行程段的连通性,以交点为界将图线分割成图段,记录各段之间的连接及从属关系,然后连接或延长各分支图段,然后得到整条图线。

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

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

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

第1节数字图像处理技术

将客观世界实体或图片等通过不同的量化(数字化)手段送入计算机,由计算机按使用要求进行图像的平滑、增强、复原、分割、重建、编码、存储、传输等种种不同的处理,需要时把加工处理后的图像重新输出,这个过程称为图像处理。

因此,图像处理的含义是用计算机对图像进行加工处理以得到某种预期的效果,它本质上是一种二维数字信号处理技术。

1.图像处理的基本内容

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

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

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

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

例如提取图像的纹理特征、频谱特征、边界特征和颜色特征等;

对像素用某个标准衡量并进行分类比较,将抽取的特征归结为一定的模式,这属于模式识别的范围;

3.图像的重建(Reconstruction)。

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

2.主要的图像处理技术

2.1图像的增强和恢复

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

图像的视觉质量是因人而异的,其质量的高低和好坏受观看者的心理、爱好和文化素质等因素的影响。

图像的恢复则致力于探索图像质量降低的原因,并尽可能消除图像质量的降低,恢复图像的本来面目。

2.2图像的压缩编码

彩色数字图像通常是由三个二维数组组成的,其信息量相当大,这给图像的传输、处理、存储和显示等带来很大的负担。

但问题的另一方面是图像中又往往存在很多冗余信息,在传输和存储时可以对数字图像进行一定方式的编码,删除图像中的冗余信息,以提高图像传输和存储的效率。

2.3图像重建

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

2.4图像的分割和描述

计算机按照一定的客观测度(例如灰度、颜色和几何性质等)将图像中包含的物体和区域从图像中区分出来,称为图像的分割。

用适当的数学语言来表示被分割出来的物体或区域的结构和统计特性,或用数学语言表示区域问的关系,称为描述。

图像经分别和描述后,可较为容易地分类和识别。

第2节图像格式-BMP格式

BMP(Bitmap-File)图形文件是Windows采用的图形文件格式,在Windows环境下运行的所有图像处理软件都支持BMP图像文件格式。

Windows系统内部各图像绘制操作都是以BMP为基础的。

Windows3.0以前的BMP图文件格式与显示设备有关,因此把这种BMP图像文件格式称为设备相关位图DDB(device-dependentbitmap)文件格式。

Windows3.0以后的BMP图像文件与显示设备无关,因此把这种BMP图像文件格式称为设备无关位图DIB(device-independentbitmap)格式,目的是为了让Windows能够在任何类型的显示设备上显示所存储的图像。

BMP位图文件默认的文件扩展名是BMP或者bmp(有时它也会以.DIB或.RLE作扩展名)。

●文件结构

位图文件可看成由4个部分组成:

位图文件头(bitmap-fileheader)、位图信息头(bitmap-informationheader)、彩色表(colortable)和定义位图的字节阵列,它具有如下所示的形式。

位图文件的组成

结构名称

符号

位图文件头

(bitmap-fileheader)

BITMAPFILEHEADER

bmfh

位图信息头

(bitmap-informationheader)

BITMAPINFOHEADER

bmih

彩色表(colortable)

RGBQUAD

aColors[]

图象数据阵列字节

BYTE

aBitmapBits[]

第3节算法及数学基础

1.霍夫变换(HoughTransform)

霍夫变换是图像处理中从图像中识别几何形状的基本方法之一。

其基本思想就是把图像平面上的点对应到参数平面上的曲线,最后通过统计特性来解决问题。

自1962年Hough公布了该算法以来,由于其良好的抗噪声性能和对部分遮盖的不敏感等特性,霍夫变换在模式识别领域得到广泛的应用,如直线、圆、椭圆、矩形等几何图形检测,任意形状区域的边界提取,二维或三维运动的参数估计等。

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

1.1霍夫变换识别直线

霍夫变换识别直线,是将图像空间中的一点变换为参数空间中的一条直线。

图像空间中同一直线上的点,经霍夫变换所形成的直线相交于参数空间中的一点,该点坐标代表图像空间中直线的斜率及截距。

利用累加数组累计参数空间中通过该点的直线条数,即代表图像空间中直线上的点数。

图2.4.1霍夫变换识别直线

(1)

设已知一黑白图像上画了一条直线,要求出这条直线所在的位置。

我们知道,直线的方程可以用

来表示,其中k和b是参数,分别是斜率和截距。

过某一点

的所有直线的参数都会满足方程

即图像空间中的一点

确定了参数空间中的一族直线。

方程

在参数k--b平面上是一条直线。

这样,图像x--y平面上的一个前景像素点就对应到参数平面上的一条直线。

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

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

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

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

上面是霍夫变换识别直线的基本思想。

在实际应用中,

形式的直线方程没有办法表示x=c形式的直线(这时候,直线的斜率为无穷大)。

所以实际应用中,是采用参数方程:

这样,图像平面(x,y)空间上的一个点就对应到参数

空间中的一条正弦曲线上。

在变换后的空间中这条正弦曲线上的任意一点对应于原始图像平面(x,y)空间的一条直线,这条直线必通过

这个点,而(x,y)空间中所有共线的点经过变换后所对应的各正弦曲线都相交于一点。

图2.4.2霍夫变换识别直线

(2)

1.2霍夫变换识别圆

1)半径已知的圆的识别

利用霍夫变换检测出半径已知的圆形,是将图像平面上的每一点对应到参数平面上的一个以已知半径为半径的圆。

经过霍夫变换,在参数平面上得到圆相交于一点,这个点的坐标即为原图形坐标平面上待识别的圆心坐标。

算法可以简单描述为:

取和图像平面一样的参数平面,以图像上每一个前景点为圆心,以已知的半径在参数平面上画圆,并把结果进行累加。

最后找出参数平面上的峰值点,这个位置就对应了图像上的圆心。

2)未知半径的圆的识别

在第一个问题基础上,把参数平面扩大称为三维空间,即x--y--R三维,对应圆的圆心和半径。

图像平面上的每一点就对应于参数空间中每个半径下的一个圆,在参数的三维空间中得到一个圆锥。

最后找出参数空间中的峰值点,即得到待识别的圆的圆心和半径。

由于霍夫变换具有良好的抗噪声性能和对部分遮盖的不敏感等特性,又不受图像旋转的影响,在很多领域都有广泛的应用,有关霍夫变换的研究和改进也很多。

例如广义霍夫变换、随机霍夫变换、快速霍夫变换等等,就是针对直线的霍夫变换也有很多改进算法。

由于时间的原因,在本软件中,只是使用了标准的霍夫变换算法。

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

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

,其中m是参数坐标的维数,虽然有不少针对具体问题(例如直线识别)的改进算法,其在实际使用中也存在计算量大的问题。

针对本论文的工作的实际情况,参考文献【1】,并进行了适当的简化,完成了论文的识别部分。

下面就对这个基于单义域的识别算法进行简单的介绍。

2.1多义域的获得

单义域是指对待识别的图形进行分割得到的具有单一的几何意义(线段或圆弧)点的集合。

对图片进行从上往下、从左往右的扫描,根据交点进行分割得到多义域,多义域中的点构成一个连通区域。

对多义域进行识别并分割得到单义域。

多义域由链表实现。

算法描述如下:

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

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

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

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

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

5.直到图形扫描完毕。

注:

交点的判断。

由此得到的多义域将是一个线段、一个圆弧或者线段和圆弧的组合。

在后续的识别过程中将把不是单义域的进行分裂。

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

最小二乘法首先由KarlGauss为进行行星轨道预测的研究而提出的。

现在最小二乘法已经变成从实验数据来进行参数估计的主要手段。

由最小二乘法获得的估计在一定条件下有最佳的统计特性:

一致、无偏、有效。

它提供给我们一个数学程式,通过它能获得一个在最小方差意义上与实验数据最好拟合助模型。

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

其中,

为样点,

为所求圆心,

为半径,

为平均径向误差,

为最大径向误差。

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

(待填充)

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.1BorlandC++Builder

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

⑴.输出入接口设计简单

⑵.提供一流的开发环境

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

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

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

3.2虚类及虚方法的使用

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

第3章直线和圆的识别和编辑的实现

第1节系统的层次结构的图示

第2节系统数据结构及类的设计

1.主要类的层次结构

1.1图形处理类:

1.2识别用类:

2.图形基类(CShape)

2.1描述

图形基类,提供所有图形的标准属性和方法。

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

该类为虚类,其成员函数主要为虚函数,为其所有子类提供统一的接口,但是没有实现。

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

2.2实现

classCShape{

public:

/*属性定义*/

//前景色(由于时间等的限制,本系统暂时只定义该图形的属性,其

//他如:

填充色,线条型,填充型等可扩充)

TColorcolor;

/*编辑用属性*/

//编辑时标志该图形是否被选择

boolisSelected;

//编辑操作所选中的点

TPoint*editP

/*识别用属性*/

//识别的效果描述,值越小说明识别效果越好

//最小二乘法的平均误差;

//霍夫变换:

1-参数空间中该图形的值/最大值

doublechance;

//图形上点的数量

intpointCount;

/*成员函数定义*/

/*显示和描述用方法*/

//显示图形:

在指定的位图上显示图形

virtualvoiddraw(Graphics:

:

TBitmap*argDest);

//描述图形:

作为TtreeView的节点(主窗体使用)

virtualvoiddiscript(intindex,TTreeView*tree);

返回描述图形的字符串

virtualStringdiscript();

/*识别用*/

//比较两个图形,如果是同一个图形,返回True,否则False。

//直线上的两个线段;

圆上面的两个圆弧

virtualboolsimilarWith(CShape*argShape);

//合并两个图形

//经过判断为相同的图形进行合并,返回True;

否则返回False。

virtualboolmergeWith(CShape*argShape);

//判断图形存在的可能性(利用具体图形的几何规则)

virtualboolcheckPossible();

/*编辑用*/

//判断是否点击该图形,若选中则当前编辑的图形改为当前图形

virtualboolisClickOnShape(intx,inty);

//取得鼠标形状:

鼠标移动到选中图形的可操作点上时,显示为编辑形状

virtualTCursorgetCursor(intx,inty);

//更新图形:

将编辑点移动到(x,y)点。

更新成功返回True,否则False。

virtualboolupdate(intx,inty);

};

3.图形类(CLine、CCircle)

3.1描述

图形类是几何图形的具体实现,实现对应几何图形的描述和相关操作。

图形类有共同的父类CShape,对父类中定义的虚方法根据本几何图形的特征进行实现。

根据要求,本系统中实现了直线(CLine)和圆(CCircle)两个图形类。

其他简单的几何图形如椭圆、矩形等也可以类似的方法实现,作为本系统的一个扩充。

本系统中,直线类采用直观的

的形式来描述直线(既避免点斜式不能描述竖直直线,也避免极坐标方程转换的问题)。

因为成比例的两组

表示同一条直线,所以规定,如果B参数不为0,则

,否则A必定不为0,则

由于要识别图像中的线段,所以增加两个端点进行限制。

直线类有三个点可以编辑:

1)两个端点,选中一个端点并移动,是以另一端点为轴进行旋转;

2)线段的中点,选中中点并移动,是平移整个直线。

圆类采用

的形式描述(其中

为圆心,R为半径),直观方便。

圆上有两个点支持编辑操作:

1)圆心,选中圆心并移动,是平移整个圆;

2)圆上的一个点,选中该点并移动,是改变圆的半径,圆心不变。

3.2实现

●直线类(CLine)

classCLine:

publicCShape{

/*初始化*/

CLine(doubleargA,doubleargB,doubleargC);

/*直线的属性*/

//线段的两个端点

TPoint*startP,*endP;

//直线方程的参数:

A,B,C

doubleA,B,C;

/*对父类虚方法的实现*/

//在目标位图上画出直线(本系统中的实现为画线段)

voiddraw(Graphics:

//在TTreeView中描述

voiddiscript(intindex,TTreeView*tree);

//返回描述用字符串

Stringdiscript();

//判断该直线是否与指定图形相同

//将指定图形强制转化为CLine类型,比较其参数A,B,C,

//若小于指定阈值,则返回Ture,否则返回False。

boolsimilarWith(CShape*argShape);

//合并同一直线上的两个线段

//若目标图形与该图形属同一直线,进行合并,返回True;

//否则返回False。

voidmergeWith(CShape*argShape);

//判断是否选择该直线进行编辑。

//判断指定点(x,y)到该直线的距离,

//如果小于指定阈值则返回True,否则False。

boolisClickOnShape(intx,inty);

//取得鼠标形状。

//端点时返回45度,135度的双向箭头形状表示旋转;

//中点时返回垂直的四个方向箭头的形状表示移动

TCursorgetCursor(intx,inty);

//更新直线

boolupdate(intx,inty);

●圆类(CCircle)

classCCircle:

CCircle(intargX,intargY,intargR);

/*圆的属性*/

//圆心

TPoint*centerP;

//半径

intR;

//在目标位图上画出圆

//

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工作范文 > 演讲主持

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1