数字信号处理程序课程设计资料.docx
- 文档编号:13080485
- 上传时间:2023-06-10
- 格式:DOCX
- 页数:20
- 大小:100.79KB
数字信号处理程序课程设计资料.docx
《数字信号处理程序课程设计资料.docx》由会员分享,可在线阅读,更多相关《数字信号处理程序课程设计资料.docx(20页珍藏版)》请在冰点文库上搜索。
数字信号处理程序课程设计资料
数字信号处理课程设计
设计题目:
姓名:
学号:
院系班级:
组次:
指导教师:
时间:
2015年11月21日——2015年12月6日
摘要
基于MATLAB的图像边缘检测算法的研究和实现
图像边缘是图像的最基本的特征。
所谓边缘,就是指图像局部强度变化最明显的部分,存在于区域与区域、目标与目标、目标与背景、基元与基元之间,包含有图像处理中用于识别的关键信息。
边缘检测是数字图像处理中,最基础也是最重要的环节之一。
本文介绍了六种经典的边缘检测算子,包括Roberts算子,Sobel算子,Canny算子,Prewitt算子,LOG算法。
并且利用MATLAB系统所提供的相关函数等,对同一副图像结合用这些不同的算子分别进行处理,分析并得到他们处理图像的特点。
比较传统的边缘检测算子,因为是基于图像函数的一阶导数进行考察的,因而它们具有共同的特点是计算简单、速度较快,但是对噪声都比较敏感。
LOG算法和Canny算法,都是先对图像进行平滑去噪,抗噪性能较好,但是会损失一些边缘信息,其中LOG算法比较适合处理渐变灰度图像,而Canny算子更适合处理阶跃型边缘图像。
小波变换边缘检测法,则能够很好的保留图像的边缘信息,更适合处理小阵列图像。
关键词:
MATLAB;图像处理;边缘检测;微分算子
第一章绪论
1.1设计目的与要求
二十世纪五十年代,人们开始提出一些数字图像处理的技术,是通过计算机对图像所包含的信息进行加工和处理后,使得图像中的信息能够为我们所用。
从早期的报纸业,到1964年,在航天领域中,有里程碑作用的“旅行者七号”太空船在太空中拍摄了月球的照片,并回传给地球上的工作站成功处理,到现在的我们所能接触到的统计学、医学等等各种领域之中,数字图像处理己经迅速发展,并成为了我们不可或缺的重要技术和研究对象。
图像处理中最关键的一步就是对图像信息进行分解,提取一些具有某种特征的图像信息。
图像的边缘负载的信息,能够在图像处理过程中起到识别的作用,这也正是他作为图像基本特征的重要原因[l]。
与此同时,之于图像边缘在图像的要素中占有举足轻重的地位,相对的,对边缘进行检测的技术,也在处理图像的各种技术之中,作用不可小觑。
图像边缘定义为图像中像素灰度有阶跃变化或屋顶变化的那些像素的集合。
基于边缘灰度的不连续性,遍历考察图像中单个像素点的局部灰度分布情况,利用一阶和二阶导数来进行边缘检测。
在长期对图像边缘检测的研究中,不断涌现出了许多种图像边缘检测的方法。
而到目前为止,己经提出的各种方法,对于图像边缘检测的效果,都有自己的优点和不足,也有自己的适用范围。
并没有存在一种比较普遍适用的边缘检测方法。
因此,对于寻找和创造更新的、更有效的边缘检测方法仍然是图像处理中比较主流的方向。
图像理解是图像处理的一个重要分支,研究为完成某一任务则需要从图像中提取哪些有用的信息,以及如何利用这些信息解释图像。
边缘检测技术对于处理数字图像非常重要,因为边缘是所要提取目标和背景的分界线,提取出边缘才能将目标和背景区分开来。
在图像中,边界表明一个特征区域的终结和另一个特征区域的开始,边界所分开区域的内部特征或属性是一致的,而不同的区域内部的特征或属性是不同的,边缘检测正是利用物体和背景在某种图像特性上的差异来实现的,这些差异包括灰度,颜色或者纹理特征。
边缘检测实际上就是检测图像特征发生变化的位置。
“飞思卡尔”杯全国大学生智能车竞赛中,要求各参赛队赛车在规定的赛道上行驶,速度快者胜出。
根据比赛规则:
比赛过程中,如果赛车碰到赛道两边的立柱并使之倾倒或移动,裁判员将判为赛车冲出跑道(实际执行时,是根据裁判的肉眼判断)。
赛车前两次冲出跑道时,由裁判员取出赛车交给比赛队员,立即在起跑区重新开始比赛,该圈成绩取消。
因而在设计时,必须首先考虑找出赛道的边界点,然后再设计算法实现赛车行驶线路。
1.2叙述国内外研究动态
图像处理技术诞生于二十世纪中叶,经过10多年的迅速发展,逐渐形成了一个专门的学科,在此其中,边缘检测技术也有相当长的一段研究发展史。
随着图像处理技术逐渐成熟,越来越多的科研领域关注到这一技术,给予重用且成效显著。
无论是传统的工业检测等领域,还是近年新兴起来的人工智能等更为新颖的学科都包含在其中。
数字图像处理技术未来的发展速度和空间不可限量。
在长期对图像边缘检测的研究中,不断涌现出了许多种图像边缘检测的方法。
现有的边缘检测方法有比较经典的检测方法,如差分边缘检测、Robertsoperator,Prewitt、operator,神经网络、Sobeloperator等。
也有最近兴起的小波变换图像边缘检测法和fuzzytheory,基于人工智能等方法。
然而边缘检测技术发展至今,当前己经提出的各种方法之中,对于图像边缘检测的效果,都有自己的优点和不足,也有自己的适用范围。
而鲜有能够适用于多数普遍情况的方法。
因此,对于寻找和创造适用范围更为广泛、处理效果更佳的边缘检测方法仍然是图像处理中比较主流的方向。
第2章软件设计-基于MatLab的边缘检测算法
2.1MatLab简介
MATLAB通常又可被称作是矩阵实验室(根据其英文全称MatrixLaboratory得名)。
作为一款用于计算数值和处理图形图像的软件系统,MATLAB被应用在很多相关领域中,如在矩阵代数中,可利用MATLAB进行矩阵的计算,在数字信号处理领域中,可利用MATLAB进行动态仿真等等。
他的几大特点可概括为以下几点:
1)功能强的数值运算。
在MATLAB软件的系统函数中,为使用者提供了数五百多种计算函数。
这些系统函数不仅数量多,而且涵盖学科范围广泛,包括有数学、统计以及科学等学科。
函数的表达比较自然,为使用者提供一种解决问题的模式,让问题的解答像解决数学公式一样,简单而方便,为用户大大减少了操作电脑的时间和精力,而可以投入更多的精力在问题的解决上。
2)先进的资料视觉化功能。
MATLAB用户可使用其提供的物件导向图像构架进行视觉数据分,绘制高品质图形,能够帮助用户很好的完成图文并茂的文章。
3)高阶但简单的程式环境。
MATLAB语言是一种脚本语言,不需要编译和联结就能够立即执行。
相比较FORTRAN或C语言等编译语言,MATLAB语言更为简单、易学、易用,能够让编程者更快速的学会如何编写程序,并且高效地完成工作,而能够大大的节约了时间。
此外,MATLAB还提供了很多方便编程者使用的内建功能。
4)开放及可延伸的架构。
MATLAB系统提供大量的开源代码,包括内部的数学原始码,可以让使用者能够检视其运算法,并可以根据自己的需要,更改现有的函数。
同时,使用者也可以在MATLAB环境的基础上开发自己的功能函数,让MATLAB能够更好地为开发者所使用。
同样对于MATLAB的各种工具包也是如此,使用者可以根据自己的需求进行修改或者创新、开发,形成这对性的工具包,以供此类开发方便使用。
5)丰富的程式工具箱。
程式工具箱是MATLAB为使用者提供了另一大便利组件,他们由一些针对某些领域而编写的函数的集合。
目前己经开发完成,并能够提供给用户使用的有符号数学工具箱,信号处理工具箱,偏微分方程工具箱等等。
这些丰富的程式工具箱,解决了用户针对某领域中的一些普遍处理需求,有效的节约了开发者的时间。
由此可见,MATLAB系统提供了一个更为使用者所方便操作的数学系统环境,且采用矩阵为基本的数据结构,更可在很大程度上的简化了编程。
MATLAB语言所定义的语法规则,相比较于其他高级编程语言,更为简单,更容易学习,程序调试可设置断点,存储中间结果,使得MATLAB程序调试变得简单、快捷。
MATLAB的强大之处还在于他的灵活性和友好性。
他能够跟许多程序相结合使用,如C语言,FORTRAN语言和MicrosoftWord等。
当使用者在MATLAB系统中编写程序的时候,可以根据需要,直接调用C或者FORTRAN的功能函数,同样,在编写C或FORTRAN程序时,也可以根据需要直接调用MATLAB的函数或命令,更加方便而充分地利用MATLAB中强大的各种数学处理功能。
通过将MATLAB程序与其他语言程序灵活而有机的结合在一起使用,不仅可以弥补MATLAB程序中循环速度慢的缺点,也可以供其他程序直接利用MATLAB程序生成的MAT文件执行矩阵数据的读取和写入,从而大大地提高工作效率。
2.2边缘检测算法原理
由于噪声和模糊的存在,检测到的边界可能会变宽或在某些点处发生间断,因此,边界检测包括两个基本内容。
首先抽取出反映灰度变化的边缘点,然后剔除某些边界点或填补边界间断点,并将这些边缘连接成完整的线。
边缘检测的方法大多数是基于方向导数掩模求卷积的方法,因为导数算子具有突出灰度变化的作用,对图像运用导数算子,灰度变化较大的点处算得的值比较高,因此可将这些导数值作为相应点的边界强度,通过设置门限的方法,提取边界点集。
以下是几种常用的边缘检测算法。
2.2.1Roberts边缘算子
Roberts边缘检测算子根据任意一对互相垂直方向上的差分可用来计算梯度的原理,采用对角线方向相邻两像素之差,实际是该点连续梯度的近似值,而不是所预期的点处的近似值。
另外该算子提取的边缘较粗,对噪声很敏感,并且需要手动地指定一个阈值(Threshold),对不同的图像使用不同的阈值后,边界提取效果差别很大。
因此Roberts算子一般使用自适应的阈值,并对提取的边缘进行细化处理,这样将能有效地改善Roberts算子的边界提取效果。
一般适用于低噪声图像。
2.2.2Sobel边缘算子
Sobel算子是边缘检测器中最常用的算子之一,一般可以利用快速卷积函数,简单有效,因此应用很广泛。
该算子有两个,一个是检测水平边沿的;另一个是检测垂直平边沿的。
水平与垂直相比,Sobel算子对于像素的位置的影响做了加权,因此效果更好。
Sobel算子另一种形式是各向同性Sobel(IsotropicSobel)算子,也有两个,一个是检测水平边沿的,另一个是检测垂直平边沿的。
各向同性Sobel算子和普通Sobel算子相比,它的位置加权系数更为准确,在检测不同方向的边沿时梯度的幅度一致。
但是该算子并没有将图像的主体与背景严格地区分开来,没有严格地模拟人的视觉生理特征,所以提取的图像轮廓有时并不能令人满意。
具有采用加权滤波,边缘较宽,间断点较多的特点,适用于灰度渐变、低噪声图像。
2.2.3Prewitt边缘算子
Prewitt算子是平均算子,和Roberts算子相比较,Prewitt算子是从增大边缘检测算子的模板大小出发的。
图像中的每个像素点都用两个模板做卷积,两个卷积的最大值作为该点的输出,这个运算结果也就是我们所需要的一幅边缘幅度图像。
其中垂直边缘的检测受第一个模板的影响最大;水平边缘的检测受第二个模板的影响最大取最大值作为输出。
Prewitt算子的基本原理为:
依次用图像信息边缘的理想模型和实际边缘信息相比较,以找出最相似的模板。
在被检测区域中,检测到的边缘点相似度最大的作为最终结果。
2.2.4Log边缘算子
拉普拉斯高斯(LOG)算法是一种二阶边缘检测方法。
它通过寻找图像灰度值中二阶微分中的过零点来检测边缘点。
其原理为灰度级变形成的边缘经过微分算子形成一个单峰函数,峰值位置对应边缘点;对单峰函数进行微分,则峰值处的微分值为0,峰值两侧符号相反,而原先的极值点对二阶微分中的过零点,通过检测过零点即可将图像的边缘提取出来。
具有各向同性、线性、位移不变的特点,对细线和孤立点效果较好。
但对噪声较敏感,适用于屋顶型边缘的检测。
2.2.5Canny边缘算子
Canny算子是一个具有滤波、增强和检测的多阶段的优化算子。
在进行处理前,该算子先利用高斯平滑滤波器来平滑图像以除去噪声,其分割算法采用一阶偏导的有限差分来计算梯度的幅值和方向。
在处理过程中,Canny算法还将经过一个非极大值抑制的过程,最后将采用两个阈值来连接边缘。
具有高定位精度、低误判率、抑制虚假边缘的特点,适用于高噪声图像。
2.3边缘检测算法--测试程序
用MatLab程序实现,为了便于二值化后的图像的显示的清楚,利用相机拍摄一幅智能车赛道的图像(实际情况下是智能车上的摄像头拍摄图像,然后进行分析)。
调用专门的边缘检测edge函数,进而实现各算子对边缘的检测,其调用格式如下:
BW=edge(I,’method’)
BW=edge(I,’method’,thresh)
BW=edge(I,’method’,thresh,direction)
[BW,thresh]=edge(I,’method’,…)
Method就是指要选用的算子类型,供我们可以选择的method有Roberts、Sobel、Prewitt、Log、Canny等。
另外,可供选择的参数还有thresh(阈值)、sigma(方差)和direction(方向)等。
以下为一些测试程序:
%读入图像并进行显示
I=imread(‘赛道.bmp’);
Figure,imshow(I)
图1智能车赛道源图
%对图像进行灰度处理并进行显示
I1=rgb2gray(I);
Figure,imshow(I1)
图2智能车赛道灰度图
%画出腐蚀后的图像
se=strel('ball',5,5);
I2=imerode(I1,se);
figure,imshow(I2),title('Eroded')
图3智能车赛道腐蚀后图像
%利用Roberts算子求图像边界并显示
BW1=edge(I1,'roberts','both');
figure,imshow(BW1),
title('用Roberts算子')
图4采用Roberts算子的图像边界
%利用sobel算子求图像边界并显示
BW2=edge(I1,'sobel','both');
figure,imshow(BW2),title('用Sobel算子')
图5采用Sobel算子的图像边界
%利用LOG算子求图像边界并显示
BW3=edge(I1,'log','both');
figure,imshow(BW3),title('用拉普拉斯高斯算子')
图6采用拉普拉斯高斯算子的图像边界
图7采用Canny算子的图像边界
第三章实验结果及分析
3.1Roberts算子检测图像边缘的实现
1)获取原图像的数据区指针。
2)新建一个缓冲区,用于进行图像处理的中间过程和缓存中间结果,其大小应该与原图像一样。
初始化区域中的所有像素值,设置成255.
3)核心算法的执行是在我们新建的缓冲区里面,用Roberts算子遍历图像中所有的像素点,分别计算其灰度值,再根据上述公式进行计算。
4)将缓冲区中的计算数据结果,复制到原图数据区。
实现代码如下:
I=imread('smallmiyue.jpg');
%读取待处理图像文件
subplot(131),imshow(I),title('原图像');
%显示待处理图像文件
image=rgb2gray(I);
%将图片转换成灰度图像
BW1=edge(image,'Roberts');
%image为将要进行边缘检测目标图像,所使用的方法是Roberts算子,而阂值则是由系统自适应生成的
subplot(132),imshow(BW1),title('Roberts算子');
%显示Roberts自动阂值边缘检测效果图像
BW2=edge(image,'Roberts',0.07);
%image为将要进行边缘检测目标图像,所使用的方法是Roberts算子,而阂值设置为0.07
subplot(133),imshow(BW2),title('Roberts算子I0}7值0.07');
%处理效果图
图8Roberts算子检测图像边缘处理效果图
3.2Sobel算子检测图像边缘的实现
1)获取原图像的数据区指针。
2)新建两个缓冲区,其大小与原图像一样,用于存储原图像及其副本,以供后面
的计算处理。
同时将这两个区域初始化为原图像的副本。
3)为两个缓存区域,分别设置一个用于卷积操作的Sobel算子模板,然后两个区域
中,分别遍历副本图像中的所有像素,逐一进行卷积操作,计算结果。
4)将上一步骤中所得到的两个缓存区域中的结果进行比较,将较大值重新赋值给
图像中的像素点。
5)将缓冲区中选择的图像复制到原图像数据区。
实现代码如下:
I=imread('smallmiyue.jpg');
%读取待处理图像文件
subplot(131),imshow(I),title('原图像');
%显示待处理图像文件
image=rgb2gray(I);
%将图片转换成灰度图像
BW1=edge(image,'Sobel');
%image为将要进行边缘检测目标图像,所使用的方法是Sobel算子,而阂值则是由系统自适应生成的
subplot(132),imshow(BW1),title('Sobel算子');
%显示处理后图像
BW2=edge(image,'Sobel',0.07);
%image为将要进行边缘检测目标图像,所使用的方法是Sobel算子,而阂值设置为0.07
subplot(133),imshow(BW2),title('Sobel算子I0}7值0.07');
%阂值为0.07的Sobel算子处理后图像
图9Sobel算子检测图像边缘处理效果图
3.3Prewitt算子检测图像边缘的实现
1)获取原图像的数据区指针。
2)新建两个缓冲区,其大小与原图像一样,用于存储原图像及其副本,以供后面
的计算处理。
同时将这两个区域初始化为原图像的副本。
3)为两个缓存区域,
后两个区域中,
果。
在每个区域中单独设置一个用于卷积操作的Prewitt模板,然
分别遍历副本图像中的所有像素,逐一进行卷积操作,计算结
4)将上一步骤中所得到的两个缓存区域中的结果进行比较,将较大值重新赋值给
图像中的像素点。
5)将缓冲区中选择的图像复制到原图像数据区。
实现代码如下:
I=imread('smallmiyue.jpg');
%读取待处理图像文件
subplot(131),imshow(I),title('原图像');
%显示待处理图像文件
image=rgb2gray(I);
%将图片转换成灰度图像
BW1=edge(image,'Prewitt');
%image为将要进行边缘检测目标图像,所使用的方法是Prewitt算子,而阂值则是由系统自适应生成的
subplot(132),imshow(BW1),title('Prewitt算子');
%显示Prewitt自动阂值边缘检测效果图像
BW2=edge(image,'Prewitt',0.05);
%image为将要进行边缘检测目标图像,所使用的方法是Prewitt算子,而阂值设置为0.05
subplot(133),imshow(BW2),title('Prewitt算子I0}7值0.05');
%输出阂值为0.05的Prewitt算子,边缘检测处理后图像
图10prewitt算子检测图像边缘处理效果图
3.4高斯一拉普拉斯LOG算子检测图像边缘的实现
1)获取原图像的数据区指针。
2)申请一个和原图像大小相同的图像缓冲区,将原图像复制到缓冲区中。
3)设置一个用于卷积操作的Gauss-Laplace算子模板,在区域中遍历副本图像中的所有像素,逐一进行卷积操作,计算结果。
4)将计算结果复制到原图像数据区。
实现代码如下:
I=imread('smallmiyue.jpg');
%读取待处理图像文件
subplot(1,3,1),imshow(I),title('原图像');
%显示待处理图像文件
image=rgb2gray(I);
%将图片转换成灰度图像
BW1=edge(image,'LOG');
%image为将要进行边缘检测目标图像,所使用的方法是LOG算子,而阂值则是由系统自适应生成的
subplot(132),imshow(BW1),title('LOG算子');
%显示LOG自动阂值边缘检测效果图像
BW2=edge(image,'LOG',[],4);
%使用LOG算子检测图像边缘,标准差s设置为4
subplot(133),imshow(BW2),title('LOG算子s为4')
%显示s为4的LOG算子处理后图像
图11Log算子检测图像边缘处理效果图
3.5Canny算子检测图像边缘的实现
1)获取原图像的数据区指针。
2)将原图像用Gauss滤波器平滑噪声,达到降低噪声影响的目的。
即使用Gauss
函数与原图像做卷积计算。
3)将上一步骤的结果图像,作为此步骤的输入,首先计算一阶偏导有限差分,然
后再计算其局部区域的梯度幅值和方向,并进行非极大值抑制。
4)新建两个图像缓冲区域,用于存储目标图像的副本,设置其大小与原图像相同,
并将原图像的副本分别初始化到两个区域中。
5)在两个缓冲区中分别用thl和th2提取图像边缘信息,得到图像1和图像2.
6)在进行连接边缘的操作时,主要是以图像2为基础,通过对图像1中的对比和
考察,不断的把有效的细节信息补充进去,以得到较为连续的图像边缘。
7)将连接图像复制到原图像数据区中。
实现代码如下:
I=imread('smallmiyue.jpg');
%读取待处理图像文件
subplot(131),imshow(I),title('原图像');
%显示待处理图像文件
image=rgb2gray(I);
%将图片转换成灰度图像
BW1=edge(image,'Canny');
%image为将要进行边缘检测目标图像,所使用的方法是Canny算子
%系统自适应生成阂值
subplot(132),imshow(BW1),title('Canny算子');
%显示检测效果图像
BW2=edge(image,'Canny',[0.20.5]);
%认为将阂值设置为[0.20.5]
subplot(133),imshow(BW2),title('Canny算子s为4')
%处理后图像
图12canny算子检测图像边缘处理效果图
第4章总结与心得体会
本文主要针对在图像处理研究中用于进行边缘检测处理的几种较为重要和基础的检测算法,详细的介绍了其原理,并进行了实验操作,得出结论。
图像处理技术以其强大的功能和丰硕的成果,为我们在生活以及军事等很多领域中,解决了很多难题,推动了各研究领域的发展,他的重要性不言而喻。
而作为图像处理中
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数字信号 处理 程序 课程设计 资料