您好,欢迎来到化拓教育网。
搜索
您的当前位置:首页基于HOUGH变换的圆检测

基于HOUGH变换的圆检测

来源:化拓教育网
基于HOUGH变换的圆检测

摘要:我们知道,圆是一个简单的几何图形,是构成图像的一个基本要素。因此,在数字图像处理技术不断发展的今天,能够快速,准确地对圆进行检测,在图像处理特别是工业图像处理中显得尤位重要。本文所要研究的是基于HOUGH变换的圆检测,即通过HOUGH变换提取出被检测圆的一些特征值,如圆的半径及圆心所在的坐标。

本次设计在圆检测中的HOUGH变换前增加预处理过程。结果表明,使用我们提出的算法仍能基本保留传统HOUGH变换的优点,并且对图像场景中的干扰不敏感,在圆周残缺不全的情况下仍能进行正确检测。

关键字: 图像处理 圆检测 HOUGH变换

abstract :We know that circle is an simple sketch, and is also an essential element that constitutes the picture. Therefore, can carry on the detection to the circle accurately quickly, seem to be an importance in picture detection, especially the industry picture processing. What this text to study is according to an detection by the transformation of HOUGH, some round characteristics value will bi found, like the round radius and the center of a circle. then withdraw be examined through a transformation of HOUGH.

At this time we add a process of preparation before circle detection with transformation of HOUGH. As the result express that the method that we used can still reserve the advantage of the traditional

transformation of HOUGH, and is not sensitive to the interference in the picture , still can carry on the right detection when the circumference is incomplete.

Keywords: picture processing, detection of circle , HOUGH transformation

中国图象图形网 www.image2003.com

目 录

第一章 概述 ..................................................................... 4 1.1研究意义 ....................................................................... 4 1.2研究现状 ....................................................................... 4 1.3文本的组织 ..................................................................... 4 第二章 数字图像处理概述 ......................................................... 5 2.1数字图像处理的概念 ............................................................. 5 2.2数字图像处理技术的应用 ......................................................... 5 2.3数字图像处理的前景及展望 ....................................................... 6 小结 .............................................................................. 6 第三章 系统开发工具介绍 ......................................................... 7 3.1 VISUAL C++ 6.0 介绍 ............................................................. 7 3.2MFC类库介绍 .................................................................... 7 3.3VISUAL C++ 6.0的优点 ............................................................ 9 3.4 VISUAL C++ 6.0不足 ............................................................ 10 小结 ............................................................................. 10 第四章 基于HOUGH变换的圆检测 .................................................. 11 4.1研究意义 ...................................................................... 11 4.2曲线检测方法综述 .............................................................. 11 4.3基于HOUGH变换的圆检测 ........................................................ 11 4.3.1 HOUGH变换的原理 .......................................................... 11 4.3.2基于HOUGH变换的圆检测的算法实现 .......................................... 12 4.3.2.1 预处理 ................................................................. 13 4.3.2.2 HOUGH变换 .............................................................. 14 4.3.2.3 流程图 ................................................................. 15 4.4对结果的分析 .................................................................. 16 4.5 HOUGH变换的应用 ............................................................. 16 小结 ............................................................................. 16 第五章 不足和展望 .............................................................. 18 5.1目前存在的不足 ................................................................ 18 5.2 对未来的展望 ................................................................. 18 致 谢 ............................................................................ 19 参考文献 .......................................................................... 20 附录 ............................................................................. 21 (一)中英文文摘: ................................................................ 21

中国图象图形网 www.image2003.com

(1)Edge Detection ............................................................ 21 (2)HOUGH TRANSFORM FOR CIRCLE ................................................ 22 (1)边缘检测 .................................................................. 23 (2)基于HOUGH变换的圆周检测 .................................................. 24

(二)计算程序及说明 ............................................................. 25

中国图象图形网 www.image2003.com

第一章 概述

1.1研究意义

当人在观察外面的世界时,反映在脑海的并不是杂乱无章的图像的分布,而是可分离的物体的集合.这是因为人的视觉系统会对景物进行自动提取.随着数字图像的产生,我们也希望把图像分解成可辨识的景物,这一过程就称为景物提取。本文所要研究的是基于HOUGH变换的圆检测,即提取出被检测圆的一些特征值,如圆的半径及圆心所在的坐标。我们知道,圆既是一个简单的几何图形,也是构成图像的一个基本要素,在某些应用中,我们只需要将圆简单提取出来就可以了;而在工业领域中,例如汽车零配件尺寸检查和自动装配的完整性检查,电子装配线的元件自动定位,饮料瓶口损坏检查时,对外观质量的要求非常高,图像处理的数据量大,数据处理相关性高,并且具有严格的帧、场时间。

本文所要研究的是一种基于HOUGH变换的圆检测,将HOUGH变换用于圆的检测在许多计算机视觉的专著和文献中都有详细的介绍,本文准备在圆检测中的HOUGH变换前增加预处理过程,并在次基础上提出一种具有较强适应能力的用于圆检测的快速HOUGH变换。

1.2研究现状

HOUGH变换于1962年在美国作为专利被发表至今已有三十多年了。由于具有一些明显优点和可贵性质,它引起了国内外许多学者和工程技术人员的普遍关注。专家们对HOUGH变换的理论性质和应用方法进行了深入广泛的研究,并取得了许多有价值的成果。HOUGH变换长期以来一直是直线检测的一种有效算法,直线上各点经过变换转换至参数空间中某一定点并在该点累积,形成参数空间中的局部最大值,从而检测到直线。但应用在圆或椭圆的检测中,参数空间的维数将扩大到三维和五维,这将耗费大量的存储空间和处理器时间。针对如何降低参数空间的维数、减少计算量,许多人提出了自己的看法,但很多算法对图像中的噪声干扰、计算的量化误差仍考虑不足。

1.3文本的组织

第一章 主要介绍本问的研究动机,研究历史,研究现状及文本内容的组织;

第二章 对数字图像处理做了一定的介绍,其中包括数(1)字图像处理的概念(2)数字图像处理技术的应用(3)数字图像处理的前景及展望。

第三章 分析了VISUAL C++6.0下编写工业图像的圆弧检测程序的优势和缺点,介绍了本文编写所有算法程序的基本框架。

第四章 这章讲的是基于HOUGH变换的圆检测,其中包括(1)研究意义(2)曲线检测方法的综述(3)HOUGH变换原理,应用及实现方法。

第五章 主要介绍了目前研究的不足和对HOUGH变换及机器视觉的张望。 致谢 参考文献

附录(中英文文摘,计算程序及说明)

中国图象图形网 www.image2003.com

第二章 数字图像处理概述

本文所要论述的基于HOUGH变换的圆弧边缘检测是数字图像处理技术的一个具体例子。因此,本章首先对数字图像处理做一定的介绍,其中包括数(1)字图像处理的概念(2)数字图像处理技术的应用(3)数字图像处理的前景及展望。

2.1数字图像处理的概念

一幅图像可以定义为一个二维函数f(x,y),这里x和y是空间坐标,而在任何一对空间坐标(x,y)上的幅值f称为该点图像的强度或灰度。当x,y和幅值f为有限的,离散的数值时,称该图像为数字图像。数字图像处理是指借助数字计算机处理数字图像,值得提及的是数字图像是由有限的元素组成的,每一个元素都有一个特定的位置和幅值,这些元素称为图像元素,画面元素或象素。

2.2数字图像处理技术的应用

数字图像处理技术是计算机图形深入应用和高层应用的一个极其广泛的领域,它已经渗透到人们的日活中,例如工业图像检测,天气预报,医院,银行,超市,道路交通管理,可视电话,网络传输等。下面举几个实例。

一. 工业应用

1) 产品无损检测,焊缝及内部缺陷检测; 2) 流水线零件自动检测识别; 3) 生产过程的监控;

4) 支票,签名辨伪及识别; 5) 机器人视觉系统的应用。

二. 生物医学中的应用

1) 显微图像处理; 2) DNA显示分析;

3) 内脏大小,形状,活动及异常检出分析; 4) 癌细胞识别。

三. 遥感航天中的应用

1) 天文,太空星体的探测及分析; 2) 地质,地形,地图的普查及绘制; 3) 地下矿藏的勘探;

4) 气象,天气预报的合成分析。

四. 其他应用

1) 多媒体计算机系统及应用; 2) 图像的远程通信; 3) 电视会议; 4) 可视电话。

中国图象图形网 www.image2003.com

数字图像处理技术的应用远超出上述的内容,它在国民经济中正发挥着越来越大的作用。

2.3数字图像处理的前景及展望

目前,数字图像处理技术在通信科学、生产与管理、多媒体技术、高清晰度电视、医用图像处理、商品电子化、目标跟踪等领域得到了广泛的应用。随着信息高速公路,数字地球概念的提出以及Inernet的广泛应用,数字图像处理技术的需要与日俱增。其中,图像信息以其信息量大,传输速度快,作用距离远等一系列优点使其成为人类获取信息的重要来源及利用信息的重要手段,因此,图像处理科学与技术逐步向其它科学领域渗透并为其他科学所利用是必然的。图像处理科学有是一门与国计民生紧密相连的应用科学,它已给人类带来了巨大的经济和社会效益,不久的将来它不仅在理论上有更深入的发展,在应用亦是科学研究,社会生产内至人类生活中不可缺少的强有力工具。它的发展及应用与我国的现代化建设联系之密切,影响之深远是不可估量的。在信息社会中,图像处理科学无论是在理论上还是在实践上都存在着巨大的潜力。

小结

本章提供的材料主要是,对数字图像处理的概念,重要意义,该技术当前及未来的应用领域提供一个概括性的介绍。由于篇幅有限,本章中涉及课题的覆盖面必然不很全面,但是在数字图像处理的概念和应用范围方面应该非读者留下了一个总体印象。后面几章将进行图像处理技术中的工业图

中国图象图形网 www.image2003.com

第三章 系统开发工具介绍

本文研究的工业图像的圆弧检测是基于VISUAL C++6.0完成的,VISUAL C++6.0提供了圆弧检测的所有算法程序和基本框架,以及实际制作的用户界面,因此利用本章对VISUAL C++6.0这个程序开发平台作简单的介绍,并提出利用VISUAL C++6.0编写程序的优点与不足。

3.1 Visual C++ 6.0 介绍

Visual C++是Microsoft公司推出的一个基于Windows系统平台、可视化的集成开发环境,它的源程序按C++语言的要求编写,并加入了微软提供的功能强大的MFC(Microsoft Foundation Class)类库,充分体现了Microsoft公司的技术精华。Visual C++提供了一个由许多组件组成的完整的开发环境,这些组件协同工作,大大简化了对话框到复杂的多文档和组合界面程序

Visual C++在提供可视化的编程方法的同时,也适用于编写直接对系统进行底层操作的程序,其生成代码的质量,也是优于其他的很多开发工具。

3.2MFC类库介绍

MFC是一个编程框架 ,MFC (Microsoft Foundation Class Library)中的各种类结合起来构成了一个应用程序框架,它的目的就是让程序员在此基础上来建立Windows下的应用程序,这是一种相对SDK来说更为简单的方法。因为总体上,MFC框架定义了应用程序的轮廓,并提供了用户接口的标准实现方法,程序员所要做的就是通过预定义的接口把具体应用程序特有的东西填入这个轮廓。Microsoft Visual C++提供了相应的工具来完成这个工作:AppWizard可以用来生成初步的框架文件(代码和资源等);资源编辑器用于帮助直观地设计用户接口;ClassWizard用来协助添加代码到框架文件;最后,编译,则通过类库实现了应用程序特定的逻辑。 一. 封装

构成MFC框架的是MFC类库。MFC类库是C++类库。这些类或者封装了Win32应用程序编程接口,或者封装了应用程序的概念,或者封装了OLE特性,或者封装了ODBC和DAO数据访问的功能,等等,分述如下。

(1)对Win32应用程序编程接口的封装

用一个C++ Object来包装一个Windows Object。例如:class CWnd是一个C++ window object,它把Windows window(HWND)和Windows window有关的API函数封装在C++ window object的成员函数内,后者的成员变量m_hWnd就是前者的窗口句柄。 (2)对应用程序概念的封装

使用SDK编写Windows应用程序时,总要定义窗口过程,登记Windows Class,创建窗口,等等。MFC把许多类似的处理封装起来,替程序员完成这些工作。另外,MFC提出了以文档-视图为中

中国图象图形网 www.image2003.com

心的编程模式,MFC类库封装了对它的支持。文档是用户操作的数据对象,视图是数据操作的窗口,用户通过它处理、查看数据。 (3)对COM/OLE特性的封装

OLE建立在COM模型之上,由于支持OLE的应用程序必须实现一系列的接口(Interface),因而相当繁琐。MFC的OLE类封装了OLE API大量的复杂工作,这些类提供了实现OLE的更高级接口。 (4)对ODBC功能的封装

以少量的能提供与ODBC之间更高级接口的C++类,封装了ODBC API的大量的复杂的工作,提供了一种数据库编程模式。 二. 继承

首先,MFC抽象出众多类的共同特性,设计出一些基类作为实现其他类的基础。这些类中,最重要的类是CObject和CCmdTarget。CObject是MFC的根类,绝大多数MFC类是其派生的,包括CCmdTarget。CObject 实现了一些重要的特性,包括动态类信息、动态创建、对象序列化、对程序调试的支持,等等。所有从CObject派生的类都将具备或者可以具备CObject所拥有的特性。CCmdTarget通过封装一些属性和方法,提供了消息处理的架构。MFC中,任何可以处理消息的类都从CCmdTarget派生。

针对每种不同的对象,MFC都设计了一组类对这些对象进行封装,每一组类都有一个基类,从基类派生出众多更具体的类。这些对象包括以下种类:窗口对象,基类是CWnd;应用程序对象,基类是CwinThread;文档对象,基类是Cdocument,等等。程序员将结合自己的实际,从适当的MFC类中派生出自己的类,实现特定的功能,达到自己的编程目的。 三. 虚拟函数和动态约束

MFC以“C++”为基础,自然支持虚拟函数和动态约束。但是作为一个编程框架,有一个问题必须解决:如果仅仅通过虚拟函数来支持动态约束,必然导致虚拟函数表过于臃肿,消耗内存,效率低下。例如,CWnd封装 Windows窗口对象时,每一条Windows消息对应一个成员函数,这些成员函数为派生类所继承。如果这些函数都设计成虚拟函数,由于数量太多,实现起来不现实。于是,MFC建立了消息映射机制,以一种富有效率、便于使用的手段解决消息处理函数的动态约束问题。 这样,通过虚拟函数和消息映射,MFC类提供了丰富的编程接口。程序员继承基类的同时,把自己实现的虚拟函数和消息处理函数嵌入MFC的编程框架。MFC编程框架将在适当的时候、适当的地方来调用程序的代码。本书将充分的展示MFC调用虚拟函数和消息处理函数的内幕,让读者对MFC的编程接口有清晰的理解。 四. MFC的宏观框架体系

如前所述,MFC实现了对应用程序概念的封装,把类、类的继承、动态约束、类的关系和相互作用等封装起来。这样封装的结果对程序员来说,是一套开发模板(或者说模式)。针对不同的应

中国图象图形网 www.image2003.com

用和目的,程序员采用不同的模板。例如,SDI应用程序的模板,MDI应用程序的模板,规则DLL应用程序的模板,扩展DLL应用程序的模板,OLE/ACTIVEX应用程序的模板,等等。

这些模板都采用了以文档-视为中心的思想,每一个模板都包含一组特定的类。典型的MDI应用程序的构成将在下一节具体讨论。

为了支持对应用程序概念的封装,MFC内部必须作大量的工作。例如,为了实现消息映射机制,MFC编程框架必须要保证首先得到消息,然后按既定的方法进行处理。又如,为了实现对DLL编程的支持和多线程编程的支持,MFC内部使用了特别的处理方法,使用模块状态、线程状态等来管理一些重要信息。虽然,这些内部处理对程序员来说是透明的,但是,懂得和理解MFC内部机制有助于写出功能灵活而强大的程序。

总之,MFC封装了Win32 API,OLE API,ODBC API等底层函数的功能,并提供更高一层的接口,简化了Windows编程。同时,MFC支持对底层API的直接调用。

MFC提供了一个Windows应用程序开发模式,对程序的控制主要是由MFC框架完成的,而且MFC也完成了大部分的功能,预定义或实现了许多事件和消息处理,等等。框架或者由其本身处理事件,不依赖程序员的代码;或者调用程序员的代码来处理应用程序特定的事件。

MFC是C++类库,程序员就是通过使用、继承和扩展适当的类来实现特定的目的。例如,继承时,应用程序特定的事件由程序员的派生类来处理,不感兴趣的由基类处理。实现这种功能的基础是C++对继承的支持,对虚拟函数的支持,以及MFC实现的消息映射机制。

3.3Visual C++ 6.0的优点

Visual C++是Visual Studio 6.0的一个重要组件。它提供了可视化编程和功能强大的向导工具,如MFC AppWizard 和Class Wizard.通过向导工具可生成单文档、多文档结构或基于对话框的程序,并提供了对DAO、ODBC或OLE DB等的支持。它有很多优良的特性:

(1) Visual C++ 6.0提供了MFC类库.程序员只需做少量的工作即可得到功能 齐全的Windows 应用程序,与使用C和WindowsSDK(Software Development Kit)开发Windows应用程序相比,使用Visual C++ 6.0建立的应用程序所花废的时间要少的多。MFC除了提供了一些基本的类库以外,还提供了数据库、Internet以及多媒体应用程序的开发类库。

(2) Visual C++ 6.0的编译器改进了对ANSI C++标准的支持,新增了对布尔数据类型的支持,并且还提供功能强大的调试工具,可以对进程进行单步调试,还可以对线程进行调试。

(3) Visual C++ 6.0采用了Microsoft的代码优化技术,次技术保持了Microsoft C++所有的优化属性,并进行了进一步的完善。因此,用Visual C++ 6.0开发的程序运行的速度更快。

(4) Visual C++ 6.0与安装在计算机中其他可视开发工具更紧密地集成在一起,如Visual J++、Visual Basic等,可以承担不同类型的程序编制工作,适用于特殊的、复杂的和综合的 项目软件开发。

(5) Visual C++ 6.0的联机帮助系统MODN(Microsoft Developer Network library)使得用户可以方便、灵活地查询帮助各种信息和实例。MSDN是一个很大的HTML格式的帮助文件,它所包含的内容非常丰富,有关Visual Studio的所有文档都可以在其中找到,并且可以通过因特网查询最新的帮助信息。

此外, Visual C++ 6.0还提供了其他大量的实用工具,如Spy++查看程序、ActiveXControl Test

中国图象图形网 www.image2003.com

Container控件测试程序和各种资源编译器,用户利用这些工具使得对应用程序的开发和调试更方便、更可靠。

与其它开发工具相比,至今为止Visual C++ 是一个功能最全面和最完善死亡软件开发工具。它开发出来的软件稳定性好,可移植性强的优点。

3.4 Visual C++ 6.0不足

Visual C++采用的MFC框架早在Windows 3.x的时代就出现了,那时的Visual C++还是16位的。经过这些年的不断补充和完善,MFC已经十分成熟。但由于原型出现得比较早,MFC相对于VCL等框架已经落后了。尽管微软对MFC的更新没有停止,我也经常读到持“只要Windows不过时,MFC就不会过时”之类观点的文章,但就象Inprise(原Borland)的OWL框架的淡出一样,MFC的淡出也是早晚的事。如果MFC青春永驻,微软的开发人员也不会“私自”开发出基于ATL的WTL呀。当然,WTL的地位不能和MFC比,它并不是微软官方支持的框架,封装的功能也相当有限。但至少也反衬出了MFC存在的不足。

小结

Visual C++是可视化的开发工具,改变了传统的编程手段,使得用户可以直接在用户界面良好的可视化开发环境中进行工作,它集成了许多有用的工具和功能,从而大大提高了应用程序的开发效率。

中国图象图形网 www.image2003.com

第四章 基于HOUGH变换的圆检测

4.1研究意义

HOUGH变换于1962年在美国作为专利被发表至今已有三十多年了。由于具有一些明显优点和可贵性质,它引起了国内外许多学者和工程技术人员的普遍关注。专家们对HOUGH变换的理论性质和应用方法进行了深入广泛的研究,并取得了许多有价值的成果。

由于立体,运动分析,三维物体和识别与定位等都依赖于图像边缘提取等前期工作,因而今年来它越发受到人们的普遍重视。

本文所述的是基于HOUGH变换勾画出目标物体的圆弧边缘,使观察者能够一目了然;圆弧边缘还蕴含了丰富的内在信息(如方向,阶跃性质,形状等),是图像识别中提取图像特征的重要属性。然而,当参数空间超过两维(比如圆检测)时,HOUGH变换的时间消耗和所需存储空间的急剧增大使得这种变换仅仅在理论分析上可行。虽然目前已提出了许多方法,但这仍然是一个有待解决的公认问题。

4.2曲线检测方法综述

利用HOUGH变换对曲线进行检测的方法比较繁杂。在这我们以对椭圆的检测为例:

基于椭圆和圆的对称性,对传统的霍夫变换检测曲线方法进行改进,提出分三步快速检测椭圆和圆的方法:(1)利用椭圆的几何对称性,快速确定可能的形心,生成相应子图,并滤除图像中的噪声;(2)在各子图中由边界点梯度向量和候选形心坐标,获得椭圆旋转角和长短轴比率;(3)根据椭圆参数方程确定椭圆的长短轴,并验证所检测到的椭圆。实验结果表明,该方法有效地降低了霍夫变换参数空间的大小和运算时间,提高了检测精度,实现了椭圆特征的快速提取。

4.3基于HOUGH变换的圆检测

本文所要研究的圆检测是基于HOUGH变换的圆检测,下文将具体介绍HOUGH变换的原理,应用以及基于HOUGH变换的圆检测的实现。此外,本文还还假如相应的例子进行补充并详细列出相应的程序。

4.3.1 HOUGH变换的原理

经典Hough变换的实质是对图像进行坐标变换(如将图像空间中的一点变换为参数空间中的一条直线),使变换的结果更易于识别和检测,也就是将图像空间的具有一定关系的象元进行聚类,寻找能把这些象元用某一解析形式联系起来的参数空间累积对应点。

举例

将直线方程由直角坐标转换为极坐标形式,转换后的结果:直角坐标系下的一个点在极坐标下成为一条曲线,如图1所示;而直角坐标系下的一条直线在极坐标下便成为一族有公共交点的曲线,如图2所示\"这样,识别直线时在变换平面上寻找具有某种特性的某些点就比在图像平面上直接识别图形更为简单;然后,根据变换规则进行相应的反变换便得到其相关几何参数。

中国图象图形网 www.image2003.com

下面简述Hough变换的过程:

设X-Y平面内一条直线,其方程为:

y=ax+b (1)

其中:a为斜率,b为截距;那么我们也可以以a!b为变换空间,作如下变换:

b=-ax+y

方程的形式虽然改变了,但其参数的意义并未改变,变换的结果使直角坐标系中的一个点成为“截距-斜率”空间中的一条直线,而直角坐标系中的一条直线成为“截距-斜率”空间中的一族有公共交点的若干直线。

为了正确识别和检测任意方向和任意位置直线,就必须解决垂直线的斜率无限大这一问题,在Hough变换中采用了极坐标变换:将X-Y平面的图像变换到Q-H平面处理。直线方程为:

Q=xcosH+ysinH (2)

其中:Q为原点到直线的距离,H表示该直线的法线与X轴的夹角。变换结果如图1,2所示,在图2中所有曲线都交于一点,该点坐标值(Q,H)即直线的参数,利用该变换的最大优点便是抗噪能力强,缺点是运算量大,内存开销也不小。基于同样的思路,可以进行圆!椭圆!抛物线等图形的识别,处理方法相同,只是参数空间的维数增大导致内存开销增大,现有的众多图像处理书籍中都有相关描述,在此不在敖述

4.3.2基于HOUGH变换的圆检测的算法实现

为了尽可能减少参与HOUGH变换的点数和降低积累阵列的维数,以此提高HOUGH变换的效率,因此在变换之前一般要进行预处理。

中国图象图形网 www.image2003.com

4.3.2.1 预处理

a·利用边缘算子对原图像进行边缘抽取。

b·对于图像场景中的各物体的边缘轮廓象元进行骨架化。骨架化的方法有多种〔2,4,5〕,这里不赘述。由于我们是针对圆检测的,图像中圆形物体的轮廓骨架应为闭合的(即使不闭合对该算法的实现也没影响)。用方向链码来表示轮廓骨架,并从骨架上某一点A开始按顺时针方向延骨架移动,与A相隔n个点取B点。将A点与B点用直线相连接,再取与B点相隔n点之处为C点,并将B点与C点用直线相连接。再在与A点相距m个点之处设置D点,重复上述操作得E,F点并按上述方法连成直线。如此操作下去,直到回到最初的启始点附近。这些连接线就成为骨架圆周上的弦的子集,如图2(a)所示。

d·对上述各直线求出各自的垂直平分线,如图2(b)所示。在与图像映象的累积阵列进行增值操作。

事实上,并不需要画出各直线和它们的垂直平分线,可利用图2(a)的A,B,C点的坐标值求出AB和BC两线段的中点坐标值(x1,y1),(x2,y2)即:

x1=(xb+xa)2

y1=(yb+ya)2 (7) x2=(xc+xb)2

y2=(yc+yb)2 (8) 并可求出通过这两点的法线方程: (x-x1)(xb-xa)+(y-y1)(yb-ya)=0

(x-x2)(xc-xb)+(y-y2)(yc-yb)=0 (9)

解此方程组可得出两直线的交点,在与图像映象的二维累加阵列中对与该交点对应的单元进行增值操作。在对各直线均完成此类操作后,统计累加阵列中各存储单元的累加值。最大者即为圆心坐标。各点到圆心坐标距离的均值为r。即:

r=(∑[(xi-x0)2+(yi-y0)2]12)n(10) 上述算法有以下优点:

(1)由于进行HOUGH变换之前先进行了边缘抽取及二值化,选择合适的阈值能使参与变换的象元数目大大降低。

(2)由于变换前先将图像轮廓象元实行了骨架化,若背景噪声并非太大,骨架化后物体的轮廓应是闭合的,这非常有利于进行图像分割。

(3)在物体轮廓骨架中按一定的间隔来选择边缘点构成连接弦,这样可根据工程中的实际时间调整间隔以提高变换速度。

(4)这里积累阵列是二维的,可大大节省变换时所用的存储空间。

中国图象图形网 www.image2003.com

这种变换算法依然保持着传统HOUGH变换的许多优点,对图像中的背景噪声不敏感。另外,以上分析都是假设被检测物体的边缘骨架曲线是闭合的。实际上,即使被检测物体边缘的图像残缺,只剩下一段弧或几段弧时,仍能得到很好的结果。这种情况可参考图3(a)与图3(b)。

本文提出的预处理是通过4遍历先对原图像进行边缘抽取,找到种子点(SEED),再在此基础上进行霍夫变换。

4.3.2.2 HOUGH变换

假设希望在图像平面(X-Y平面)考察并确定一个圆周。令{(xi,yi)i=1,2,3,。。。,n}为图像中欲确定圆周上的点的集合,而(x,y)为集合中的一点,它在参数坐标系(a,b,r)中方程为:

(a-x)2+(b-y)2=r2(1)

显然该方程为三维锥面,对于图像中任意确定的一点均有参数空间的一个三维的锥面与之对应。对于圆周上的任何点集合{(xi,yi)},这些三维锥面构成圆锥面簇,如图1所示:

若集合中的点在同一个圆周上,则这些圆锥簇相交于参数空间上某一点(a0,b0,r0),这点恰好对应于图像平面的圆心坐标及圆的半径。

HOUGH变换在计算上将参数空间进一步分割为累加器单元A(i,j,k),如图(2)所示,并使累加器单元置零。根据方程(a-x) (a-x)+(b-y)( b-y)=r*r 对参数作相应的循环,如果一个a(o)值得到相应的b(p),r(q),就令A(o,p,q)=A(o,p,q)+1.

最后我们对每个累加器进行比较,找到值最大的累加器,该累加器所对应的参数值(a,b,r)就是我们在XY平面上所要求的圆心及半径。

中国图象图形网 www.image2003.com

r b a

4.3.2.3 流程图

开始 对所需变量进行声明 预处理(找到种子点) 进行HOUGH变换 返回值 结束

中国图象图形网 www.image2003.com

4.4对结果的分析

本次设计所达到的效果:(1)在一幅有多个简单图形的画面,如图(一)所示中找到其中的圆,如图(三)所示;(2)在一幅有较多噪声(如一些与圆弧较接近的曲线)的图如图(二)所示中找出相应的圆,如图(四)所示;

图(一) 图(二) 图(三) 图(四)

使用我们提出的算法仍基本保留着传统HOUGH的优点。对图像场景中的干扰不敏感,在圆周残缺不全的情况下仍能正确检测.由于在预处理中实现了用链码表示图像中物体,各物体分割方便,提高了圆心坐标测量的精确度。

4.5 HOUGH变换的应用

经典Hough变换主要针对直线的检测,它将画面上所有前景点进行相同的变换,将变换平面上各点看作一个个累加器(点与点的距离取决于变换所取步长的大小),原图像平面上各点变换后所得曲线在变换平面上每经过的某点,便将该点计数器值加1,最后结果是各曲线的交点处计数器值达到最大,该点坐标值既直线的参数。

小结

HOUGH变换的实质是将图像空间的具有一定关系的象元进行聚类,寻找能把这些象元用某一解析形式联系起来的参数空间累积对应点。在参数空间不超过两维的情况下,这种变很理想的效果。然

中国图象图形网 www.image2003.com

而,当参数空间超过两维时,这种变换的时间消耗和所需存储空间的急剧增大使得这种变换仅仅在理论分析上可行,而在实际应用中几乎是不可能实现的。这时往往要求从具体的应用情况中寻找特点,如利用被处理的图像象元的灰度的梯度变化值确定灰度的变化方向来降低参数空间维数。或利用一些对于被检测图像的先验知识来设法降低参数空间的维数以降低变换过程的时间和空间开销。

HOUGH变换的优点主要在于:它对于图像中的噪声点不敏感,利用它得到的结果可有效地滤除噪声的影响以提高结果的置信度;这种变换便于并行计算,计算机视觉领域的一些问题相当复杂,需要很大的计算量,并行计算是提高计算速度的有效方法。

中国图象图形网 www.image2003.com

第五章 不足和展望

5.1目前存在的不足

(一)本次设计只是对简单几何图形(圆)进行边缘检测,并且在HOUGH变换之前进行了图像的预处理,所以耗费的存储空间和处理时间并不是很大。但由于此次设计涉及的知识比较的广泛,导致设计时间相对交为紧迫,致使设计中用到的图像预处理也相对的简单,从而在一定程度上降低了检测的精确度。如果使用前文中提到的对图像场景中的各物体的边缘轮廓象元进行骨架化预处理,得到的效果可能会相对较好,但所用的程序会相应的变的复杂,给程序的调试也会带来较多的问题。

(二)经典Hough变换为我们提供了检测直线的有效手段,利用该算法可以实现对矩形,三角形等由直线段组成的简单几何图形的识别。由于该变换必须逐点处理图像平面上的每一点, 应用在圆或椭圆的检测中时,参数空间的维数将扩大到三维和五维,这将耗费大量的存储空间和处理器时间,特别对于图像幅面大,前景复杂的图形时尤其明显。针对如何降低参数空间的维数、减少计算量,许多人提出了自己的看法,但很多算法对图像中的噪声干扰、计算的量化误差仍考虑不足。对图像进行滤波和边缘检测虽然能够加快处理速度,但识别精度会受到不同程度的影响。

5.2 对未来的展望

在计算机视觉领域中,如何从当前的场景中提取出重要的特征信息作为识别的判据尤为重要。在许多工业应用中,需要快速检测出图像中的圆或椭圆,从而准确地定位工件的位置,而霍夫变换及其改进算法为以上问题提供了一种有效的解决途径。

机器视觉在中国短暂的发展历史数字图像是一门新兴的学科,从2002年至今,我们称之为机器视觉发展期。近年来有许多人开始着手研究这门学科的研究和开发,取得了令人瞩目的成绩。

大家都知道,制造业已经成为中国最大的工业行业,然而来自装备制造业的产值仅相当于整个制造业产值的26%。与美国和德国超过40%的比例相比,在未来20年,中国制造业需要高速发展。这将给工厂自动化带来前所未有的机遇,也给机器视觉这门新兴的学科带来生机。

在长春大众和上海大众的现代化工厂和nokia的北京工厂中,最先进的工业生产线和检测设备随处可见,自动化水平及质量检测水平与他们在别的国家的生产基地相比毫不逊色甚至更高。你也可以看到很多半自动化、半人工的生产线,人们仅仅在一些关键环节加入自动检测设备,在很多情况下这种安排反而带来更高的效率和更低的成本。这种不平衡的带有中国特色的发展格局自始至终都给工业中的机器视觉的发展产生了影响。

机器视觉在半导体、电子、计算机配件、消费品、食品、汽车、冶金、包装、制药等行业得到了应用,它主要是来提供产品尺寸测量、表面检测、定位导航,ocr/ocv,以及颜色识别等。这些工业应用和别的国家基本一致。但必须指出的是:由于中国有完整的的复杂的工业系统,每个行业都可能使用机器视觉。

总的来说,中国机器视觉市场处在一个迅速发展期。在不远的将来,我们可以看到来自不同领域的不同的商业模式和不同类型的公司。随着市场的发展,一些国内的工程公司和系统集成商将成为市场的引领者,更多的客户将依赖他们在视觉和其他自动化技术方面的综合能力来解决问题,比如运动控制,网络通讯。他们的后面是实力强大的公司,他们将控制大的原始设备制造商和vip终端用户。我们也应该注意到公司在产品的生产组装、服务、技术支持以及财政方面本地化的趋势。另外,将有更多的国内公司自己或者联合外国公司开发具有自主知识产权的视觉产品。

我们有理由相信,机器视觉的明天会更加繁荣。

中国图象图形网 www.image2003.com

致 谢

首先,我要感谢我的导师文小军老师。作为我毕业设计的导师,文老师常常提醒我静下心来,踏踏实实做事。而在这次毕业设计过程中,在我工作进行到最困难、毫无头绪的时候,文老师也一直鼓励我,支持我,对我充满信心。这些的教诲,我将牢记在心,并在我今后的科研道路上和人生道路上遵循下去。

感谢金正林,张银伟同学对我在图像提取方面的悉心指导,在他们的帮助下我很快掌握了与论文相关的知识,在很大程度上减轻了我的学习负担,加快了工作进程。

感谢郑中周,孙海华同学,虽然他们和我研究的课题并不相同,但他们还是在繁忙之中给我的点拨鼓励。

感谢寝室里的各位室友„„在这段日子里,在工作上、生活上给了我不可缺少的帮助和鼓励。 感谢所有应该感谢,但没有能够列出的人们,谢谢你们!

中国图象图形网 www.image2003.com

参考文献

[1] VC++图像处理程序设计/杨淑莹编著.——北京:北方交通大学出版社,2003.11 ISBN 7-81082-163-6

[2] 数字图像处理(第二版)/(美)冈萨雷斯(Gonzalez.R.C.)等著;阮秋琦等译.北京:电子

工业出版社,2003.3书名原文:Difital Image Processing, Second Edition ISBN 7-5053-8236-5

[3] 数字图像处理学Visual C++实现/郎锐——北京:北京希望电子出版社,2002 [4] 数字图像处理/霍宏涛——北京:机械工业出版社,2003 [5] 数字图像处理/孙即祥——北京:科学出版社,2004

[6] 精通Visual C++图像编程/周长发——北京:电子工业出版社,2000 [7] 数字图像处理技术与应用/崔屹——北京:电子工业出版社,1997 [8] 数字图像处理编程入门/吕风军——北京:清华大学出版社,1999

[9] 数字图像处理(多媒体课件)/艾海舟——北京:清华大学计算机系,2000 [10] 图像工程(上册)图像处理和分析/张毓晋——北京:清华大学出版社,1999 [11] 信号.数字图像处理/(日)有本卓/厉森梁译——北京:电子工业出版社,1987

中国图象图形网 www.image2003.com

附录

(一)中英文文摘:

(1)Edge Detection

Although point and line detection certainly are important in any discussion on segmentation, edge detection is by far the most common approach for detecting meaningful discontinuities in gray level. In this section we discuss approaches for implementing first-and second-order digital derivatives for the detection of edge in an image . The focus in this section is on their properties for edge detection. Some of the concepts previously introduced are restated briefly here for the sake continuity in the discussion. Basic detection

In this section we look at the concept of a digital edge a little closer. Intuitively, an edge is a set of connected pixels that lie on the boundary between two regions. Fundamentally, as we shall see shortly, an edge is a “local” concept whereas a region boundary, owing to the way it is defined, is a more global idea. A reasonable definition definition of “edge” requires the ability to measure gray-level transitions in a meaningful way.

In practice, optics, sampling, and other image acquisition imperfections yield edges that are blurred, with the degree of blurring being determined by factors such as the quality of the image acquisition system, the sampling rate, and illumination conditions under which the image is acquired. As a result, edges are more closely modeled as having a “ramplike” profile. The slope of the ramp is inversely proportional to the degree of blurring in the edge . In this model, we no longer have a thin (one pixel thick) path. Instead, an edge point now is any point contained in the ramp , and an edge is determined by the slope, which, in turn, is determined by degree of blurring. This makes sense: Blurred edges tend to be thick and sharp edges edges tend to be thin .

Although attention thus far has been limited to a 1-D horizontal profile, a similar argument applies to an edge of any orientation in an image. We simply define a profile perpendicular to the edge direction at any desired point and interpret the results as in the preceding discussion.Based on this example and on the three paragraphs that precede it, we are led to the conclusion that, to be classified as a meaningful edge point , the transition in gray level associated with that point has to be significantly stronger than the background at that point. Since we are dealing with local computations, the method of choice to determine whether a value is “significant” or not is to use a threshold. Thus, we define a point in an image as being an edge point if its two-dimensional first-order derivative is greater than a specified threshold. A set of such points that are connected according to a predefined criterion of connectedness is by definition an edge. The term edge segment generally is used if the edge is short in relation to the dimensions of the image. A key problem in segmentation is to assemble edge segments into longer edges.An alternate definition if we elect to use the second-derivative is simply to define the edge points in an image as the zero crossings of its second derivative. The definition of an edge in this case is the same as above. It is important to note that these definitions do not guarantee success in finding edge in an image. They simply give us a formalism to look for them. As in chapter 3,first-order derivative in an image are computed using the gradient.

中国图象图形网 www.image2003.com

Second-order derivatives are obtained using the Laplacian.

(2)HOUGH TRANSFORM FOR CIRCLE

Abstract: The Hough transform is a well known medium-level image recognition technique for the detection of curves. The conventional Hough technique requires a three-dimensional accumulator array (AA) for the detection of circles. Because shape parameterisation and data structure of the accumulator array significantly affect the memory space and computation loading requirements of any hardware or software realization, they should bi carefully selected for any fast and efficient algorithm, A new scheme which uses only a pair of two-dimensional accumulator arrays to reduce the storage and computation time by an order of magnitude or more is proposed.. This new scheme is capable of discriminating multiple (including concentric) circles in a complex real life image with a recognition rate of 95%-100%. Various parallel realizations of this Hough scheme for circles on a general purpose MIMD (a reconfigurable transputer network) machine are discussed and a comparison of their performances with the conventional approach on the basis of execution time and recognition rate is presented.

Introduction

The Hough transform (HT) is a method for detecting characteristic contours or shapes by exploiting mutual constraints between parameters and points lying on the target contour. For each target curve or shapes to be detected, the transform uniquely defines a mapping from each point in the image space I to a hypersurface H in the parameter space P, The Hough technique seeks to transform the problem of locating global features (target shape instances) in the image space to that of locating local features (peaks or maxina) in the transformed or, parameter,space. HT is often considered to bi one of the most promising techniques for object detection, It has the desirable characteristics of being robust and noise resistant. Moreover, the algorithm is essentially a parallel one, and can be easily modified and ported to multiprocessor environments for parallel realizations. Ballard extended the method to the generalized Hough transform (GHT) to detect nonanalytic curves by using the direcdtional edge information and the R-table associated with each target curve. Recently, Illingworth et al. gave a comprehensive and complete review of this transform.

Because circles are completely defined by three parameters ,namely the radius and the co-ordinates of the center (x0,y0), the conventional Hough transform requires a three-dimensional accumulator array to detect this family of analytic curves. The transformed hypersurfane is an inverted right circular cone in the parameter space. This simple scheme is inefficient in terms of the large memory space and computation effort required. Recently, a dual plane variation of the Hough transform for circles has been suggested. However, this method cannot discriminate concentric circles of different radii. Besides, the suggested transform equations rely heavily on the gradient orientations of two neighbourhood edge pixels, which are difficult to estimate to the required accuracy by computationally efficient edge operators for a noisy input image. Moreover,

Floating point operations (including divisions) seem to be unavoidable in the computation of its transform equations as well as the weight of each vote. This is highly undesirable in any fast algorithm for real-time applications. The adaptive Hough transform (AHT) is another Hough approach for detecting circles, but there are interpretation problems when the method is applied to complex images with multiple objects. Besides, the inherent parallel voting process has to be repeated many times for the sequential detection of

中国图象图形网 www.image2003.com

each of the target shape instances in a single image because this AHT scheme can only adapt its parameter ranges to the detection of one target shape instance in each iteration.

A new and efficient approach is proposed, which can give approximately 30 times reduction in the memory space requirement and 50 times reduction in computation effort over the conventional approach with a pair of two-dimensional (2-D) accumulator arrays that is capable of discriminating multiple (including concentric) circles in a complex real life image in a single voting pass. Various parallel realizations of this new scheme have been performed on a general purpose MIMD multiprocessor system, which comprises eight T800 transputers and cross-bar switches for network topology reconfiguration. For the initial part of the study, a software simulation of the new algorithm is performed on a single transputer system under the transputer development system (TDS2) using Occam 2. The whole recognition process (including voting, peak detection and circle validation) on a typical 256*256 complex real-life image with multiple objects can be completed in less than 3 seconds with a typical recognition rate of 95%-100%.

Although a number of parallel implementations of the Hough transform have already been reported, those implementations generally only emphasise the parallel accumulation of votes through different partitionings of the parameter space. The subsequent decision and validation processes based on the accumulated votes are not usually addressed. The new parallel realizations, however, also take into consideration the processing performed before and after the transform, i.e. the initial edge detection for input to the HT and validation of candidate output form the HT, to complete the whole recognition cycle. Instead of simply thresholding the votes or detecting local maxima in the AA, special procedures are included for the validation of each candidate shape instance. This is essential for shape detection in complex images with many obiects.

(1)边缘检测

尽管在任何关于分割的讨论中,点和线检测都很重要的,但是边缘检测对于灰度级别间断的检测是最为普遍的检测方法.本书中,我们讨论实现一阶和二阶数字导数检测一幅图像中边缘的方法.本节的重点将放在边缘检测的特性上.某些前面介绍的概念在这里为了叙述的连续性将进行简要的重述.

基本说明

本节中我们更要进一步地了解数字化边缘的概念.直观上,一条边缘是一组相连地像素集合.这些像素位于两个区域的边界上.从根本上讲,如我们将要看到夫人,一条边缘是一个“局部”概念,而由于其定义的方式,一个区域的边界是一个更具有整体性的概念.给边缘下一个更合理的定义需要具有以某种有意义的方式测量灰度级越变的能力.

实际上,光学系统,取样和其他图像采集的不完善性使得到的边缘是模糊的,模糊的程度取决于诸如图像采集系统的性能,取样率和获得图像的照明条件等因素.结果,边缘被更精确地模拟成具有“类斜面”的剖面 .斜坡部分与边缘的模糊程度成比例.在这个模型中,不再有细线(一个像素的线条).相反,现在边缘的点是包含于斜坡中的任意点,并且边缘成为一组彼此相连接的点集.边缘的“宽度”取决于从初始灰度级跃变到最终灰度级的斜坡的长度.这个长度又取决于斜度,斜度又取决于模糊程度.这使我们明白:模糊的边缘使其边缘变粗而清晰的边缘使其变得较细.

为了对有意义得边缘点进行分类,与这个点相联系的灰度级变换必须比在这一点得背景上的变换更为有效.由于我们用局部计算进行处理,决定一个值是否有效的选择方法就是使用门限.因此,如果一个点的两维一阶导数比制定的门限大,我们就定义图像中的此点是一个边缘点.一组这样的依据

中国图象图形网 www.image2003.com

事先定好的连接准则相连的边缘点就定义为一条边缘.术语”边缘线段”一般造边缘与图像的尺寸比起来很短时才使用.分割的关键问题是如何将边缘线段组合成更长的边缘.如果我们选择使用二阶导数,则另一个棵用的定义是将图像中的边缘点定义为它的二阶导数的零交叉点.此时,边缘的定义通上面讲过的定义是一样的.应该注意到,这些定义并不能保证在一幅图像中成功地找到边缘.它们只是给了我们一个寻找边缘的形式体系.如第3章中所讲的,图像中的一阶导数用梯度计算,二阶导数使用拉普拉斯算子得到.

(2)基于HOUGH变换的圆周检测

摘要:HOUGH变换是用于曲线检测的广为人知的媒体级的图像检测技术。传统的HOUGH技术需要为圆周找到一个三维空间的累加器(AA),因为参数和累加器的数据结构会影响硬件和软件的记忆空间和载入速度,他们应该小心地选择快速有效的运算法则,一种原先用于二维计算并能有效降低存储和计算空间的新算法正在被选择。这种新方案能够以95%完整率对一个现实生活中的复杂图像(包括同心的圆周)进行检测。基于一般用途的MIMD(多重结构晶体计算机网络)机器上的各种不同平行实现根据实行时间被与传统的方式的表现进行比较,而且认同率已经被接受。

介绍

HOUGH变换(HT)是基于通过对分布与目标圆周上的参数和点进行特征值的提取来检测边缘和圆弧的。为了检测目标边缘和外形,变换惟一地从图像上的每点定义一个映射,从而找到相应的参数空间。HOUGH技术通过在参数空间寻找特征(峰值或最大值点)和位于在图像空间中的特征(以目标形状为例)来转换问题。HT通常被认为是用于边缘检测的最有希望的技术之一,它有人们所期望的高抗干扰性。 而且,运算法则本质上是平行的, 而且在多处理器环境中进行平行实现时能被容易地被修正和移植。Ballard 通过使用边缘信息和对每个目标曲线有关的R平台扩展了对被推广的HOUGH变换 (GHT) 的方法。最近,Illingworth 等人提出了这种变换完整的和完全的结论。

因为圆周需要被定义三个叁数,即半径和中心点(x0,y0), 传统的HOUGH变换需要一个三维空间的累加器以此分析曲线。被转换的圆弧是叁数空间的一个反转的圆锥体。这简单的方法在需要大量记忆空间和计算时间时是效率很底的。最近,一种双重平变化转换的HOUGH变换已经被提出。 然而,这一个方法不能够区别不同半径的同中心圆周。此外,所提到的变换方程很仰赖于相邻的倾斜方向的像素,难以为一个吵杂的输入图像进行效率的边缘检测操并做出必需的准确性估计。 而且,浮点行动的存在(包括区分)似乎是不可避免的,并且在变换方程中和每张选票有相同的权值,这在任何要求高效高速的即时计算中是不受欢迎的。适合的HOUGH变换 (AHT) 是另外的一种HOUGH变换检测圆周的方式,但是当方法被适用于有多样物体的复杂图像时候会发生编译问题。此外,因为AHT方案只能根据叁数范来对目标外行进行检测,所以固有的平行投票程序必须许多次为每一个目标进行持续重复地检测。

一个新的和有效率的方法已经在计划中,在检测一个二维空间(2-D)的真实生活中的复杂图像 (包括同心的) 圆周时,与传统方法相比它减少大约30%的记忆空间和大约50%的计算时间。这个新方案的各种不同平行实现已经在一个包含八个T800 晶体管和十字转换器的用于网络结构学的 MIMD 多处理器系统上被运行。 对于研究的开始部份,新的运算法则的一个模拟软件在一个使用 Occam 2 的晶体计算机发展系统 (TDS2) 之下在的一个单一晶体计算机系统上被运行。 在一个典型的 256*256复杂度的多物体的现实图像上的整个承认程序 (包括投票,峰值检测和圆周确认) 能在

中国图象图形网 www.image2003.com

95%-100%的典型承认率下在少于3秒内被完成。

虽然若干HOUGH变换的平行落实已经被报道, 但是那些落实通常只是强调选票的平行积,所用的叁数空间却不相同。后来的基于累积选票的结论和确认程序通常也不被认可。然而,对于新的平行实现,也考虑变换前后的运行表现, 从HT的输入也就是开始的边缘检测,到候选人(有效点)的输出,完成整个的承认周期。代替简单槛选票或检测AA的地方极大值,需要在检测之前加入特殊的程序。这对和许多物体的复杂图像的形状检测是很必要的。

(二)计算程序及说明

ouble CLine:: SimulatCircle( LPSTR lpDIBBits, LONG lWidth, LONG lHeight,

CPoint CircleSeeds[],CPoint CircleGrads[],CPoint CirclePoint[], BYTE CircleContrast,

CPoint UpLeft,CPoint DownRight, int ¢erx, int ¢ery) {

if(abs(UpLeft.x-DownRight.x)<5||abs(UpLeft.y-DownRight.y)<5 ||UpLeft.x>lWidth||UpLeft.x<0||UpLeft.y>lHeight||UpLeft.y<0

||DownRight.x>lWidth||DownRight.x<0||DownRight.y>lHeight||DownRight.y<0 )

return 1000;

// 指向源图像的指针 LPSTR lpSrc; const int M=6; LPSTR lpSrc1[M];

unsigned char pixely[M]; // 指向缓存图像的指针 LPSTR lpDst;

// 指向变换域的指针 LPSTR lpTrans;

// 图像每行的字节数 LONG lLineBytes; // 图像每列的字节数

// 指向缓存DIB图像的指针 LPSTR lpNewDIBBits; HLOCAL hNewDIBBits;

中国图象图形网 www.image2003.com

//指向变换域的指针 LPSTR lpTransArea; HLOCAL hTransArea;

//循环变量 long i; long j;

struct m_ValidRound {int x; int y; };

typedef struct{ int a0; int b0; int r0;

int MaxDots; } MaxValue;

//像素值

// unsigned char pixel[10]={0}; unsigned char pixel,pixel1;

const double pi=3.1415927;

int *pSeedx=new int[lWidth]; int *pSeedy=new int[lWidth];

if(lHeight-UpLeft.yCPoint temp; temp=UpLeft;

UpLeft=DownRight; DownRight=temp; }

for(i=0;ipSeedx[i]=0; pSeedy[i]=0; }

for(i=0;i中国图象图形网 www.image2003.com

CircleSeeds[i].x=0; CircleSeeds[i].y=0; CircleGrads[i].x=0; CircleGrads[i].y=0; }

//存储变换域中的三个最大值 MaxValue MaxValue1; //有效种子点

m_ValidRound ValidRound[1000];

// 暂时分配内存,以保存新图像

hNewDIBBits = LocalAlloc(LHND, lWidth * lHeight);

if (hNewDIBBits == NULL) {

// 分配内存失败 return FALSE; }

// 锁定内存

lpNewDIBBits = (char * )LocalLock(hNewDIBBits);

// 初始化新分配的内存,设定初始值为255 lpDst = (char *)lpNewDIBBits;

memset(lpDst, (BYTE)0, lWidth * lHeight);

//为变换域分配内存

hTransArea = LocalAlloc(LHND, lWidth * lHeight *(int)sqrt(lWidth * lHeight)/2 * sizeof(int));

if (hNewDIBBits == NULL) {

// 分配内存失败 return FALSE; }

// 锁定内存

lpTransArea = (char * )LocalLock(hTransArea);

// 初始化新分配的内存,设定初始值为0 lpTrans = (char *)lpTransArea;

memset(lpTrans, 0, lWidth * lHeight * (int)sqrt(lWidth * lHeight)/2 * sizeof(int));

//叠加方式显示

中国图象图形网 www.image2003.com

memcpy(lpNewDIBBits,lpDIBBits, lWidth * lHeight);

// 计算图像每行的字节数

lLineBytes = WIDTHBYTES(lWidth * 8);

int edge=5; int n=0;

bool contiue=true;

//double A0=0,A1=0,seta1=0; int MaxGrads=0; //找到种子点

for(i = UpLeft.x ;i contiue=true;

for(j = lHeight-UpLeft.y; j >lHeight-DownRight.y && contiue; j--) {

// 指向源图像倒数第j行,第i个象素的指针 lpSrc = (char *)lpDIBBits + lLineBytes * j + i;

//取得当前指针处的像素值,注意要转换为unsigned char型 pixel = (unsigned char)*lpSrc;

lpSrc = (char *)lpDIBBits + lLineBytes * (j+1) + i+1; pixel1 = (unsigned char)*lpSrc;

if(abs(pixel-pixel1) >= UpContrast2 || abs(pixel-pixel1) >= UpContrast ) {

for(int k=0;klHeight-DownRight.y && j+k-M/2lpSrc1[k] = (char *)lpDIBBits + lLineBytes * (j+k-M/2) + (i+k-M/2);

pixely[k] = (unsigned char)*lpSrc1[k]; }

MaxGrads=0;

int GradsY[M]={0}; for( k=0;klHeight-DownRight.y && j+k-M/2GradsY[k]=abs(pixely[k]-pixely[k+1]);

if( GradsY[k]>DownContrast2 && GradsY[k]>=MaxGrads) {

MaxGrads=GradsY[k];

中国图象图形网 www.image2003.com

pSeedx[n]=i+k; pSeedy[n]=j+k;

CircleGrads[n].x=i+k; CircleGrads[n].y=j+k; contiue=false; // break; } }

if(nelse //鼠标超出图像范围 break; } } }

//hough变换

int a=abs(UpLeft.x-DownRight.x); int b=abs(UpLeft.y-DownRight.y); int r; int Maxr=(int)

sqrt((UpLeft.x-DownRight.x)*(UpLeft.x-DownRight.x)+(UpLeft.y-DownRight.y)*(UpLeft.y-DownRight.y))/2;

for(int m=0;mValidRound[m].x=pSeedx[m]; ValidRound[m].y=pSeedy[m]; }

for(m=0;mfor(a=abs(UpLeft.x-DownRight.x);a>0;a--) {

for(b=abs(UpLeft.y-DownRight.y);b>0;b--) {

r=sqrt((ValidRound[m].x-a)*(ValidRound[m].x-a)+(ValidRound[m].y-b)*(ValidRound[m].y-b));

中国图象图形网 www.image2003.com

//添加变换域的相应点+1

lpTrans = (char *)lpTransArea+lWidth*lHeight*r+lWidth*b+a; (*lpTrans)++; } } }

//找到最大点 int m_Radius;

int a1=0,b1=0,r1=0; MaxValue1.MaxDots=0;

for(a=abs(UpLeft.x-DownRight.x);a>0;a--) {

for(b=abs(UpLeft.y-DownRight.y);b>0;b--) {

for(r=0;rlpTrans=(char*)lpTransArea+lWidth*lHeight*r+lWidth*b+a; if(*lpTrans >=MaxValue1.MaxDots) {

MaxValue1.MaxDots=*lpTrans ; centerx=a; centery=b; m_Radius=r; } } } }

// 复制腐蚀后的图像

memcpy(lpDIBBits, lpNewDIBBits, lWidth * lHeight); delete pSeedx; delete pSeedy;

// 释放内存

LocalUnlock(hNewDIBBits); LocalFree(hNewDIBBits);

中国图象图形网 www.image2003.com

// 释放内存

LocalUnlock(hTransArea); LocalFree(hTransArea); // 返回

return m_Radius;

}

中国图象图形网 www.image2003.com

中国图象图形网 www.image2003.com

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- huatuo9.cn 版权所有 赣ICP备2023008801号-1

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务