当前位置: 首页 > article >正文

基于MATLAB边缘检测博文

    

在边缘检测是图像处理和计算机视觉中的基本问题,它的目的是标识出数字图像中亮度变化明显的点。图像经过边沿检测处理之后,不仅大幅度地减少了数据量,并且剔除了可以认为不相关的信息,保留了图像重要的结构属性。

事实上,边缘存在于图像的不规则结构和不平稳现象中,也即存在于信号的突变点处,这些点给出了图像轮廓的位置。这些轮廓常常是我们在图像边缘检测时,所需要的非常重要的一些特征条件,这就需要我们对一幅图像检测并提取出它的边缘。

可用于图像边缘检测和轮廓提取的方法有很多,其中包括有常见的Robert 边缘算子、Prewitt 边缘算子、Sobel 边缘算子等等。本文首先将会从数字图像处理的角度,对几种边缘检测算法进行详细的分析,然后会并选择其中一种边缘检测算法进行实验。考虑到以后进一步的学习,本文将会使用MATLAB对算法进行实现。最后,本文将会把实验获得的实际效果,与理论分析的结果进行比对,并以此对本次实验进行总结。

关键字:边缘检测 轮廓提取 图像处理 matlab

1.3 论文的内容与结构

1.3.1 研究内容

本文就数字图像的边缘检测算法研究主要介绍了五种方法,分别为:Robert算子,Laplacian算子,Prewitt算子,Canny算子以及Sobel算子的“中心思想”以及实现方法、适用范围。除此之外还设计了简单的GUI界面,GUI界面可以使五种算法达到的效果对比更条理清楚,更直观的体现出五种算法的特点以及优劣。最后将五种算法程序融入到整个系统中,经过优化,调试程序以达到最佳效果。确保数据采集准确快速且运行稳定。最后总结了五种方法所实现的边缘检测效果、优缺点。

1.3.2 论文结构

第一章主要是此次毕设引言还有介绍下毕设的主要研究内容;

第二章主要是对此次所需要用到的Matlab软件做个简单的介绍,然后再介绍图像处理的基本理论以及人机交互界面GUI的简单设计;

第三章主要是对系统进行分析然后再设计,介绍系统实行的方式和每个模块的主要成分;

第四章则是介绍如何实现此次系统设计,并做一个完整的结果展示;

第五章是对整个设计做个总结,对本次论文设计这些日子以来的工作发展与设计成果以及还存在的问题一一做个介绍,之后就是本次论文的所参考的一些文献等,本次论文的章节结构大致如此。

     

       

3. 系统分析与设计

目前,图像边缘检测技术已经广泛的应用于卫星,导航,监控等系统中,本设计由五种算法组成:Robert算子,Laplacian算子,Prewitt算子,Canny算子以及Sobel算子。如下图,它的设计框图3-1:

1.先将原图输入进系统,分别利用Robert算子,Laplacian算子,Prewitt算子,Canny算子以及Sobel算子五种算子进行边缘检测;

2.接着再显示五种算法下边缘检测前后的效果图;

3.观察五种算法下边缘检测的增强效果

图像边缘是图像最基本的特征,边缘在图像分析中起着重要的

用。所谓边缘(edge)是指图像局部特征的不连续性。灰度或结构

信息的突变称为边缘,例如:灰度级的突变、颜色的突变、纹理结

的突变。边缘是一个区域的结束,也是另一个区域的开始,利用该

征可以分割图像。

当人们看一个有边缘  的物体时,首先感觉到的便是边缘,如

一条理想的边缘应该具有如图2.1(a) 所示模型的特性。每个像素

都处在灰度级跃变的一个垂直的台阶上(例如图形中所示的水平线通

过图像的灰度剖面图)。

而实际上,诸如图像采集系统的性能、采样频率和获得图像的照

明条件等因素的影响,得到的边缘往往是模糊的,边缘被模拟成具有

“斜坡面”的剖面,如图2.1(b) 所示,在这个模型中不再有细线(宽

为一个像素的线条),而是出现了边缘的点包含斜坡中任意点的情况。

由此可以看到:模糊的边缘使边缘的“宽度”较大,面清晰的边缘使

边缘的宽度较小。

图像的边缘有方向的幅度两个属性,沿边缘方向像素变化平缓,

垂直于边缘方向像素变化剧烈。边缘上的这种变化可以用微分算子检

测出来,通常用一阶导数或二阶导数来检测边缘,不同的是一阶导数

认为最大值对应边缘位置,而二阶导数以过零点对应边缘位置。实际上,对于图像中的任意方向上的边缘都可以进行类似的分析。图像边

缘检测中对任意点的一阶导数可以利用该点梯度的幅度来获得,二阶

导数可以用拉普拉斯算子得到。

3.1 Robert算子

景物的边缘总是以图像中强度的突变形式出现的,所以景物边缘包含着大量的信息。由于景物的边缘具有十分复杂的形态,因此,最常用的边缘检测方法是所谓的“梯度检测法”。

    1

    0

    0

    -1

    0

    1

    -1

    0

                                      

                

(a)                          (b)

                        图(A)Robert算子模板

3.2 Laplacion算子

对于阶跃状边缘,其二阶导数在边缘点出现过零交叉,即边缘点两旁的二阶导数取异号,据此可以通过二阶导数来检测边缘点。拉普拉斯边缘检测算子正是对二维函数进行二阶导数运算的标量算子,它的定义是:

                

             

用差分代替二阶偏导时,与前述三个一阶导数算子不同,拉普拉斯算子的形式可表示如下:

拉普拉斯边缘检测算子的模板如图(D)所示,模板的基本特征是中心位置的系数为正,其余位置的系数为负,且模板的系数之和为零。它的使用方法是用图中的两个点阵之一作为卷积核,与原图像进行卷积运算即可。拉普拉斯算子又是一个线性的移不变算子,它的传递函数在频域空间的原点为零,因此,一个经拉普拉斯滤波过的图像具有零平均灰度。拉普拉斯检测模板的特点是各向同性,对孤立点及线端的检测效果好,但边缘方向信息丢失,对噪声敏感,整体检测效果不如梯度算子。因此,它很少直接用于边缘检测。但注意到与Sobel算子相比,对图像进行处理时,拉普拉斯算子能使噪声成分得到加强,对噪声更敏感。

    0

   -1

   0

   -1

   4

   -1

    0

   -1

   0

   -1

   -1

   -1

   -1

   8

   -1

   -1

   -1

   -1

    

     

                                                         

                      

                (a)                              (b)

                           图(D)Laplace算子模板

3.3 Prewitt算子

Prewitt边缘检测算子就是一种利用局部差分平均方法寻找边缘的算子,它体现了三对像素点像素值之差的平均概念,因为平均能减少或消除噪声,为此我们可以先求平均,再求差分,即利用所谓的平均差分来求梯度。用差分代替一阶偏导可得算子形式如下:

Prewitt边缘检测算子的两个模板如图(C)所示,它的使用方法同Sobel算子一样,图像中的每个点都用这两个核进行卷积,取得最大值作为输出。Prewitt算子也产生一幅边缘图像。

   1

   0

  -1

   1

   0

  -1

   1

   0

  -1

   -1

   -1

   -1

   0

   0

   0

   1

   1

   1

      

              (a)                             (b)

                         图(C)Prewitt算子模板

3.4 Canny算子

前面介绍的边缘检测算子都是局域窗口梯度算子,由于它们对噪声敏感,所以在处理实际图像时效果并不是十分理想。根据边缘检测的有效性和定位的可靠性,Canny研究了最优边缘检测器所需的特性,给出了评价边缘检测性能优劣的三个指标:

  • 高的准确性,在检测的结果里应尽量多的包含真正的边缘,而尽量少的包含假边缘。
  • 高的精确度,检测到的边缘应该在真正的边界上。
  • 单像素宽,要有很高的选择性,对每个边缘有唯一的响应。

     这三个准则是对前述边缘检测指标的定量描述。抑制噪声和边缘精确定位是无法同时得到满足的,即边缘检测算法通过图像平滑算子去除噪声,势必增加边缘定位的不确定性;反之,若提高边缘检测算子对边缘的敏感性,同时也提高了对噪声的敏感性。因此,在实际应用中只能寄希望于再抑制噪声和提高边缘定位精度之间实现一个合理的折衷。

     值得庆幸的是,有一个线性算子可以在抵抗噪声与边缘检测之间获得一个最佳的折衷,这个算子就是高斯函数的一阶导数。高斯函数与原图的卷积达到了抵抗噪声的作用,而求导数,则是检测景物边缘的手段。

     对于阶跃形的边缘,Canny推导出的最优边缘检测器的形状与高斯函数的一阶导数类似,因此Canny边缘检测器就是高斯函数的一阶导数构成的。我们知道,高斯函数是圆对称的,因此,Canny算子在边缘方向上是对称的,在垂直于边缘的方向上是反对称的。这就意味着该算子对最急剧变化方向上的边缘特别敏感,但在沿边缘方向上是不敏感的。

     

此外,如果1)和2)同时被满足,那么在梯度方向上的相邻像素就从候选边缘点中取消,条件3)相当于区域梯度最大值组成的阈值图像与边缘点进行匹配,这一过程消除了许多虚假的边缘点。

Canny边缘检测算子步骤如下:

Step1:用高斯滤波器对图像进行滤波消噪;

Step2:用一阶偏导的有限差分来计算梯度的幅值和方向;

Step3:对梯度幅值进行非极大值抑制;

Step4:用双阈值算法检测和连接边缘。

3.5 Sobel算子

Sobel算子垂直方向和水平方向的模板如图(B)所示,前者可以检测出图像中的水平方向的边缘,后者则可以检测图像中垂直方向的边缘。实际应用中,图像中的每一个像素点都用这两个卷积核进行卷积运算,取其最大值作为输出。运算结果是一幅体现边缘幅度的图像。

    -1

    -2

    -1

    0

    0

    0

    1

    2

    1

   -1

  0

   1

   -2

  0

   2

   -3

  0

   1

                                             

           (a)                                  (b)

                        图(B)Sobel算子模板

 4.  整个边缘检测系统的实现

本章将主要介绍系统的运行环境与编译工具,还有核心代码的主要功能以及程序架构等。

4.1 系统运行环境与开发的工具

1.系统运行环境

硬件部分:计算机;

软件部分:windows 7,以及Matlab2010以上版本软件;

2.开发编译工具

软件的选择会对系统的开发速率与开发周期都起着至关重要的作用,毕设要求的是基于Mablab的系统设计,使用合适的软件也会在很大程度上提高开发的效率,并有效降低研究的成本,后期的系统维护也能较好的运行。此次毕设的研究课题算是一种比较复杂的图像处理的程序,但是我此次选取得开发工具刚好在这方面占据较大的优势,其丰富的函数种类与工具箱都十分利于对图像的研究。

4.2 程序的基本结构

本图像边缘检测处理程序具有人机交互界面GUI,主程序是MyDip.fig,通过界面的方式,制作一个菜单,来选择不同算子进行图像的边缘检测。

4.3 系统功能实现 

4.3.1 界面GUI的设计

整个设计的人机交互界面GUI需要人性化,并且突出边缘检测前后图像的对比,可以在界面灵活地选取不同算法。设计草图如图4-1所示。

               4-1 GUI界面布局图

4.3.2 GUI界面的制作

     该人机交互界面GUI,具有界面友好,容易操作等特征。首先打开matalb软件,在命令窗口command window输入guide,并且敲击回车键,进入matlab GUI快速打开方式窗口。出现如下图:

点击OK确定,进入GUI编辑界面窗口。

在设计上,拉动2个大小完全相同的Axes方框,用于分别放置边缘检测图像前后对比图像,以达到直观对比效果。界面上制作一个菜单的打开按钮,用于打开选择所要边缘检测处理的图像,句柄内填充以下代码以实现功能。

[filename, pathname] = uigetfile({'*.bmp';'*.jpg';'*.jpeg'},'Pick an image-file');

    if isequal(filename,0) | isequal(pathname,0)

       disp('User pressed cancel');

    else

       disp(['User selected ', fullfile(pathname, filename)])

    end

x=imread(filename);

[width,height,Cnums]=size(x);

a=log2(width);

b=log2(height);

axes(handles.axes2);

imshow(zeros([256,256]));

if (Cnums~=1)

    if (width>256)|(height>256)

        W=max(width,height);

    else    

        W=256;

    end

    for m=1:W

        for n=1:W         

                if (m<=width)&(n<=height)

                extendx(m,n,:)=x(m,n,:);

                else

                    extendx(m,n,:)=realmax;

                end

          end

      end

        axes(handles.axes1);

        imshow(extendx);

        handles.rgb=x;

        msgbox('Please transform it to a gray image or it can not be processed correctly','fileopening','warning');

elseif (width>256)|(height>256)

    W=max(width,height);

    for m=1:W

        for n=1:W

            if (m<=width)&(n<=height)

            extendx(m,n)=x(m,n);

            else

                extendx(m,n)=realmax;

            end

        end

    end

    axes(handles.axes1);

    imshow(extendx);

    msgbox('The height or width is larger than 256 or they are both larger than 256!','fileopening','warning')

   elseif (width<256)|(height<256)

    for m=1:256

        for n=1:256

            if (m<=width)&(n<=height)

            extendx(m,n)=x(m,n);

            else

                extendx(m,n)=realmax;

            end

        end

    end

    axes(handles.axes1);

    imshow(extendx);

    msgbox('The height or width is less than 256 or they are both less than 256!','fileopening','warning');

    else

    axes(handles.axes1);

    imshow(x);

end

handles.imdata=x;

handles.reload=handles.imdata;

guidata(hObject, handles);

打开的实现功能如下:

                       打开功能实现图

 在算法选择上,也是利用菜单的下拉按钮pushbutton的形式实现,如下图:

    

                 图4-2 算法选择菜单

另外,为了从本质上解释图像边缘检测达到效果的原因,特别在GUI界面上设计了2个大小完全一样的axes,用于呈现边缘检测前后两图像的灰度直方图。通过bitton按钮以实现显示直方图。实现的代码如下:

if isequal(handles.Img1, 0)

    msgbox('请载入原图像!', '提示信息');

    return;

end

if isequal(handles.Img2, 0)

    msgbox('请进行边缘检测处理!', '提示信息');

    return;

end

4.3.3 运行效果示意图

                 4-3  robert图像边缘检测运行截图

               4-4  Laplacian图像边缘检测运行截图

                4-4  prewitt图像边缘检测运行截图

                   4-5  canny图像边缘检测运行截图

4-6  sobel图像边缘检测运行截图


http://www.kler.cn/news/359059.html

相关文章:

  • 估值与周期风险评估(2024/09/29)
  • RabbitMQ系列学习笔记(五)--持久化机制
  • 四川方维嘉术科技有限公司简介
  • C#中判断的应用说明一(if语句)
  • 梦熊十三联测 D题 电报
  • ES 8分片分配迁移和恢复
  • 鲸信私有化即时通信如何平衡安全性与易用性之间的关系?
  • Proximal Distance Algorithm (近段距离算法)
  • AI Weekly2:过去一周重要的AI资讯汇总
  • Loss:Focal Loss for Dense Object Detection
  • sql数据库命令行操作(数据库的创建和删除)
  • sql-labs靶场第十四关测试报告
  • Wireshark下载和安装
  • 计算机网络——无连接传输UDP
  • go 包相关知识
  • 20241021下载B站json格式的字幕并通过python3转换成为SRT格式
  • DNS代理是什么?浅析DNS代理的工作原理及应用
  • 大数据存储计算平台EasyMR:大数据集群动态扩缩容,快速提升集群服务能力
  • 浅谈c#编程中的异步编程
  • @JsonIgnoreProperties做接口对接时使用带来的好处