草庐IT

毕业设计-基于 MATLAB 的图像边缘检测算法的研究和实现

HaiLang_IT 2023-04-05 原文

目录

前言

课题背景和意义

实现技术思路

一、MATLAB概述

二、图像边缘检测

实现效果图样例

最后


前言


    📅大四是整个大学期间最忙碌的时光,一边要忙着备考或实习为毕业后面临的就业升学做准备,一边要为毕业设计耗费大量精力。近几年各个学校要求的毕设项目越来越难,有不少课题是研究生级别难度的,对本科同学来说是充满挑战。为帮助大家顺利通过和节省时间与精力投入到更重要的就业和考试中去,学长分享优质的选题经验和毕设项目与技术思路。

🚀对毕设有任何疑问都可以问学长哦!

选题指导: https://blog.csdn.net/qq_37340229/article/details/128243277

大家好,这里是海浪学长毕设专题,本次分享的课题是

🎯毕业设计-基于 MATLAB 的图像边缘检测算法的研究和实现

课题背景和意义

二十世纪五十年代,人们开始提出一些数字图像处理的技术,是通过计算机对图像 所包含的信息进行加工和处理后,使得图像中的信息能够为我们所用。从早期的报纸业, 到 1964 年,在航天领域中,有里程碑作用的“旅行者七号”太空船在太空中拍摄了月 球的照片,并回传给地球上的工作站成功处理,到现在的我们所能接触到的统计学、医学等等各种领域之中,数字图像处理已经迅速发展,并成为了我们不可或缺的重要技术 和研究对象。 图像处理中最关键的一步就是对图像信息进行分解,提取一些具有某种特征的图像 信息。图像的边缘负载的信息,能够在图像处理过程中起到识别的作用,这也正是他作 为图像基本特征的重要原因。与此同时,之于图像边缘在图像的要素中占有举足轻重的地位,相对的,对边缘进行检测的技术,也在处理图像的各种技术之中,作用不可小 觑。 图像边缘定义为图像中像素灰度有阶跃变化或屋顶变化的那些像素的集合。基于边 缘灰度的不连续性,遍历考察图像中单个像素点的局部灰度分布情况,利用一阶和二阶 导数来进行边缘检测。 在长期对图像边缘检测的研究中,不断涌现出了许多种图像边缘检测的方法。而到 目前为止,已经提出的各种方法,对于图像边缘检测的效果,都有自己的优点和不足, 也有自己的适用范围。并没有存在一种比较普遍适用的边缘检测方法。因此,对于寻找 和创造更新的、更有效的边缘检测方法仍然是图像处理中比较主流的方向。

实现技术思路

一、MATLAB概述

MATLAB简介

MATLAB 通常又可被称作是矩阵实验室(根据其英文全称 Matrix Laboratory 得名)。 作为一款用于计算数值和处理图形图像的软件系统,MATLAB 被应用在很多相关领域中,如在矩阵代数中,可利用 MATLAB 进行矩阵的计算,在数字信号处理领域中,可利用 MATLAB 进行动态仿真等等。
MATLAB 的系统结构简介
MATLAB 的系统结构分为三个层次九个部分。如图

 MATLAB 系统从下到上依次由基础层、仿真应用层、实时仿真层三个层次构成,其中基础层是整个系统的最基础的部分,我们下面具体介绍一下基础层。

MATLAB 中常用的图像操作

1)imread 函数。
MATLAB 可让用户通过 imread()函数,自己导入要进行处理的目标图像,MATLAB 所支持的图像格式也是多种多样的,我们常见的有 BMP、JPEG、JPG、TIFF、HDF、PCX 等。
2)imwrite 函数。
MATLAB 中用 imwrite()函数输出图像,可将一个矩阵数据存储转换成为图像文件。以上提到的文件格式都支持。
3)imshow/image 函数 MATLAB 编程环境中,用户可以通过运行 imshow()、image()等函数,实现在屏幕上显示图像的操作。
4)图像类型转换函数。
在 MATLAB 中可以通过简单的运行一个函数而完成图像类型转换的操作。
5)edge 函数
这个函数只适用于处理灰度图像。函数定义为 edge(IAMGE,method)。其中,参数 IMAGE 为要进行处理的图像,method 为所要使用的图像边缘检测算法,可使用的方法,即字符串为sobel,prewitt,roberts,log 等。

二、图像边缘检测

图像边缘检测的基本理论
1、图像的边缘
边缘的基本定义:图像的边缘实际上是一组像素的集合,而这些像素所在图像中的位置上,像素灰度出现了阶跃变化,或者是屋顶变化。根据边缘的定义及灰度变化形状,我们可以简单的将图像边缘归纳成两类,即阶跃状和屋顶状:
1) 阶跃状边缘:处在这种类型的边缘上的像素点,都是位于图像中灰度发生阶跃变化的竖直台阶上的像素,连续性好,是一种较为理想的数字边缘模型。如图

2) 屋顶状边缘:这种类型的图像边缘是一种平缓上升和下降的边缘。如图

边缘检测

根据图像边缘的定义我们知道,在图像的边缘位置拥有一个共同的特质,即像素的灰度有很大的变化。通过考察其一阶导数出现最大值的位置,以及二阶导数出现零交叉点的位置,即可判断边缘像素的位置。
图像边缘与一阶导数以及二阶导数的关系如图

 卷积理论

在处理图像时,普遍通过计算图像卷积以达到处理图像的目的,也就是遍历图像中的所有像素,使用每个像素的小领域生成最终的图像。
1、基本理论
在数学定义中,我们把计算两个函数的无穷积分的方法,叫做卷积。假定 P 是图像中的一个区域,大小为 3×3,矩阵 K 式作用在这个区域上的卷积核,大小也是 3×3。那么利用P和K 进行卷积,得到的该区域的新的中心像素值 P22则表示为:

2、Roberts 边缘检测算子
函数的梯度定义为:

Roberts 边缘检测算子的原理,是首先计算图像中所有相互垂直方向上的差分,然后利用差分进行像素梯度的计算,实际计算中所采用的像素,是处在区域对角线方向上的像素,取其差值,即:

图像的梯度为:

将算式简化得到:

所对应的卷积模板:

3、Roberts 算子检测图像边缘的实现
1) 获取原图像的数据区指针。
2) 新建一个缓冲区,用于进行图像处理的中间过程和缓存中间结果,其大小应该与原图像一样。初始化区域中的所有像素值,设置成 255.
3) 核心算法的执行是在我们新建的缓冲区里面,用 Roberts 算子遍历图像中所有的 像素点,分别计算其灰度值,再根据上述公式进行计算。
4) 将缓冲区中的计算数据结果,复制到原图数据区。
实现代码如下:
clear; 
%清空工作区变量 
I = imread('cameraman.tif'); 
%读取待处理图像文件 
subplot(131),imshow(I),title(‘原图像’); 
%显示待处理图像文件 
image = rgb2gray(I); 
%将图片转换成灰度图像 
TempImage1 = edge ( image ,’Roberts’); 
%image 为将要进行边缘检测目标图像,所使用的方法是 Roberts 算子,而阈值则是
由系统自适应生成的 
subplot(132),imshow(TempImage1),title(‘Roberts 算子’); 
%显示 Roberts 自动阈值边缘检测效果图像 
TempImage 2 = edge ( image ,’Roberts’,0.07); 
% image 为将要进行边缘检测目标图像,所使用的方法是 Roberts 算子,而阈值设置
为 0.07 
subplot(133),imshow(TempImage2),title(‘Roberts 算子 阈值 0.07’); 
%处理效果图
处理效果对比图,如图。

Sobel 边缘检测算子
1、基本理论
图像中某点处的梯度值,正比于与该点周围相临近的像素点之间的灰度差值。也就是说,像素的梯度值越大,则对应区域的灰度变化更为迅速,比如图像边缘等处。
Sobel 边缘检测算子在进行卷积操作的时候,所使用的卷积核大小为 3 × 3 的矩阵。通常使用的 Sobel 算子卷积模板,包括有水平方向和方向两种模板,如图。

利用 Sobel 算子检测图像边缘时,分别利用这两个模板对图像中的每个像素进行卷积,分别将中心像素与模板中心元素相对应,进行卷积运算。计算完成后,将两个卷积核所对应的计算结果进行比较,较大值为该点的输出位,然后选择合适的阈值以提取边缘。 对于一个图像模板邻域,如图:

水平方向卷积运算为

 

 垂直方向卷积运算为:

 

 梯度计算:

 当我们对图像中某一些特定方向上的边缘进行检测时,Sobel 算子在模板的定义上,做了相应的改进,提供了比如应用于检测 45°或者是 135°方向上边缘的算子模板。

 Sobel 算子检测图像边缘的实现

1) 获取原图像的数据区指针。
2) 新建两个缓冲区,其大小与原图像一样,用于存储原图像及其副本,以供后面的计算处理。同时将这两个区域初始化为原图像的副本。
3) 为两个缓存区域,分别设置一个用于卷积操作的 Sobel 算子模板,然后两个区域中,分别遍历副本图像中的所有像素,逐一进行卷积操作,计算结果。
4) 将上一步骤中所得到的两个缓存区域中的结果进行比较,将较大值重新赋值给图像中的像素点。
5) 将缓冲区中选择的图像复制到原图像数据区。
编程实现:
clear; 
%清空工作区变量 
I = imread('cameraman.tif'); 
%读取待处理图像文件 
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 算子 阈值 0.07’); 
%阈值为 0.07 的 Sobel 算子处理后图像
处理效果对比图,如图:

Prewitt 边缘检测算子
1、基本理论
根据临近影响像素的影响作用大小,而赋予不同的 权值,即离中心像素越近的像素,影响越大,权值也就越大。

 Prewitt 算子模板,如下图

 2、Prewitt 算子检测图像边缘的实现

1) 获取原图像的数据区指针。
2) 新建两个缓冲区,其大小与原图像一样,用于存储原图像及其副本,以供后面的计算处理。同时将这两个区域初始化为原图像的副本。
3) 为两个缓存区域,在每个区域中单独设置一个用于卷积操作的 Prewitt 模板,然后两个区域中,分别遍历副本图像中的所有像素,逐一进行卷积操作,计算结果。
4) 将上一步骤中所得到的两个缓存区域中的结果进行比较,将较大值重新赋值给图像中的像素点。
5) 将缓冲区中选择的图像复制到原图像数据区。
编程实现:
clear; 
%清空工作区变量 
I = imread('cameraman.tif'); 
%读取待处理图像文件 
subplot(131),imshow(I),title(‘原图像’); 
%显示待处理图像文件 
image = rgb2gray(I); 
%将图片转换成灰度图像 
IMAGE1 = edge ( image ,’Prewitt’); 
%image 为将要进行边缘检测目标图像,所使用的方法是 Prewitt 算子,而阈值则是
由系统自适应生成的 
subplot(132),imshow(IMAGE1),title(‘Prewitt 算子’); 
%显示 Prewitt 自动阈值边缘检测效果图像 
IMAGE2 = edge ( image , ‘Prewitt’,0.05); 
% image 为将要进行边缘检测目标图像,所使用的方法是 Prewitt 算子,而阈值设置
为 0.05 
subplot(133),imshow(IMAGE2),title(‘Prewitt 算子 阈值 0.05’); 
%输出阈值为 0.05 的 Prewitt 算子,边缘检测处理后图像
处理效果对比图,如图

Canny 边缘检测算子
1、基本理论
首先使用一定的方法来平滑图像,降低目标图像的噪声,在完成图像降噪处理之后,而后再计算、考察导数。使用一个成为信噪比(SNR)作为一个较为客观的评判标准,当然参数值越大越好。

2) 高的定位精度。如果检测结果图像中的边缘点,与之对应的真实边缘点之间的距离越小,他们越接近,那么就可以说明该算法的定位精度就越高。

 3) 边缘响应次数最少。降低边缘检测处理时,多个像素对单一像素边缘发生响应这种情况发生的概率,也就是要尽量做到一个像素对该边缘产生响应。

Canny 算子流程图,如图:

实现效果图样例

边缘检测算法:

我是海浪学长,创作不易,欢迎点赞、关注、收藏、留言。

毕设帮助,疑难解答,欢迎打扰!

最后

有关毕业设计-基于 MATLAB 的图像边缘检测算法的研究和实现的更多相关文章

  1. ruby-on-rails - Rails - 子类化模型的设计模式是什么? - 2

    我有一个模型:classItem项目有一个属性“商店”基于存储的值,我希望Item对象对特定方法具有不同的行为。Rails中是否有针对此的通用设计模式?如果方法中没有大的if-else语句,这是如何干净利落地完成的? 最佳答案 通常通过Single-TableInheritance. 关于ruby-on-rails-Rails-子类化模型的设计模式是什么?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.co

  2. ruby-on-rails - 使用 rails 4 设计而不更新用户 - 2

    我将应用程序升级到Rails4,一切正常。我可以登录并转到我的编辑页面。也更新了观点。使用标准View时,用户会更新。但是当我添加例如字段:name时,它​​不会在表单中更新。使用devise3.1.1和gem'protected_attributes'我需要在设备或数据库上运行某种更新命令吗?我也搜索过这个地方,找到了许多不同的解决方案,但没有一个会更新我的用户字段。我没有添加任何自定义字段。 最佳答案 如果您想允许额外的参数,您可以在ApplicationController中使用beforefilter,因为Rails4将参数

  3. ruby - RuntimeError(自动加载常量 Apps 多线程时检测到循环依赖 - 2

    我收到这个错误:RuntimeError(自动加载常量Apps时检测到循环依赖当我使用多线程时。下面是我的代码。为什么会这样?我尝试多线程的原因是因为我正在编写一个HTML抓取应用程序。对Nokogiri::HTML(open())的调用是一个同步阻塞调用,需要1秒才能返回,我有100,000多个页面要访问,所以我试图运行多个线程来解决这个问题。有更好的方法吗?classToolsController0)app.website=array.join(',')putsapp.websiteelseapp.website="NONE"endapp.saveapps=Apps.order("

  4. ruby-on-rails - 添加回形针新样式不影响旧上传的图像 - 2

    我有带有Logo图像的公司模型has_attached_file:logo我用他们的Logo创建了许多公司。现在,我需要添加新样式has_attached_file:logo,:styles=>{:small=>"30x15>",:medium=>"155x85>"}我是否应该重新上传所有旧数据以重新生成新样式?我不这么认为……或者有什么rake任务可以重新生成样式吗? 最佳答案 参见Thumbnail-Generation.如果rake任务不适合你,你应该能够在控制台中使用一个片段来调用重新处理!关于相关公司

  5. 叮咚买菜基于 Apache Doris 统一 OLAP 引擎的应用实践 - 2

    导读:随着叮咚买菜业务的发展,不同的业务场景对数据分析提出了不同的需求,他们希望引入一款实时OLAP数据库,构建一个灵活的多维实时查询和分析的平台,统一数据的接入和查询方案,解决各业务线对数据高效实时查询和精细化运营的需求。经过调研选型,最终引入ApacheDoris作为最终的OLAP分析引擎,Doris作为核心的OLAP引擎支持复杂地分析操作、提供多维的数据视图,在叮咚买菜数十个业务场景中广泛应用。作者|叮咚买菜资深数据工程师韩青叮咚买菜创立于2017年5月,是一家专注美好食物的创业公司。叮咚买菜专注吃的事业,为满足更多人“想吃什么”而努力,通过美好食材的供应、美好滋味的开发以及美食品牌的孵

  6. Matlab imread()读到了什么 (浅显 当复习文档了) - 2

    matlab打开matlab,用最简单的imread方法读取一个图像clcclearimg_h=imread('hua.jpg');返回一个数组(矩阵),往往是a*b*cunit8类型解释一下这个三维数组的意思,行数、数和层数,unit8:指数据类型,无符号八位整形,可理解为0~2^8的数三个层数分别代表RGB三个通道图像rgb最常用的是24-位实现方法,即RGB每个通道有256色阶(2^8)。基于这样的24-位RGB模型的色彩空间可以表现256×256×256≈1670万色当imshow传入了一个二维数组,它将以灰度方式绘制;可以把图像拆分为rgb三层,可以以灰度的方式观察它figure(1

  7. 区块链之加解密算法&数字证书 - 2

    目录一.加解密算法数字签名对称加密DES(DataEncryptionStandard)3DES(TripleDES)AES(AdvancedEncryptionStandard)RSA加密法DSA(DigitalSignatureAlgorithm)ECC(EllipticCurvesCryptography)非对称加密签名与加密过程非对称加密的应用对称加密与非对称加密的结合二.数字证书图解一.加解密算法加密简单而言就是通过一种算法将明文信息转换成密文信息,信息的的接收方能够通过密钥对密文信息进行解密获得明文信息的过程。根据加解密的密钥是否相同,算法可以分为对称加密、非对称加密、对称加密和非

  8. 基于C#实现简易绘图工具【100010177】 - 2

    C#实现简易绘图工具一.引言实验目的:通过制作窗体应用程序(C#画图软件),熟悉基本的窗体设计过程以及控件设计,事件处理等,熟悉使用C#的winform窗体进行绘图的基本步骤,对于面向对象编程有更加深刻的体会.Tutorial任务设计一个具有基本功能的画图软件**·包括简单的新建文件,保存,重新绘图等功能**·实现一些基本图形的绘制,包括铅笔和基本形状等,学习橡皮工具的创建**·设计一个合理舒适的UI界面**注明:你可能需要先了解一些关于winform窗体应用程序绘图的基本知识,以及关于GDI+类和结构的知识二.实验环境Windows系统下的visualstudio2017C#窗体应用程序三.

  9. LC滤波器设计学习笔记(一)滤波电路入门 - 2

    目录前言滤波电路科普主要分类实际情况单位的概念常用评价参数函数型滤波器简单分析滤波电路构成低通滤波器RC低通滤波器RL低通滤波器高通滤波器RC高通滤波器RL高通滤波器部分摘自《LC滤波器设计与制作》,侵权删。前言最近需要学习放大电路和滤波电路,但是由于只在之前做音乐频谱分析仪的时候简单了解过一点点运放,所以也是相当从零开始学习了。滤波电路科普主要分类滤波器:主要是从不同频率的成分中提取出特定频率的信号。有源滤波器:由RC元件与运算放大器组成的滤波器。可滤除某一次或多次谐波,最普通易于采用的无源滤波器结构是将电感与电容串联,可对主要次谐波(3、5、7)构成低阻抗旁路。无源滤波器:无源滤波器,又称

  10. MIMO-OFDM无线通信技术及MATLAB实现(1)无线信道:传播和衰落 - 2

     MIMO技术的优缺点优点通过下面三个增益来总体概括:阵列增益。阵列增益是指由于接收机通过对接收信号的相干合并而活得的平均SNR的提高。在发射机不知道信道信息的情况下,MIMO系统可以获得的阵列增益与接收天线数成正比复用增益。在采用空间复用方案的MIMO系统中,可以获得复用增益,即信道容量成倍增加。信道容量的增加与min(Nt,Nr)成正比分集增益。在采用空间分集方案的MIMO系统中,可以获得分集增益,即可靠性性能的改善。分集增益用独立衰落支路数来描述,即分集指数。在使用了空时编码的MIMO系统中,由于接收天线或发射天线之间的间距较远,可认为它们各自的大尺度衰落是相互独立的,因此分布式MIMO

随机推荐