上一讲小白为小伙伴们带来了如何使用自编函数和自带函数对图像进行滤波,去除图像的噪声。这次小白为大家带来滤波的新用处——边缘提取。

什么是图像边缘

所谓图像边缘(Edlge)是指图像局部特性的不连续性,例如,灰度级的突变,颜色的突变,纹理结构的突变等。边缘广泛存在于目标与目标、物体与背景、区域与区域(含不同色彩)之间,它是图像分割所依赖的重要特征。

小白今天主要介绍几种典型的图像灰度值突变的边缘检测方法,其原理也适用用于其他特性突变的边缘检测。图像的边缘通常与图像灰度的一阶导数的不连续性有关。图像灰度的不连续性可分为两类:阶跃不连续,即图像灰度在不连续处的两边的像素灰度有明显的差异。线条不连续,即图像灰度突然从一个值变化到另一个值,保持一个较小的行程又返回到原来的值。但是在实际中,阶跃和线条边缘图像是较少见的,由于空间分辨率(尺度空间)、图像传感器等原因会使阶跃边缘变成斜坡形边缘,线条边缘变成房顶形边缘。它们的灰度变化不是瞬间的而是跨越一定距离的。几种边缘类型,可以通过下面的图片有个更清晰的认识。

Sobel算子

在前面的关于图像滤波的讲解中,小白为大家介绍了sobel算子模板,但是没有讲解其具体作用。这次的讲解中,小白将为大家讲解什么是sobel算子。

sobel算子是一阶的梯度算子,也就是对信号求取一阶导数,对噪声具有平滑作用,提供较为精确的边缘方向信息,但是边缘定位精度不够高;但是该种方法比较简单,容易实现,也比较容易理解。

对一个连续函数求导是一件比较容易的事情,但是图像中的数据都是数字化之后的数据,是离散的,因此对于求导就需要使用差分方式:前面的像素灰度值减去后面像素的灰度值,并将结果大于一定阈值的设为边缘,否则就不是边缘。我们用数学公式表示就是:I(x,y)-I(x-n,y)。公式给出的是两个像素在同一行中,两个像素也可以在同一列中,而且方向也可以更改。

根据之前的模板来看的话,只有一个维度的求导可以用如下的模板表示:

可以用上面两个模板分别对原图像求取横着和竖着边缘,之后对两者求并集,便是图像整体的边缘。但是细心的小伙伴肯定会发现,模板之后两个元素,以哪个元素作为模板的中心呢?为了解决这个问题,研究者将其进行了扩展,变为以下的模板:

模板长度变为奇数便可以解决模板没有“中心”的问题。后续经过各种演化,最终变为前面几讲中提到的模板的样子。小伙伴在使用的过程中可以直接使用其模板就可以,而且Matlab也是带有sobel边缘提取的函数,不需要小伙伴自己编写复杂的程序。

常用的sobel边缘提取模板

Roberts算子

其实很多种算子都借鉴了sobel方法的思想,Roberts算子检测方法对具有陡峭的低噪声的图像处理效果较好,但是利用roberts算子提取边缘的结果是边缘比较粗,因此边缘的定位不是很准确。我们直接给出Roberts算子的模板:

通过模板我们也能看出来,该算法是采用检测斜着方向的梯度变化来判定图像的边缘。

Canny算子

Canny算子是目前边缘检测最常用的算法,效果也是最理想的。但是Canny边缘检测算法不是简单的模板卷积而已,通过梯度方向和双阈值法来检测边缘点,具体算法讲解,可以通过点击”原文阅读“来了解更多:

Canny方法不容易受噪声干扰,能够检测到真正的弱边缘。优点在于,使用两种不同的阈值分别检测强边缘和弱边缘,并且当弱边缘和强边缘相连时,才将弱边缘包含在输出图像中。

Matlab边缘提取

Matlab提供多种边缘检测方法,通过函数edge(image,'method')来实现图像的边缘提取,通过修改参数‘method’来实现不同滤波方法。具体的边缘检测代码如下:

I=imread('lena.bmp');%  提取图像

I=rgb2gray(I);%将彩色图转换灰度图

BW1=edge(I,'sobel'); %用SOBEL算子进行边缘检测

BW2=edge(I,'roberts');%用Roberts算子进行边缘检测

BW3=edge(I,'prewitt'); %用prewitt算子进行边缘检测

BW4=edge(I,'log'); %用log算子进行边缘检测

BW5=edge(I,'canny'); %用canny算子进行边缘检测

subplot(2,3,1), imshow(BW1);

title('sobel edge check');

subplot(2,3,2), imshow(BW2);

title('roberts edge check');

subplot(2,3,3), imshow(BW3);

title('prewitt edge check');

subplot(2,3,4), imshow(BW4);

title('log edge check');

subplot(2,3,5), imshow(BW5);

title('canny edge check');

将上述代码复制到Matalb里,把图像地址改成自己想要提取边缘的图像,运行之后便可的得到图像边缘。小白在自己的电脑上运行程序的结果如下图。在程序里也利用其他算子提取了边缘,方便小伙伴的对比。

总结

图像的边缘提取是对像素灰度值连续性、变化大小的检测,不同边缘检测的方法各有优缺点,需要根据实际的情况来选择提取边缘的方法。

相关阅读:

matlab中图像边缘提取,Matlab图像处理(五)——图像边缘提取相关推荐

  1. matlab如何输出一个函数的图像,在matlab中如何输出一个函数的图像

    点击查看在matlab中如何输出一个函数的图像具体信息 答:A. imread imread函数用于读入各种图像文件,其一般的用法为 [X,MAP]=imread('filename','fmt')其 ...

  2. matlab中插入希腊,matlab中希腊字母打法

    如何在matlab中输入希腊字母_数学_自然科学_专业资料.matlab数据可视化处理,绘图技巧 如何在 matlab 中输入希腊字母 matlab 中用转义符来输入希腊字母的方法 上标用 ..... ...

  3. matlab excel导入矩阵,如何将excel中数据导入到matlab中!Excel导入matlab生成矩阵

    如何将excel中数据导入matlab并存入数组中 使用Matlab中的Excel Link就可以了. 如果使用Excel 2003版本,操作如下: 1 打开Excel. 2 在菜单栏中选择→加载项→ ...

  4. matlab中特殊字符6,matlab中特殊字符

    matlab特殊字符_工学_高等教育_教育专区.本文说明了matlab中如何输入特殊字符,如希腊字母字符映射表 C:\\WINDOWS\\system32\\charmap.exe M 文件里是可以输 ...

  5. matlab中如何将视频保存成图像

    利用MATLAB将视频的每一帧保存成一幅图像,并自动命名.本文方法简单,容易学习. 首先,读入视频.代码如下: mov = VideoReader('xxxxxx.avi'); % 将xxxxxx.a ...

  6. matlab中如何求分段函数的图像

    MATLA中如何求分段函数的图像 比如我们有如下分段函数 方法一.使用综合表达式 clear;clf; x=-10:0.1:10; y=x.2+(10+x).(1/4)+3.(x>0)+0.(x ...

  7. matlab中wenergy函数,MATLAB 7.0图形图像处理

    第1章 MATLAB 7.O基础 1.1 MATLAB语言介绍 1.1.1 MATLAB产品系列与特点 1.1.2 MATLAB 7.0的新特点 1.2 MATLAB编程环境 1.2.1 初识MATL ...

  8. quad8是matlab中调用那个,Matlab 数值积分

    MATLAB数值积分与微分 8.1 数值积分 8.1.1 数值积分基本原理 求解定积分的数值方法多种多样,如简单的梯形法.辛普生(Simpson)法.牛顿-柯特斯(Newton-Cotes)法等都是经 ...

  9. matlab中hold all,matlab中hold on的使用方法

    matlab中hold on的使用方法 发布时间:2020-08-15 14:01:54 来源:亿速云 阅读:107 作者:小新 小编给大家分享一下matlab中hold on的使用方法,希望大家阅读 ...

  10. MATLAB中hough反变换,matlab中hough变换

    hough 变换提取直线(Matlab 实现) Hough 变换提取直线一.实验目标实现用 Hough 变换检测直线的算法二.实验内容 1.读入图像选取有较多直线及部分曲线以作对比的...... j= ...

最新文章

  1. 【Qt】错误GL/gl.h: No such file or directory的解决方法(以及cannot find -lGL解决方法)
  2. zabbix 客户端安装
  3. Hadoop学习笔记—7.计数器与自定义计数器
  4. 程序员入错行怎么办?
  5. k8s集群部署一(最新版docker安装)
  6. 15.QT布局管理及示例
  7. 【VMCloud云平台】SCVMM配置(九)创建Web服务模板
  8. matlab矩阵对某一列求和,将矩阵中的每一列与另一列中的对应行相乘,然后在Matlab中求和...
  9. [网络安全自学篇] 八十.WHUCTF之WEB类解题思路WP(代码审计、文件包含、过滤绕过、SQL注入)
  10. UVa 1368 - DNA Consensus String
  11. [css] 为什么伪类的content不能被选中?
  12. 控制台文字对战游戏 初始版
  13. 当自动化遇见数字化——德资企业儒拉玛特的数字化实践
  14. 计算机名称 steam,Steam电脑配置排名:前19名都是N卡
  15. 模拟按键——在Python使用pynput库
  16. 51CTO博客改版日记(目录) 2006年 by小废
  17. 【非参数统计】概念及方法归纳比较(超适合期末复习)
  18. 攻防世界逆向入门题之getit
  19. 文档没保存可以找回吗?文件丢失恢复方法
  20. 【渝粤教育】国家开放大学2018年秋季 1326T社区护理学(本) 参考试题

热门文章

  1. bmi系统模块设计java_BMI体脂计算器 app源码
  2. c语言教程+school,w3school教程整理
  3. AWS re:Invent 2018 参会攻略
  4. 巧用PDF编辑器裁剪功能去除PDF广告
  5. 「硬见小百科」电子元器件图片识别(电容篇)
  6. percona-xtrabackup
  7. 零基础自学Java编程大概需要多久时间?
  8. 如何通过QQ进行手机号溯源
  9. python恢复手机数据的软件_有什么万能的手机数据恢复软件吗?
  10. 重识Nginx - 系列导读