毕业设计(论文)-图像目标提取算法及其硬件实现.doc_第1页
毕业设计(论文)-图像目标提取算法及其硬件实现.doc_第2页
毕业设计(论文)-图像目标提取算法及其硬件实现.doc_第3页
毕业设计(论文)-图像目标提取算法及其硬件实现.doc_第4页
毕业设计(论文)-图像目标提取算法及其硬件实现.doc_第5页
已阅读5页,还剩31页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

河北大学工商学院2010届本科生毕业论文(设计)图像目标提取算法及其硬件实现摘要边缘是图像最基本的特征,因此,边缘检测是图像处理中非常重要的内容。本文首先介绍了几种经典的目前被广泛使用的图像边缘检测算子,比如:罗伯特(roberts)边缘算子、prewitt边缘算子和索贝尔(sobel)边缘算子等。这些算法的核心思想是假设边缘点对应于原始图像灰度级梯度的局部极值点。然后在 matlab环境下对这些算子进行编程实现。但是,有些图像包含有噪声,这些算法对噪声非常敏感,常常会把噪声当作边缘点检测出来,而真正的边缘由于噪声的干扰也很有可能被漏检。其次,文章介绍了图像分割技术,其核心思想是:为了辨识和分析目标,需要将有关区域分离提取出来,并对目标进一步加以利用。在此基础上,利用这些算子对图像进行了边缘检测,总结出了各种边缘检测算法的优缺点,针对不同的图像找到相对比较有效的边缘检测算法,进而大幅度地减少了数据量,保留了图像重要的结构属性。本文还介绍了如何用硬件对图像进行边缘检测,并与用matlab得到的边缘检测仿真结果进行了对比,证明了用硬件实现图像边缘检测的可行性。关键词:边缘检测;图像分割;目标提取image object extraction algorithm and hardware implementationabstractedge is the most basic features of the image,therefore,,edge detection is very important in image processing content. this paper describes several classical and widely used in image edge detection operator,for example,robert edge operator,prewitt and sobel edge operator,etc.the core idea of these algorithms is the assumption that the edge points corresponding to the original image gray level gradient of the local extreme point. then in the matlab environment of these operators for programming.however, some images contain noise,these algorithms are very sensitive to noise, the noise will often be detected as edge points, while the real edge due to noise is also likely to be missed. secondly, the article introduces the image segmentation technique, its core idea is: to identify and analyze the goals, the need to extract the isolated region, and the goal of further use. on this basis, the use of these operators on the image edge detection, summed up the advantages and disadvantages of various edge detection algorithms for different images found relatively more effective edge detection algorithm, thus significantly reducing the amount of data, important to retain the structural properties of the image. this article also describes how to use the hardware of the image edge detection, and with the edge detection using matlab simulation results obtained were compared to that of a hardware implementation of edge detection is feasible.key words: edge detection; image segmentation; object extraction目录abstract21引言12边缘检测22.1边缘属性22.2导数的计算22.3边缘检测模板22.4小结33图像分割43.1hough变换43.2阈值法63.2.1迭代法63.2.2otsu法73.2.3一维最大熵法73.2.4二维最大熵法73.2.5简单统计法83.3特征空间聚类法93.3.1k-均值聚类法93.3.2isodata聚类法原理103.4松弛迭代法113.5小结124matlab对边缘检测算法的实现134.1模板算子法134.1.1罗伯特算子134.1.2prewitt算子144.1.3sobel算子154.1.4拉普拉斯算子164.2高斯算子174.3canny算子184.4几种改进的边缘检测算子194.4.1形态学边缘检测194.4.2小波变换边缘检测204.4.3金字塔方法214.5小结225边缘检测算法的硬件实现245.1sobel边缘检测算法245.2sobel边缘检测的硬件实现255.2.1图像数据缓冲模块265.2.2梯度计算模块265.2.3仿真结果285.3小结296结束语30321引言所谓边缘是指其周围像素灰度急剧变化的那些像素的集合,它是图像最基本的特征。边缘存在于目标、背景和区域之间,所以,它是图像分割所依赖的最重要的依据。由于边缘是位置的标志,对灰度的变化不敏感,因此,边缘也是图像匹配的重要特征。边缘检测是图像处理和计算机视觉中的基本问题,图像属性中的显著变化通常反映了属性的重要事件和变化,这些包括:深度上的不连续,表面方向不连续,物质属性变化和场景照明变化。它们在图像中表现为亮度变化明显的点。边缘检测的目的就是标识这些像素点,它是图像识别的基础和前提,是图像分割的一部分。它大幅度地减少了数据量,并剔除了可以认为不相关的信息,保留了图像重要的结构属性。因此,边缘检测在数字图像处理中有重要地位。边缘检测就是找到图像中边缘像素点的过程,从而生成一幅边缘图。一般来说,边缘检测分为3:(1) 基于各种原理和方法找到潜在边缘点;(2) 选取阈值,生成二值边缘图;(3) 有些算法还要进行边缘细化、连接等后续处理。2边缘检测2.1边缘属性边缘可能会随着视角的不同而变化,这通常反映在场景、物体的形状上;边缘也可能与视角无关,这通常反映在被观察物体的表面纹理和表面形状上。比如,一个典型的边界可能是一块黄色和一块红色之间的边界;与此相反的边界可能是在一种不变的背景上的一些不同颜色的点。在边线的每一边都会有一个边缘,在许多图像处理的实际应用中边缘都起着非常重要的作用。在自然界中,许多图像的的边缘并不是人们理想的阶梯边缘。相反,它会受到许多因素的影响。比如有限场景深度带来的聚焦模糊;光滑物体边缘的阴影;非半径光源产生的阴影带来的半影模糊等。误差函数经被用于实际应用中的边模糊效果的建模中。2.2导数的计算经典的边缘检测是以原始图像为基础,对图像的各个像素考察它的某个领域内灰度阶跃变化,利用边缘临近一阶或二阶方向导数变化规律检测边缘。边缘检测的基本思想是通过检测每个像元和其邻域的状态,以决定该像元是否位于一个物体的边界上。在一阶导数中,边缘点表现为一个局部极值点,许多边缘检测操作都是基于亮度的一阶导数这样就可以得到原始数据亮度的梯度。而在二阶导数中,表现为一个过零点,它实质上是亮度梯度的变化率,当图像在理想的连续变化的情况下时,通过在二阶导数中检测过零点将会得到梯度中的局部最大值。由此可知,图像中目标的边缘可通过求取它们的导数来确定。导数可用微分算子来计算,而数字图像中求导数是利用差分近似微分来进行的。2.3边缘检测模板边缘检测和区域划分是图像分割技术的两种不同的方法,二者具有互补的特点。在边缘检测中,提取的是图像中不连续部分的特征,根据闭合的边缘来确定区域。而在区域划分中,是把图像分割成特征相同的区域,区域之间的边界就是边缘。此外,由于边缘检测方法不需要将图像逐个像素地分割,因此更适合大图像的分割。边缘大致可以分为两种,一种是阶跃状边缘,这种边缘两边像素的灰度值明显不同;另一种为屋顶状边缘,其边缘处于灰度值由小到大再由大到小的变化转折点处。边缘检测的工具主要是边缘检测模板。现在,我们用一个一维模板为例来说明边缘检测模板是如何作用的。现在假设一个模板为,还有一副图像为,从中可以看出,这幅图像的左边暗,右边亮,图像中间存在着一条明显的边缘,这是一个典型的阶跃状边缘,在使用模板对其进行模板处理之后,结果变成:。这样,我们就可以清楚地看出,进行边缘检测后的图像在原图像边缘处的灰度值要高了一些,在观察时就可以发现一条很明显的亮边,而其他区域都很暗,这就是所谓的边缘检测的效果。模板的作用是用右边邻点的灰度值减去左边邻点的灰度值,得到的结果作为该点的灰度值。这样做的结果是使在灰度值相近的区域内的点的灰度值接近于0,而在图像的边缘附近,灰度值将会有明显的跳变,使得边缘处的点的灰度值很大,这就出现了上面边缘检测的结果。2.4小结边缘是图像最基本的特征,因此,边缘检测是图像处理中非常重要的内容。边缘检测算法的核心思想就是假设边缘点对应于原始图像灰度级梯度的局部极值点。边缘检测模板就是一种边缘检测器,而且它在数学上的涵义是一种基于梯度的滤波器,我们习惯上又把它称为边缘检测算子。梯度是有方向的,并且和边缘的方向是垂直的。比如模板-1 0 1是水平方向的,和上节那幅图像的边缘正好是垂直的,所以用这个模板就可以将这幅图像的边缘检测出来。3图像分割图像分割就是指把图像分成各具特性的区域并提取出感兴趣目标的技术和过程。我们在对图像的研究和应用中,往往只是对图像中的某些部分感兴趣,我们把这些部分一般称为目标或前景。为了识别并对目标进行分析,我们需要将有关区域分离提取出来,再次基础上再对目标加以利用,比如进行特征提取和测量。边缘检测是图像分割的一部分,在上一章中已经作了详细的介绍,本章所要介绍的是图像分割的其他算法。3.1hough变换hough变换是图像处理中从图像中识别几何形状的基本方法之一。hough变换的基本原理在于利用点与线的对偶性,它将原始图像空间中给定的曲线用过表达形式变为参数空间中的一个点。这样,就把原始图像中给定曲线的检测问题转化为寻找参数空间中的峰值问题,也就是把检测整体特性转化为检测局部特性,比如直线、椭圆、圆、弧线等。在图像空间中的任意一点(x,y)经过点-正弦曲线对偶的hough变换为: (3.1)这样就在参数空间中变为了一条正弦曲线,其中取。我们可以证明,图像空间x-y中直线上的点,在经过hough变换后,它们的正弦曲线在参数空间中有一个公共交点。这也就是说,参数空间中的一点,对应于图像空间x-y中的一条直线,并且它们是一一对应的。所以,为了检测出图像空间中由点所构成的直线,可以将参数空间量化为许多小格。根据图像空间中每个点的坐标(x,y),在内以小格的步长计算各个值,所得的值落在某个小格内,便使该小格的累加计算器加1。当图像空间中全部的点都变换后,对小格进行检验,计数值最大的小格,其值对应于图像空间中所求的直线。参数空间中,、与图像空间中直线的斜率和截距的关系为: , (3.2)图3.11hough变换原图图3.12hough变换映射图像图3.13hough反变换图像如以上三图所示,图3.12为经过灰度级拉伸后的hough变换映射图像,最亮的4个点代表原图中的4条直线。图3.13为根据图3.12进行hough反变换后得到的图像。通过与原图像的比较可以看出,4条直线不仅能够检测出来,而且它们的位置也准确无误地呈现出来。3.2阈值法阈值分割法是一种在区域基础上创建的图像分割技术,它的基本原理是:通过设定不同的特征阈值,把图像像素点分为若干类。设原始图像为,按照一定的准则在该图像中找到特征值,将图像分割为两个部分,分割后的图像为: (3.3)如果取为黑,为白,则为图像的二值化。阈值分割法是一种最常用也是最简单的图像分割方法,它特别适用于目标和背景占据不同灰度级范围的图像。阈值分割法一般分为人工选择法和自动选择法。人工法就是结合直方图人为地选择阈值。在本节中,将会主要介绍自动阈值选择法,其中包括:迭代法、otsu法、一维最大熵法、二维最大熵法、简单统计法。3.2.1迭代法迭代法的基本思想是:开始时选择一个阈值作为初始估计值,然后按照某种策略通过迭代不断地改变这一估计值,直到满足给定的准则为止,这种方法的具体步骤如下:(1) 在一幅灰度范围为0,l-1的图像中,选择图像灰度的中值作为初始阈值,其中图像中对应灰度级的像素数为。(2) 利用阈值把图像分割成两个区域:和,其平均灰度值和可以由下列式子计算。 , (3.4)(3) 计算出和后,用下式计算出新的阈值。 (3.5)(4) 对步骤(2)(3)进行重复,直到和的差小于某个给定值为止。3.2.2otsu法otsu法是一种使类间方差最大的阈值确定方法,所以也称为最大类间方差法。这种方法具有简单、处理速度快等特点,是一种常用的阈值选取方法。它的基本思想是:把图像中的像素按照灰度值用阈值分成两类和,由灰度值在0,t之间的像素组成,由灰度值在t+1,l-1之间的像素组成,两类之间的类间方差可由下式计算得出: (3.6)上式中,为中包含的像素数,为中包含的像素数,是中所有像素的平均灰度值,是中所有像素的平均灰度值。令在0,l-1范围内依次取值,使最大的值就是otsu法的最佳阈值。3.2.3一维最大熵法熵是平均信息量的表征。将信息熵的概念应用于图像阈值分割的基本思想是:利用图像的灰度分布密度函数定义图像的信息熵,根据假设的不同或视角的不同提出不同的熵准则,最后通过优化该准则得到阈值。其中一维最大熵求阈值的方法如下。在一幅灰度范围为0,l-1的图像中,熵函数的定义为: (3.7)式中, 为灰度级出现的概率。当熵函数取得最大值时,对应的灰度值就是所求的最佳阈值。3.2.4二维最大熵法由于灰度一维最大熵是基于图像原始直方图的,它仅仅利用了点灰度信息而未充分利用图像的空间信息,而二维最大熵综合利用了点灰度特征和区域灰度特征,从而较好地表征了图像的信息。它的基本方法是:以原始灰度图像(个灰度级)中各像素及其4邻域的4个像素为一个区域,计算出区域灰度均值图像,这样原始图像中的每一个像素都对应于一个点灰度-区域灰度均值对。设为图像中点灰度为及其区域灰度均值为的像素点数,为点灰度-区域灰度均值对发生的概率,则: (3.8)其中n为图像的大小。则二维最大熵的判别函数为: (3.9)使为最大的阈值和即为所求阈值。其中: 3.2.5简单统计法简单统计法是一种基于简单的图像统计的阈值选取方法。使用该方法,能直接计算一幅图像为的阈值。该方法的计算公式为: (3.10)其中,得到的阈值分割结果如图3.21所示:图3.21otsu法阈值分割结果3.3特征空间聚类法特征空间聚类法即根据某些特征将目标点划分到相应的类别中,这种方法是一种比较简单有效的图像分割方法。典型的特征空间聚类方法有:k-均值聚类法、isodata法、模糊c-均值法等。下面主要介绍前两种方法。3.3.1k-均值聚类法k-均值聚类法可以将一幅图像分割成k个区域。设代表数字图像像素的坐标,代表像素的灰度,则k-均值法的最小化指标为: (3.11)式中:表示图像中有个区域,表示在第次迭代后图像中第个区域,表示此迭代后第个区域的平均值。上式给出了每个像素与其对应区域均值的距离和。k-均值聚类法的具体步骤如下。(1)任意选个初始类均值,、。(2)在第次迭代时,根据以下所述的距离准则将每个像素都赋给类(区域)之一:若即将每个像素赋给均值离它最近的类。(3)对每个类,更新该类的均值: (3.12)式中,是更新后的类中的像素个数。(5) 如果对所有的类,有,则算法收敛,结束;否则退回步骤(2)继续下一迭代。3.3.2isodata聚类法原理isodata聚类方法是在k-均值算法上发展起来的,它是在没有先验知识的情况下进行的一种无监督分类。首先,它选择若干样本作为聚类中心,再按照某种聚类准则,使其余样本归入最近的聚类中心,得到初始聚类;然后判断初始聚类结果是否合理,若不合理则按照特定规则将聚类集合进行分裂或合并,以获得新的聚类中心,再判断聚类结果是否符合要求。如此反复迭代,直到聚类划分符合要求为止。为了简化程序,本节选择的初始聚类数目远远大于预期聚类数目,因此只需要考虑合并聚类,而不会出现分裂聚类这种情况。具体的步骤如下:(1)设置初始聚类数目 为预期聚类数目 的两倍,并任意选取个初始聚类的均值;(2)求各个样本到所有聚类中心的距离,按照与聚类中心距离最小的原则将各样本归入最近的聚类;(3)更新各聚类均值;如果某聚类内的样本数目为零,并使聚类数目;(4)计算全部聚类均值之间的距离,找到其最小距离。设聚类 和聚类 之间的距离最小,则将两个类合并,合并后的聚类均值为: (3.13)式中,、和分别为合并前聚类和聚类的均值,及其合并后聚类的均值,和为聚类和聚类内的样本数目。合并后聚类的样本数目为和之和,此时聚类数目;(5)如果不大于,则结束;否则退回步骤(2)继续下一次迭代。特征空间聚类法结果如图3.31所示:图3.31特征空间聚类法结果3.4松弛迭代法松弛迭代分割法是以像素为操作对象,借助迭代逐步确定各像素的归类。每次迭代中,需要用到称为相容性的准则。它的基本思想是图像中每一个像素的归属不仅应该由其本身来决定,而且应该受到它的邻域像素的影响。松弛迭代分割法可以用以下3个步骤来完成。(1) 随机初始化标记。设图像的大小为,像素为 ,用阈值法将图像分为个类,第类的均值和方差分别为和。因为像素点和第类的马氏距离为: (3.14)则初始概率为: (3.15)(2) 规则更新。对于类和类,相容性矩阵定义为: (3.16)如果用表示类对点的相容性因素,用表示点的邻域,则: (3.17)当只考察8点邻域时,则。在第步的概率矢量可用下式计算: (3.18)(3) 迭代终止。松弛迭代是一种像素标记方法,所以可设定一个量(如百分比)来确定迭代是否达到预期目标,并在达到时认为迭代收敛,终止算法。松弛迭代分割图像结果如图3.41所示:图3.41松弛迭代法结果3.5小结图像分割是从图像处理到图像分析的关键步骤,可以说,图像分割结果的好坏直接影响着对图像的理解。因此,它是一种重要的图像技术,在理论研究和实际应用中都得到了人们的广泛重视。4matlab对边缘检测算法的实现在第二章中,我们已经介绍了一些关于边缘检测的基本概念,使大家对于图像进行边缘检测的方法有了一些了解。在本章中,将会重点介绍如何用matlab软件对图像进行边缘检测,并对不同的算子产生的不同效果进行比较。原始图像如图4.01所示:图4.01原始图像将原始图像保存在matlabwork文件夹下,并将图像命名为123,格式为bmp。4.1模板算子法一阶导数模板算子最常用的方法有罗伯特(roberts)算子法、索贝尔(sobel)算子法和prewitt算子法。二阶导数方法就是拉普拉斯算子法。经过拉普拉斯算子卷积以后的图像,还要判断出它的零交叉点,也就是边缘点。在实际应用中,一方面是因为拉普拉斯算子对图像噪声十分敏感,另一方面就是边缘是双像素宽的,且不能提取边缘方向信息,因此它很少直接用于边缘检测,而是与其他方法相结合,提取出定位精确的边缘,该方法就是kirsch算子法。4.1.1 罗伯特算子罗伯特(roberts)算子的模板如下: matlab程序如下:i=imread(123.bmp); %自己输入图片路径,图片名为123,格式为bmpgryim=rgb2gray(i); %改变图像的灰度,如果是灰度图,则直接删掉这条语句r=0 1;-1 0;%输入罗伯特算子的模板bw=edge(gryim,r,0.04);%对灰度图进行边缘检测,算子后的阈值参数可以改变subplot(2,2,1);imshow(i);title(原始图像);%输出原始图像subplot(2,2,2);imshow(bw);title(边缘检测结果);%输出边缘检测图像用罗伯特算子法进行边缘检测的结果如图4.02所示:图4.02 roberts边缘图像4.1.2 prewitt算子prewitt算子的模板如下: matlab程序如下:i=imread(123.bmp); %自己输入图片路径,图片名为123,格式为bmpgryim=rgb2gray(i); %改变图像的灰度,如果是灰度图,则直接删掉这条语句p=-1 0 1;-1 0 1;-1 0 1;%输入prewitt算子的模板bw=edge(gryim,p,0.14);%对灰度图进行边缘检测,算子后的阈值参数可以改变subplot(2,2,1);imshow(i);title(原始图像);%输出原始图像subplot(2,2,2);imshow(bw);title(边缘检测结果);%输出边缘检测图像用prewitt算子法进行的边缘检测结果如图4.03所示:图4.03 prewitt边缘图像4.1.3 sobel算子sobel算子的模板如下: matlab程序如下:i=imread(123.bmp); %自己输入图片路径,图片名为123,格式为bmpgryim=rgb2gray(i); %改变图像的灰度,如果是灰度图,则直接删掉这条语句s=-1 0 1;-2 0 2;-1 0 1;%输入sobel算子的模板bw=edge(gryim,s,0.2);%对灰度图进行边缘检测,算子后的阈值参数可以改变subplot(2,2,1);imshow(i);title(原始图像);%输出原始图像subplot(2,2,2);imshow(bw);title(边缘检测结果);%输出边缘检测图像用sobel算子法进行的边缘检测结果如图4.04所示: 图4.04 sobel边缘图像4.1.4 拉普拉斯算子拉普拉斯算子是无方向算子,因此它只需要一个模板,下面是三个经常用到的拉普拉斯模板:(1)(2)(3)matlab程序如下:i=imread(123.bmp); %自己输入图片路径,图片名为123,格式为bmpgryim=rgb2gray(i); %改变图像的灰度,如果是灰度图,则直接删掉这条语句l= 0 1 0;1 -4 1;0 1 0;;%输入拉普拉斯算子的模板bw=edge(gryim,l,0.004);%对灰度图进行边缘检测,算子后的阈值可以改变subplot(2,2,1);imshow(i);title(原始图像);%输出原始图像subplot(2,2,2);imshow(bw);title(边缘检测结果);%输出边缘检测图像用拉普拉斯算子法进行的边缘检测结果如图4.05所示:图4.05 拉普拉斯边缘图像4.2高斯算子从拉普拉斯边缘图像中可以看出,拉普拉斯算子对图像噪声比较敏感。为了减少噪声的影响,可以用高斯函数对图像先进行平滑卷积滤波处理,然后再运用拉普拉斯算子。高斯滤波器可定义为如下形式: (4.1)这种将高斯卷积和拉普拉斯算子组合成一个滤波器或算子的方法称为拉普拉斯-高斯(log)滤波器或算子,其脉冲响应函数为: (4.2)log滤波器可表示成两个高斯函数之差,因此也可以用差分高斯(dog)算子对图像进行边缘检测,该滤波器定义为如下形式: (4.3)其中,两个高斯函数的均方差为。无论是log还是dog,为了不改变卷积后图像的整体动态范围,还要使模板元素的代数和为零。卷积处理后,仍然要用上一节给出的方法得到零交叉边缘点。log算子的模板如下:matlab程序如下:i=imread(123.bmp); %自己输入图片路径,图片名为123,格式为bmpgryim=rgb2gray(i); %改变图像的灰度,如果是灰度图,则直接删掉这条语句bw=edge(gryim,log,0.005);%对灰度图进行边缘检测,算子后的阈值可以改变subplot(2,2,1);imshow(i);title(原始图像);%输出原始图像subplot(2,2,2);imshow(bw);title(边缘检测结果);%输出边缘检测图像用log算子法进行的边缘检测结果如图4.06所示:图4.06 log算子边缘检测结果4.3 canny算子canny算子是在边缘检测的3个指标(好的检测、好的定位、最小响应)和3个准则(信噪比准则、定位精度准则和单边缘响应准则)的基础上发展起来的一种很有效的边缘检测。canny边缘检测方法分为4步:(1) 用高斯滤波器对图像进行平滑处理。(2) 利用一阶偏导算子找到图像灰度沿着水平方向和垂直方向的偏导数,并按下列两个式子求出梯度的幅值和方位。在程序中,我们选择性能较好的sobel算子。 (4.4) (4.5)(3) 对梯度幅值进行非极大值抑制,即找到局部梯度最大点。方法是在33的邻域窗内,给定像素p与沿着梯度线方向的两个像素相比,如果p的梯度幅值不比这两个像素的梯度幅值大,则令p=0,否则保留原幅值。(4) 用双阈值算法检测和连接边缘。方法是凡大于高阈值的一定是边缘;凡小于低阈值的一定不是边缘;如果检测结果大于低阈值而又小于高阈值,则要看这个像素的邻接像素中是否有大于高阈值的边缘像素,如果有,则是边缘,否则不是。这往往是一个迭代的过程。matlab程序如下:i=imread(123.bmp); %自己输入图片路径,图片名为123,格式为bmpgryim=rgb2gray(i); %改变图像的灰度,如果是灰度图,则直接删掉这条语句bw=edge(gryim,canny,0.005);%对灰度图进行边缘检测,算子后的阈值可以改变subplot(2,2,1);imshow(i);title(原始图像);%输出原始图像subplot(2,2,2);imshow(bw);title(边缘检测结果);%输出边缘检测图像用canny算子法进行的边缘检测结果如图4.07所示:图4.07 canny算子边缘检测结果4.4 几种改进的边缘检测算子以上几节重点介绍了模板算子法、高斯算子法、canny算子法的边缘检测过程,这些边缘检测算子在我们对图像进行处理的过程中经常会遇到,是其他一些边缘检测算子的基础,下面我们再介绍几种改进的边缘检测算子,它们在图像的边缘检测中也起着重要作用。4.4.1 形态学边缘检测形态学边缘检测方法分为形态学梯度法和形态学拉普拉斯法两种,公式如下所示: (4.6) (4.7)形态学梯度法相当于一阶导数,形态学拉普拉斯法相当于二阶导数, 形态学边缘检测结果如图4.08所示:图4.08形态学边缘检测结果4.4.2 小波变换边缘检测对于某些特殊的小波函数,小波变换的极大值对应于图像中的边缘点。在图像中,设是一个平滑函数,令: (4.8)那么,和可以作为小波函数。在尺度下的小波变换是: (4.9)由于二维小波变换的两个分量和分别正比于图像经平滑后的沿水平和垂直方向的偏导数,所以,二维小波变换矢量就是梯度。当取为高斯函数时,它与canny算子在同一尺度下是等价的。剩下的部分与canny算子也是一样的,只需要沿着梯度方向检测小波变换系数模的局部极大值点,即可得到图像的边缘点。小波函数的种类很多,也可以自己构造,但用于边缘检测的小波应满足一些条件。在这里,我们选择二次样条小波函数,它的低通滤波系数h(n)和高通滤波系数g(n)如下表所示:n-1012h(n)0.1250.3750.3750.125g(n)-22通过对小波函数尺度选取的不同,得到的边缘和抑制噪声的能力会有所不同。在尺度下,它所对应的滤波器和分别表示在和的相邻系数之间插入个零而得到的离散滤波器。在具体的编程实现中,用高斯滤波器对图像进行卷积得到边缘图像,用低通滤波器对图像进行卷积得到下一个尺度所需要的平滑图像。小波变换边缘检测结果如图4.09所示:图4.09 小波变换边缘检测结果4.4.3金字塔方法金字塔方法是多分辨率图像处理的一个最基本的方法,小波变换的多分辨率分析就是在高斯-拉普拉斯金字塔方法的启发下提出来的。图像处理的金字塔方法是将原始图像分解成不同空间分辨率的子图像,高分辨率(尺度较大)的子图像放在下层,低分辨率(尺度较小)的图像放在上层,从而形成一个金字塔的形状,如图4.10所示:图4.10图像处理的金字塔模型高斯-拉普拉斯金字塔方法也可用于图像的边缘检测。它的基本原理是,先对图像进行高斯卷积,为高斯卷积核,下标表示的是金字塔的层数: (4.10)然后再求出两个图像之间的差值: (4.11)再对卷积后的图像进行隔行隔列采样,这样可以起到降低分辨率的作用: (4.12)这个过程我们称之为高斯塔分解,如图4.11所示:图4.11高斯塔分解模型然后由高斯塔重构拉普拉斯塔,这个过程就是高斯塔分解的逆过程。首先内插放大图像,然后再进行高斯卷积计算: (4.13)拉普拉斯重构过程如图4.12所示:图4.12拉普拉斯塔重构模型金字塔边缘检测结果如图4.13所示:图4.13金字塔边缘检测结果4.5小结以上小节列举了matlab对一些经典边缘检测算法的实现,其他算法的边缘检测程序和这些经典算法的程序类似,在这里不一一列举了。通过反复实验可以证明:罗伯特(roberts)边缘算子、索贝尔(sobel)边缘算子和prewitt 边缘算子对噪声较为敏感,它们只是进行简单的边缘检测,而不会对要处理的图像事先进行滤波,得到的往往是断续的、不完整的结构信息,为了能成功地检测到真正的边缘, 一般都要先对原图像进行平滑来去除图像中的噪声,再进行边缘检测。高斯拉普拉斯(laplacian of gaussian)边缘检测算子将高斯滤波和拉普拉斯边缘检测结合在一起,先对图像进行平滑和积分以滤掉噪声,消除噪声后再进行边缘检测(锐化和微分),得到的效果比较好,且实现容易。坎尼(canny)边缘算子提取的边缘线型连接程度也较好,边缘提取的也较完整,,但易受噪声影响,为了获得理想的边缘检测结果,必须与理想滤波器结合使用,实现起来比较复杂。边缘检测是图像分割的一部分,并且一直是图像处理中的热点研究问题。本章所介绍的这几种方法都是目前最常用的边缘检测方法。需要注意的是,没有一种边缘检测方法可以应用于所有的图像边缘提取中,只有根据具体情况,选择某种方法,才能得到最佳的效果。5边缘检测算法的硬件实现我们现在正处于数字化和信息化的时代,由于计算机技术和微电子工艺的发展,使现代数字系统的设计和应用进入到了一个新的阶段。因此,电子设计自动化(eda)技术在数字系统的设计和应用中起到了越来越重要的作用。目前,eda技术已经成为电子设计技术的强有力工具,如果没有eda技术的支持,要想完成超大规模集成电路的设计和制造是不可想象的。相反,由于生产制造技术的不断进步又对eda技术提出了更高的要求,以使其不断地向前发展!在上一章中,我们已经用matlab软件实现了对图像的边缘检测,而在实时的图像处理过程中,由于对处理的速度有较高的要求,这时候纯粹用软件的方法是很难达到预期要求的,所以在本章中,我们将要讨论如何用verilog硬件描述语言实现对图像的边缘检测。在经典的边缘检测算法中,sobel边缘检测算法由于其计算量小、实现简单、处理速度快,并且得到的边缘光滑、连续等优点而得到非常广泛的应用。下面我们将以sobel算子为例展开详细的介绍。5.1sobel边缘检测算法经典的sobel图像边缘检测法,在图像空间中是利用两个方向模板与图像进行邻域卷积来完成的,这两个方向模板一个是用来检测垂直边缘,一个是用来检测水平边缘的。sobel算法的优点是计算简单,速度快,这种算法的基本原理是:由于图像边缘附近的亮度变化较大,因此可以把那些在相邻的区域内,灰度值变化超过某个适当阈值t的像素点当作边缘点。但由于它只采用了两个方向模板算子,只能检测图像水平方向和垂直方向的边缘,所以,这种算法对于纹理比较复杂的图像,其边缘检测效果可能欠佳;同时,经典sobel算法也认为,凡灰度值大于或等于阈值的像素点都是边缘点。这种判定依据是不太合理的,这样会造成边缘点的误判,因为多噪声点的灰度新值也是很大的。图5.01所示的是sobel边缘检测法框图:图5.01 sobel边缘检测法框图从图5.01中可以看出,在对一幅图像进行sobel边缘检测的过程中,首先要利用sobel算子计算出图像的水平梯度和垂直梯度,再将这两个方向的梯度结合起来,最后利用门限处理模块对图像的边缘进行判断,最后输出图像的边缘检测结果。图5.02一幅图像的区域(z是灰度值)和sobel算子图5.02(a)为一副图像的33区域,图(b)和图(c)分别为sobel算子的x方向(垂直方向)梯度算子和y方向(水平方向)的梯度算子。当采用sobel算子对图5.02(a)所示的33区域做梯度计算时,可得到标记为z5的像素点x方向梯度和y方向的梯度分量分别为:梯度计算的公式为: (5.1)该设计在门限处理的时候,采用基本全局门限,即:当某像素点(x,y)的梯度值f(x,y)大于或等于设定门限t时,规定该点的灰度值为255,当小于设定门限t时则为0。表达式如下: (5.2)5.2sobel边缘检测的硬件实现实际对图像进行处理的过程中,用sobel算子对物体进行边缘检测是经常用到的方法,由于对处理的速度要求较高,因此用纯软件的方法很难达到实际要求。而fpga对这种可完成的处理任务几乎没有限制,非常适合高速、并行信号的处理,并且fpga容量大、密度高,有内置存储器,且容易实现,因此fpga被广泛应用于实时图像处理系统中。根据图5.01所示的框图中,可以知道在用硬件实现sobel边缘检测时应该包括门限处理模块和梯度计算模块。但是为了进一步对图像数据做模块处理,在硬件实现时还需要用到图像数据缓冲模块。5.2.1图像数据缓冲模块为了得到33的方形模板窗,在这里通过应用基于ram的移位寄存器宏模块altshift taps来实现此功能,而且还可以省去一些控制信号,使用起来非常方便。altshift_taps宏功能模块是一个可配置的、具有抽头(taps)输出的移位寄存器,每个抽头在移位寄存器链的指定位置输出数据。图5.03(a)和图5.03(b)所示的分别为特制的8位输入/8位输出、3抽头,且相邻两个抽头相距256个寄存器的altshift_taps0功能模块及其内部寄存器链结构图,图(b)中的buffer0,buffer1,buffer2分别为由256个8位移位寄存器构成的寄存器链。当图像的第n行数据在像素时钟同步下从shiftin7:0端输入到altshift_taps0的buffer0后,随着第n+1行图像数据输入到buffer0中,第n行的图像数据依次存入buffer1中,而当第n+2行图像数据存入buffer0后,buffer1和buffer2中分别存放的是第n+1行和第n行的图像数据,从而实现缓冲图像数据的功能。这样在像素时钟的同步下,第n+2,n+1,n行的同一列数据分别从tap0x7:0,tap1x7:0,tap2x7:0端输出给梯度计算模块,进行梯度计算。图5.03altshift_taps0功能模块及其内部寄存器机构图5.2.2梯度计算模块在sobel算子的边缘检测中,图像像素点的梯度计算可由sobel算子与图像像素做卷积运算的输出经过梯度计算公式的计算获得。为了实现卷积运算需要做乘法和加法运算,我们以两个4位二进制数x和y为例来编写加法器和乘法器的verilog程序:加法器程序如下:module add_4(x,y,sum,c);input3:0 x,y;output3:0 sum;output c;assign c,sum=x+y;endmodule乘法器程序如下:module mult_4(x,y,product)input3:0 x,y;output7:0 product;assign product=x*y;endmodule不同位数的加法器或乘法器只需改变位数即可。在fpga的库中存在着参数化的加法器和乘法器可以供设计者使用,设计者也可以通过自己编写代码并引用参数化的加法器或乘法器实例,来完成加法器和乘法器的设计。图5.04(左)为33的滤波模板,图5.04(右)为卷积运算的原理图。图5.04 33滤波模板和卷积运算原理图从图中也可以看出,为了实现卷积运算,乘法和加法的运算是必不可少的。在许多关于用硬件实现边缘检测的设计中,采用的都是分立的d触发器、乘法器和加法器。但是这样实现起来会十分复杂。所以,在这里,我们选择采用可编程乘加器altmult_add模块和可编程多路并行加法器parallel_add模块来实现卷积运算,这样就使得设计被大大简化了。可编程乘加器altmult_add可以接收多组数据的输入,各组数据相乘后再进行相加或相减作为结果输出。而且altmult_add在使用时可以根据设计的需要设置乘法器的个数、输入

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论