当前位置:文档之家› 图像边缘检测方法的比较

图像边缘检测方法的比较

课程大作业实验报告图像边缘检测方法的比较课程名称:数字图像处理指导教师报告提交日期2010年05月项目答辩日期2010年05月目录1、项目要求 (3)1.1、要求一 (3)1.2、要求二 (3)1.3、要求三 (3)2、项目开发的环境 (3)3、边缘检测的系统分析 (4)3.1、系统模块分析 (4)3.2、系统的关键问题以及解决方法 (4)4、系统设计 (5)4.1程序的流程图以及说明 (5)4、2程序的主要功能模块 (7)4.2.1 水平梯度算子模块 (7)4.2.2 垂直梯度算子模块 (8)4.2.3 水平垂直梯度算子模块 (8)4.2.4 罗伯茨算法模块 (9)4.2.5 Sobel模块 (10)4.2.6 Prewitt模块 (11)4.2.7 拉普拉斯边缘检测模块 (11)4.2.8 基于Kirsch算子的快速边缘检测模块 (11)4.2.9 Robinson算法模块 (12)4.2.10 高斯LOG模块 (13)4.2.11 梯度幅值自适应 (14)5.实验结果与分析 (14)5.1 实验结果和分析 (15)5.2 项目的创新之处 (19)5.3 存在问题及改进设想 (19)6.心得体会 (20)6.1 系统开发的体会 (20)6.2 对本门课程的改进意见或建议 (20)1 项目要求1.1 对以下方法编程实现:(1)水平梯度算子;(2)垂直梯度算子;(3)水平垂直梯度算子;(4)罗伯茨梯度算子;(5)拉普拉斯算子;(6)柯西算子;(7)Prewitt算子;(8)Sobel算子;(9)拓展:其他的边缘检测算法1.2 界面整合为菜单形式,在程序的主界面上显示每种方法的处理时间(利用C语言的时间函数,计算出处理时间)。

1.3 有好的PPT和电子文档。

2 项目开发的环境硬件部分:PC机软件部分:CVI5.0、IMAQ vision(Imaq_CVI.fp、Imaq_CVI.h、Imaq_CVI.lib)使用语言:C语言3 边缘检测的系统分析3.1 系统模块分析图像的边缘检测是计算机视觉和图像处理中重要的内容,广泛应用于目标识别与跟踪、机器人视觉、图像数据压缩等领域。

准确可靠的边缘检测方法对这些系统的整体性能起到至关重要的作用,因此边缘检测成为研究人员进行图像特征分析研究时最为关注的热门课题之一。

所谓边缘是一组相连的像素集合, 这些像素的周围像素灰度有强烈的反差,边缘检测实际上就是检测图像特征发生变化的位置。

本系统介绍了几种经典的边缘检测算子并进行了比较,同时阐述了新的边缘检测方法的原理。

分析结果表明,边缘检测是图像处理和计算机视觉领域内的一个基本问题,寻求较简单、能较好解决边缘检测精度与抗噪性能协调问题的算法,一直是图像处理与分析的研究重点。

根据项目要求,我们这个边缘检测系统一共是由8个基本边缘检测方法和3个拓展边缘检测方法组成。

由以下各个模块组成:打开图像模块(Load image)、保存文件模块(Save)、水平梯度算子模块(Edge_detect_parallel)、垂直梯度算子(Edge_detect_vertical)、水平垂直梯度算子模块(Edge_detect_ver_par)、罗伯茨算子模块(Edge_detect_Roberts)、Prewitt(Edge_detect_Prewitt)、Sobel边缘检测模块(Edge_detect_Sobel)、拉普拉斯边缘检测模块(Edge_detect_lapulasi)、基于Kirsch 算子的快速边缘检测方法--FKC算法模块(Edge_detect_Krisch)、Robinson算子的边缘检测模块(Edge_detect_Robinson)、高斯Laplace边缘检测模块(Edge_detect_log)和梯度幅值自适应边缘检测方法模块(Edge_detect_fun1)。

其中,Robinson算子、高斯Laplace 算子和梯度幅值自适应属于拓展的边缘检测方法。

3.2 系统的关键问题以及解决方法主要是对各种边缘检测方法的实现问题,在对后面几种拓展的边缘检测算子实现时,遇到了较多的问题,例如,处理时间较长,边缘检测后的图像边缘信息提取比较模糊等。

通过大量查找资料,咨询老师和小组团结协作,较好的将问题解决了。

4 系统设计4.1程序的流程图以及说明图1 功能流程图图2 程序流程图程序界面是以菜单的形式展现的,当载入一幅图像,选择一种边缘检测方法后,程序开始执行,提取边缘信息并显示其边缘图像,在程序的主界面上显示这种方法的处理时间。

4.2程序的主要功能模块及实现原理4.2.1 水平梯度算子模块(1)理论知识卷积可以简单的看成加权求和的过程。

卷积时使用的权用一个很小的矩阵来表示,矩阵的大小是奇数,而且与使用的区域的大小相同。

这种权矩阵叫做卷积核,区域中的每个像素分别与卷积核中的每个元素相乘,所有乘积之和即区域中心像素的新值。

(2)水平梯度算子对于数字图像而言,微分要用相邻像素之间的差分来代替,水平主要指的是x方向,垂直主要指的是y方向。

通过一个可以检测出水平方向上的像素值的变化模板来实现。

首先定义了Edge_detect_parallel(水平梯度)函数,再对各个参数进行定义(包括图像的高度、宽度等),for循环是对(x.y)为中心的3×3区域的各点灰度值进行处理,IPI_GetPixelValue()是获取图像像数的灰度值,sum=sum+gray_value*array[m]是灰度值与水平梯度算子相乘再相加;水平梯度算子核心程序:int array[9]={1, 0, -1, 2, 0, -2, 1, 0, -1}; //水平梯度算子模板for(y=1;y<height-1;y++) //x,y为图像的坐标{for(x=1; x<width-1; x++){sum=0;m=0;for(i= -1;i<=1;i++) //对(x.y)为中心的3×3区域的各点灰度值进行处理{for(j= -1;j<=1;j++){IPI_GetPixelValue(SourceImage,x+i,y+j,&gray_value);sum=sum+gray_value*array[m];m=m+1;}}……}}4.2.2 垂直梯度算子模块垂直方向的检测与水平方向相似,通过一个可以检测出垂直方向上的像素值的变化模板来实现,图像的垂直边缘得到增强。

垂直梯度算子核心程序: int array[9]={1, 2, 1, 0, 0, 0, -1, -2, -1}; //垂直梯度算子模板 …… for(i= -1;i<=1;i++) //对(x.y)为中心的3×3区域的个点灰度值进行处理 { for(j= -1;j<=1;j++) { IPI_GetPixelValue ( SourceImage, x+i, y+j, &gray_value ); sum=sum+gray_value*array[m]; m=m+1; } }……4.2.3 水平垂直梯度算子模块通过两个模板来实现,其中一个可以检测出水平方向上的像素值的变化,另外一个可以检测出垂直方向上的像素值的变化, 最后按公式:22),(cy cx y x g +=处理其灰度值。

该算法是同时增强水平和垂直方向的边缘。

水平垂直梯度核心算法: //水平垂直梯度算子模板 int array1[9]={1, 2, 1, 0, 0, 0, -1, -2, -1}; int array2[9]={1, 0, -1, 2, 0, -2, 1, 0, -1};……cx=cx+gray_value*array1[m]; cy=cy+gray_value*array2[m];…… sum=sqrt(cx*cx+cy*cy);……4.2.4 罗伯茨算法模块1963年,Roberts 提出了这种寻找边缘的算子。

Roberts 边缘算子是一个2x2的模板,采用的是对角方向相邻的两个像素之差。

从图像处理的实际效果来看,边缘定位较准,对噪声敏感。

Roberts 算法的计算公式如下:)1,(),1(),()1,1(),(g +-++-++=y x f y x f y x f y x f y xRobert 边缘检测算子相当于用模板⎢⎣⎡-10 ⎥⎦⎤01和⎢⎣⎡01 ⎥⎦⎤-10对图像进行卷积。

Roberts 边缘检测的核心算法:…… IPI_GetPixelValue( SourceImage, x, y, &gray_value[0] ); //获取图像像素的灰度值IPI_GetPixelValue( SourceImage, x+1, y+1, &gray_value[1] ); cx=gray_value[0]-gray_value[1]; cy=gray_value[2]-gray_value[3]; sum=255-sqrt(cx*cx+cy*cy); ……4.2.5 Sobel 模块为了在边缘检测中减少噪声的影响,1970年Prewitt 和Sobe1分别提出prewitt 算子和Sobel 算子。

sobel 算子从不同的方向检测边缘,利用像素点上下、左右邻点的灰度加权算法,根据在缘点处达到极值进行边缘的检测。

Sobel 边缘检测是一种数学背景复杂但实现较为简单的技术,从加大边缘增强算子的模板大小出发,由2*2扩大到3*3来计算差分。

Sobel 算子的两个卷积计算核如图3所示,图像中的每个点都用这两个核作卷积,第一个核对通常的垂直边缘响应最大,第二个核对水平边缘响应最大。

利用两个卷积核对3*3的区域进行卷积,并按22),(cy cx y x g +=计算。

在边沿检测中,sobel 算子对于像素的位置的影响做了加权,加权平均边宽2像素,因此效果较好。

⎢⎢⎢⎣⎡-101 202- ⎥⎥⎥⎦⎤-101 和 ⎢⎢⎢⎣⎡-101 202- ⎥⎥⎥⎦⎤-101 图3 Sobel 算子Sobel 边缘检测核心算法://两个卷积核形成Sobel 边缘检测算子int array1[9]={1, 2, 1, 0, 0, 0, -1, -2, -1};int array2[9]={-1, 0, 1, -2, 0, 2, -1, 0, 1}; ……for(i= -1;i<=1;i++) { for(j= -1;j<=1;j++) {//图像中的每个点都用这两个核进行卷积IPI_GetPixelValue(SourceImage,x+i,y+j,&gray_value);cx=cx+gray_value*array1[m];cy=cy+gray_value*array2[m];m=m+1; } }sum=sqrt(cx*cx+cy*cy); //取平方和之后再开方 ……4.2.6 Prewitt 模块Sobel 算法与Priwitt 算法的思路相同,Prewitt 算子的实现理论基础也是由两个卷子核形成Prewitt 边缘检测算子,如图4。

相关主题