基于数字图像的矩形芯片定位方法研究与实现.docx
《基于数字图像的矩形芯片定位方法研究与实现.docx》由会员分享,可在线阅读,更多相关《基于数字图像的矩形芯片定位方法研究与实现.docx(27页珍藏版)》请在冰豆网上搜索。
基于数字图像的矩形芯片定位方法研究与实现
毕业设计(论文)
题目:
基于数字图像的矩形芯片定位方法
研究与实现
摘要
毕业设计的任务是以数字图像处理技术为基础,实现矩形芯片的定位。
本文介绍了数字图像处理的基础知识,讨论了传统的边缘检测算法的优缺点,针对矩形芯片的特征设计出一种新的边缘检测算法,利用一定斜率的直线扫描图像,得到直线上像素点的灰度值之和,再根据差分法求出最优斜率,经过多次实验设定一定的阈值,求出图像边缘所在的直线,并利用计算机编程技术对得到的参数数据进行研究,分析出芯片与水平线的夹角和芯片的中心坐标,为后期的准确焊接提供支持。
关键词:
数字图像处理;边缘检测;中心坐标;夹角
Abstract
Thispaperofthegraduateddesignisbasedondigitalimageprocessingtechnology,toachievethepositioningoftherectangularchip.
Thispaperintroduceddigitalimageprocessingknowledge,discussedtheadvantagesanddisadvantagesofthetraditionaledgedetectionalgorithm,designedofanewedgedetectionalgorithminviewofthecharacteristicsoftherectangularchip,scannedimagebymakinguseofthestraight-lineofacertainslope,gotthegrayvalueofthepixelline,andthenderivetheoptimalslopebasedonthedifferencemethod,throughaseriesofexperimentssetacertainthreshold,whereisthecalculatedstraight-lineoftheedge,alsomakeuseofcomputerprogrammingtechnologytoresearchaccordingtotheparametersofdata,analysisthechipandtheanglebetweenthehorizonandthecenterofthechipcoordinates,toprovidesupportforthelatteraccuratewelding.
Keywords:
Digitalimageprocessing;Edgedetection;Centercoordinates;Angle;
目录
摘要I
AbstractII
第一章研究现状和实际意义1
1.1数字图像处理的背景1
1.2数字图像处理的研究现状1
1.3矩形芯片研究的实际意义2
第二章数字图像编程基础3
2.1Windows编程简介3
2.1.1VisualC++简介3
2.1.2VisualC++数字图像编程基础4
2.2开发平台5
第三章数字图像处理典型算法6
3.1BMP图像简介6
3.2边缘检测原理6
3.3四种典型边缘检测算子7
3.3.1Roberts边缘检测算子7
3.3.2Sobel边缘检测算子7
3.3.3Prewitt边缘检测算子8
3.3.4拉普拉斯边缘检测算子9
3.4四种典型算子的不足之处15
第四章系统功能设计与实现16
4.1总体设计16
4.2界面设计17
4.3矩形芯片图像的获取18
4.3.1灰度图简介18
4.3.2矩形芯片的读取与显示13
4.4矩形芯片边缘检测的设计14
4.4.1边缘检测算法的设计思路15
4.4.2边缘检测最优斜率K的计算16
4.4.3边缘扫描17
4.4.4边界提取方案19
4.5矩形芯片偏角的计算20
4.6矩形芯片中心坐标的计算20
4.7功能总结26
第五章小结与感受27
5.1VC++编程感受27
5.2本芯片定位方法的意义23
5.3本芯片定位方法的优点23
5.4本研究有待改进的地方23
结束语24
参考文献25
第一章研究现状和实际意义
1.1数字图像处理的背景
数字图像处理又称为计算机图像处理,它是指将图像信号转换成数字信号并利用计算机对其进行处理的过程,就是采用计算机对图像进行信息加工。
图象处理的主要内容有:
图像的采集、增强、复原、变换、编码、重建、分割、配准、嵌拼、融合、特征提取、模式识别和图像理解。
数字图像处理是一个跨学科的前沿科技领域,它与数学、光学、电子学、计算机技术、成像技术、视觉心理学、视觉生理学、计算机视觉和人工智能密切相关。
数字图像处理最早出现于20世纪50年代,人们开始利用计算机来处理图形和图像信息。
数字图像处理作为一门学科大约形成于20世纪60年代初期。
早期的图像处理的目的是改善图像的质量。
输入的是质量低的图像,输出的是改善质量后的图像。
首次获得实际成功应用的是美国喷气推进实验室。
他们对航天探测器在1964年发回的几千张月球照片使用了图像处理技术,为人类登月创举奠定了坚实的基础,也推动了数字图像处理这门学科的诞生。
数字图像处理取得的另一个巨大成就是在医学上获得的成果。
1972年英国工程师Hounsfield发明了用于头颅诊断的X射线计算机断层摄影装置,也就是我们通常所说的CT。
CT的基本方法是根据人的头部截面的投影,经计算机处理来重建截面图像。
1979年,这项无损伤诊断技术获得了诺贝尔奖,说明它对人类做出了划时代的贡献。
从70年代中期开始,随着计算机技术和人工智能、思维科学研究的迅速发展,数字图像处理向更高、更深层次发展。
人们已开始研究图像理解或计算机视觉。
很多发达国家投入更多的人力、物力到这项研究,取得了不少重要的研究成果。
1.2数字图像处理的研究现状
近年来图像处理技术发展非常迅速,应用也越来越广,已经渗透到工程、工业、医疗保险、航天航空、军事、科研等各个方面,有些技术已经相当成熟并取得了惊人的效益。
20世纪20年代,图像处理首次得到应用。
20世纪60年代中期,随电子计算机的发展得到普遍应用。
60年代末,图像处理技术不断完善,逐渐成为一个新兴的学科。
利用数字图像处理主要是为了修改图形,改善图像质量,或是从图像中提取有效信息,还有利用数字图像处理可以对图像进行体积压缩,便于传输和保存。
数字图像处理主要研究以下内容:
傅立叶变换、小波变换等各种图像变换;对图像进行编码和压缩;采用各种方法对图像进行复原和增强;对图像进行分割、描述和识别等。
随着技术的发展,数字图像处理主要应用于通讯技术、宇宙探索遥感技术和生物工程等领域。
数字图像处理因易于实现非线性处理,处理程序和处理参数可变,故是一项通用性强,精度高,处理方法灵活,信息保存、传送可靠的图像处理技术。
主要用于图像变换、量测、模式识别、模拟以及图像产生。
广泛应用在遥感、宇宙观测、影像医学、
通信、刑侦及多种工业领域。
图像是人类获取和交换信息的主要来源,因此,图像处理的应用领域必然涉及到人类生活和工作的方方面面。
随着科学技术的发展,数字图像处理技术的应用领域也将随之不断扩大。
进入21世纪,随着计算机技术的迅猛发展和相关理论的不断完善,数字图像处理技术在许多应用领域受到广泛重视并取得了重大的开拓性成就。
属于这些领域的有航空航天、生物医学工程、工业检测、机器人视觉、公安司法、军事制导、文化艺术等。
该技术成为一门引人注目、前景远大的新型学科。
数字图像处理技术在航空航天、工业生产、医疗诊断、资源环境、气象及交通监测、文化教育等领域有着广泛的应用,创造了巨额社会价值;同时还远远不能满足社会需求,自身也在不断完善和发展,有很多新的方面要探索。
它必将向更深入、更完善的方向发展:
处理算法更优化,处理速度更快,实现图形的智能生成、处理、识别和理解。
1.3矩形芯片研究的实际意义
基于数字图像的研究国内已有很多例子,例如基于SPCA563B芯片的图像识别系统,是凌阳科技公司推出的一颗用于图像识别领域的IC,不仅具有一般单片机的控制功能,而且具有图像识别与处理能力。
该图像识别系统就是以它为核心进行数据处理与控制。
该系统已实现的功能有:
物体颜色和形状识别、字符识别以及手势识别等。
利用这些识别的结果,可以开发游戏、趣味教学、智能玩具、文字输入以及智能识别等应用系统。
还有近年来对各种车牌图像的提取文献都用到了图像识别的方法,对车牌的定位,车牌的边缘检测以及对车牌上各种字符(英文字母和数字)的识别,还要有一定得图像分割与模式匹配,得到车牌上的各种字符。
本课题是基于数字图像的矩形芯片的定位研究,主要通过对芯片在电路板上的扫描图像,识别图像的外观、形态及坐标,利用正确的算法计算芯片在电路板上放置的正确性,从而达到芯片正确焊接的目的。
本课题的工作主要分为以下三个方面:
一是读入矩形芯片的图像,得到图像的坐标和每个坐标对应的RGB值,研究图片的灰度信息。
二是针对矩形芯片的特征设计边缘检测算法,得到图像的边缘并把边缘提取出来。
三是在已经得到的矩形芯片图片的边缘与轮廓的基础上,利用计算机编程技术对得到的参数数据进行研究,分析出芯片中心坐标和芯片与水平线的夹角,为后期的准确焊接提供数据支持。
第二章数字图像编程基础
2.1Windows编程简介
Windows编程是基于Microsoft公司的window操作系统的编程,windows编程可以为windows操作系统制作软件,而且windows编程是基于窗口的.不像以前的DOS编程只有一个屏幕,而window可以在可见化的世界里任意施展,window32全部都是用c写的.
下面简单介绍一下与Windows系统密切相关的几个基本概念:
⒈窗口:
窗口是Windows本身以及Windows环境下的应用程序的基本界面单位。
从用户的角度看,窗口就是显示在屏幕上的一个矩形区域,其外观独立于应用程序,事实上它就是生成该窗口的应用程序与用户间的直观接口;从应用程序的角度看,窗口是受其控制的一部分矩形屏幕区。
应用程序生成并控制与窗口有关的一切内容,包括窗口的大小、风格、位置以及窗口内显示的内容等。
用户打开一个应用程序后,程序将创建一个窗口,并在那里默默地等待用户的要求。
每当用户选择窗口中的选项,程序即对此做出响应。
⒉程序:
通常说的程序都是指一个能让计算机识别的文件,接触得最多的便是.exe型的可执行文件。
⒊进程:
所谓进程就是应用程序的执行实例(或称一个执行程序)。
需要注意的是:
进程是程序动态的描述,而上面说到的程序是静态的描述,两者有本质的区别。
⒋线程:
线程是进程中的一个执行单元,同一个进程中的各个线程对应于一组CPU指令、一组CPU寄存器以及一些堆栈。
进程本来就具有动态的含义,然而实质上是通过线程来执行体现的,从这个意义上说,Windows进程的动态性意义已经不是很明显了,只算是给程序所占的资源划定一个范围而已,真正具有动态性意义的是线程。
⒌消息:
我们几乎做每一个动作都会产生一个消息,在用鼠标指点江山的今天,鼠标被移动会产生WM_MOUSEMOVE消息,鼠标左键被按下会产生WM_LBUTTONDOWN的消息,鼠标右键按下便产生WM_RBUTTONDOWN消息等等。
所有的这些都可以通过GetMessage,SendMessage等函数得到。
⒍事件:
从它的字面意思我们就可以明白它的含义,如在程序运行的过程中改变窗口的大小或者移动窗口等,都会触发相应的“事件”。
⒎句柄:
单单一个“柄”字便可以解释它的意思了,我们天气热时摇扇子的时候只要抓住扇柄便可以控制整个扇子的运动了,在程序中也差不多是这个意思。
通常一个句柄就可以传递我们所要做的事情。
有经验的读者肯定清楚,编写程序总是要和各种句柄打交道的,句柄是系统用来标识不同对象类型的工具,如窗口、菜单等,这些东西在系统中被视为不同类型的对象,用不同的句柄将他们区分开来。
2.1.1VisualC++简介
VisualC++是一个功能强大的可视化软件开发工具。
自1993年Microsoft公司推出
VisualC++1.0后,随着其新版本的不断问世,VisualC++已成为专业程序员进行软件开发的首选工具。
VisualC++6.0不仅是一个C++编译器,而且是一个基于Windows操作系统的可视化集成开发环境(integrateddevelopmentenvironment,IDE)。
VisualC++6.0由许多组件组成,包括编辑器、调试器以及程序向导AppWizard、类向导ClassWizard等开发工具。
这些组件通过一个名为DeveloperStudio的组件集成为和谐的开发环境。
VisualC++它大概可以分成三个主要的部分:
1.DeveloperStudio,这是一个集成开发环境,我们日常工作的99%都是在它上面完成的,再加上它的标题赫然写着“MicrosoftVisualC++”,所以很多人理所当然的认为,那就是VisualC++了。
其实不然,虽然DeveloperStudio提供了一个很好的编辑器和很多Wizard,但实际上它没有任何编译和链接程序的功能,真正完成这些工作的幕后英雄后面会介绍。
我们也知道,DeveloperStudio并不是专门用于VC的,它也同样用于VB,VJ,VID等VisualStudio家族的其他同胞兄弟。
所以不要把DeveloperStudio当成VisualC++,它充其量只是VisualC++的一个壳子而已。
2.MFC。
从理论上来讲,MFC也不是专用于VisualC++,BorlandC++,C++Builder和SymantecC++同样可以处理MFC。
同时,用VisualC++编写代码也并不意味着一定要用MFC,只要愿意,用VisualC++来编写SDK程序,或者使用STL,ATL,一样没有限制。
不过,VisualC++本来就是为MFC打造的,VisualC++中的许多特征和语言扩展也是为MFC而设计
的,所以用VisualC++而不用MFC就等于抛弃了VisualC++中很大的一部分功能。
但是,VisualC++也不等于MFC。
3.PlatformSDK。
这才是VisualC++和整个VisualStudio的精华和灵魂,虽然我们很少能直接接触到它。
大致说来,PlatformSDK是以MicrosoftC/C++编译器为核心,配合MASM,辅以其他一些工具和文档资料。
上面说到DeveloperStudio没有编译程序的功能,那么这项工作是由谁来完成的呢?
是CL,是NMAKE,和其他许许多多命令行程序,这些我们看不到的程序才是构成VisualStudio的基石。
2.1.2VisualC++数字图像编程基础
一幅图像定义为一个二维函数f(x,y),这里x和y是空间坐标,在任何一对空间坐标(x,y)上的幅值f称为该点图像的强度或灰度。
当幅值f为有限的、离散的数值时,称该图像为数字图像。
数字图像由有限的元素组成,每个元素都有一个特定的位置和幅值,这些元素称为像素(图像元素或画面元素)。
数字图像从数学的角度其实就是一个二维矩阵,因此数字图像处理本质上就是矩阵运算.
通常所说的数字图像处理是指计算机对图像信息的处理。
总的来说,数字图像处理包括以下几项内容:
点运算,几何处理,图像增强,图像复原,图像形态学处理,图像编码,图像重建,模式识别等。
点运算:
主要针对图像的像素进行加减乘除等运算。
图像的点运算可以有效的改变图像的直方图分布。
几何处理:
主要包括图像的坐标转换,图像的移动、缩小、放大和旋转,多个图像的配准以及图像扭曲校正等。
几何处理是最常见的图像处理手段。
图像增强和图像复原:
影响系统图像清晰程度的因素很多,例如室外光照度不够均匀就会造成图像灰度过于集中;由CCD(摄像头)获得的图像经过A/D(数/模转换,该功能在图像系统中由数字采集卡来实现)转换、线路传送都会产生噪声污染等等。
因此图像质量不可避免的降低了,轻者表现为图像不干净,难于看清细节;重者表现为图像模糊不清,连概貌也看不出来。
因此,在对图像进行分析之前,必须要对图像质量进行改善,一般情况下改善的方法有两类:
图像增强和图像复原。
图像增强不考虑图像质量下降的原因,只将图像中感兴趣的特征有选择的突出,而衰减不需要的特征,它的目的主要是提高图像的可懂度。
图像增强的方法分为空域法和频域法两类,空域法主要是对图像中的各个像素点进行操作;而频域法是在图像的某个变换域内,对图像进行操作,修改变换后的系数,例如傅里叶变换、DCT变换等的系数,然后再进行反变换得到处理后的图像。
图像复原技术与增强技术不同,它需要了解图像质量下降的原因,首先要建立"降质模型",再利用该模型,恢复原始图像。
图像压缩(图像编码):
图像压缩是指以较少的比特有损或无损地表示原来的像素矩阵的技术,也称图像编码。
图像数据之所以能被压缩,就是因为数据中存在着冗余。
图像数据的冗余主要表现为:
图像中相邻像素间的相关性引起的空间冗余;图像序列中不同帧之间存在相关性引起的时间冗余;不同彩色平面或频谱带的相关性引起的频谱冗余。
数据压缩的目的就是通过去除这些数据冗余来减少表示数据所需的比特数。
由于图像数据量的庞大,在存储、传输、处理时非常困难,因此图像数据的压缩就显得非常重要。
模式识别:
模式识别是指对表征事物或现象的各种形式的信息进行处理和分析,以对事物或现象进行描述、辨认、分类和解释的过程。
它是信息科学和人工智能的重要组成部分,主要应用领域是图像分析与处理、语音识别、声音分类、通信、计算机辅助诊断、数据挖掘等学科。
图像重建:
指通过对离散图像进行线性空间内插或线性空间滤波来重新获得连续图像的方法。
2.2开发平台
1)硬件平台:
PC一台
2)系统平台:
Windows2000或者WindowsXP操作系统
3)开发环境:
MicrosoftVisualC++6.0
第三章数字图像处理典型算法
3.1BMP图像简介
BMP是一种与硬件设备无关的图像文件格式,使用非常广。
它采用位映射存储格式,除了图像深度可选以外,不采用其他任何压缩,因此,BMP文件所占用的空间很大。
BMP文件的图像深度可选1bit、4bit、8bit及24bit。
BMP文件存储数据时,图像的扫描方式是按从左到右、从下到上的顺序。
由于BMP文件格式是Windows环境中交换图像数据的一种标准,因此在Windows环境中运行的图形图像软件都支持BMP图像格式。
典型的BMP图像文件由三部分组成:
位图文件头数据结构,它包含BMP图像文件的类型、显示内容等信息;位图信息数据结构,它包含有BMP图像的宽、高、压缩方法,以及定义颜色等信息。
在BMP位图中,位图每行的灰度值要填充到一个四字节边界,即位图每行所占的存储长度为四字节的倍数,不足时将多余位用0填充。
本文所研究的芯片图片格式是BMP24bit图像深度。
3.2边缘检测原理
所谓边缘是指其周围像素灰度急剧变化的那些象素的集合,它是图像最基本的特征。
边缘存在于目标、背景和区域之间,所以,它是图像分割所依赖的最重要的依据。
由于边缘是位置的标志,对灰度的变化不敏感,因此,边缘也是图像匹配的重要特征。
两个具有不同灰度值的相邻区域之间总存在边缘,边缘是灰度值不连续的表现。
常见的边缘点有:
阶梯型边缘(Step-edge),即从一个灰度(或线性灰度)到达比它高(或低)很多的另一个灰度;屋顶型边缘(Roof-edge),它的灰度是慢慢增加(减少)到一定程度然后慢慢减小(增加);线性边缘(Line-edge),它是灰度线性变换中出现的灰度脉冲。
在计算机视觉和图像处理过程中,边缘检测是捕获图像中物体的重要特征的过程。
这些特征包括物体光学度、几何、物理等的不连续性。
在灰度图像中,这些信息产生了灰度的变化,这些变化包括不连续性和极大值。
边缘检测的目的就是定位这些变化和鉴别产生变化的物理现象。
边缘检测的结果提供了图像的重要特征。
许多边缘检测操作都是基于亮度的一阶导数——这样就得到了原始数据亮度的梯度。
使用这个信息我们能够在图像的亮度梯度中搜寻峰值。
如果I(x)表示点x的亮度,I′(x)表示点x的一阶导数(亮度梯度),这样我们就会发现:
对于更高性能的图像处理来说,一阶导数能够通过带有掩码的原始数据(1维)卷积计算得到。
其它一些边缘检测操作是基于亮度的二阶导数。
这实质上是亮度梯度的变化率。
在理想的连续变化情况下,在二阶导数中检测零点将得到梯度中的局部最大值。
另
一方面,二阶导数中的峰值检测是边线检测,只要图像操作使用一个合适的尺度表示。
如上所述,边线是双重边缘,这样我们就可以在边线的一边看到一个亮度梯度,而在另一边看到相反的梯度。
这样如果图像中有边线出现的话我们就能在亮度梯度上看到
非常大的变化。
为了找到这些边线,我们可以在图像亮度梯度的二阶导数中寻找过零点。
如果I(x)表示点x的亮度,I′′(x)表示点x亮度的二阶导数,那么同样许多算法也使用卷积掩码快速处理图像数据。
一旦我们计算出导数之后,下一步要做的就是给出一个阈值来确定哪里是边缘位置。
阈值越低,能够检测出的边线越多,结果也就越容易受到图片噪声的影响,并且越容易从图像中挑出不相关的特性。
与此相反,一个高的阈值将会遗失细的或者短的线段。
一个常用的这种方法是带有滞后作用的阈值选择。
这个方法使用不同的阈值去寻找边缘。
首先使用一个阈值上限去寻找边线开始的地方。
一旦找到了一个开始点,我们在图像上逐点跟踪边缘路径,当大于门槛下限时一直纪录边缘位置,直到数值小于下限之后才停止纪录。
这种方法假设边缘是连续的界线,并且我们能够跟踪前面所看到的边缘的模糊部分,而不会将图像中的噪声点标记为边缘。
3.3四种典型边缘检测算子
如果一个像素落在图像中某一个物体的边界上,那么它的邻域将成为一个灰度级变化的带。
对这种变化最有用的两个特征是灰度的变化率和方向,它们分别以梯度向量的幅度和方向来表示。
边缘检测算子检查每个像素的邻域井并对灰度变化率进行量化,通常也包括方向的确定.有若干种方法可以使用,其中大多数是基于方向导数掩模求卷积的方法。
3.3.1Roberts边缘检测算子
Roberts边缘检测算子是一种利用局部差分算子寻找边缘的算子,Robert算子图像处理后结果边缘不是很平滑。
经分析,由于Robert算子通常会在图像边缘附近的区域内产生较宽的响应,故采用上述算子检测的边缘图像常需做细化处理,边缘定位的精度不是很高。
它由公式(3.1)给出:
g(x,y)={[
]2
+[
]2}
(3.1)
其中f(x,y)是具有整数像素坐标的输入图像。
其中的平方根运算使该处理类似于人类视觉系统中发生的过程。
3.3.2Sobel边缘检测算子
索贝尔算子(Sobeloperator)是图像处理中的算子之一,主要用作边缘检测。
在技术上,它是一离散性差分算子,用来运算图