前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >大神带你玩转matlab图像处理(二)

大神带你玩转matlab图像处理(二)

作者头像
巴山学长
发布2020-02-17 15:03:43
9960
发布2020-02-17 15:03:43
举报
文章被收录于专栏:巴山学长巴山学长

第三章:图像边缘检测

3.1 图像边缘检测简介

图像边缘是图像中重要特性(如像素灰度、纹理等)分布的不连续处,图像周围特性有阶跃变化或屋脊状变化的那些像素集合。图像的边缘部分集中了图像的大部分信息,一幅图像的边缘结构与特点往往是决定图像特质的重要部分。图像边缘的另一个定义是指其周围像素灰度变化不连续的那些像素的集合。边缘广泛存在于物体与背景之间、物体与物体之间,因此,边缘是图像分割及图像识别中的重要特征。

图像边缘检测主要用于增强图像中的轮廓边缘、细节以及灰度跳变部分,形成完整的物体边界,达到将物体从图像中分离出来或将表示同一物体表面的区域检测出来的目的。目前为止最通用的方法是检测亮度值的不连续性,用一阶和二阶导数检测的。

3.2 图像边缘检测matlab实现

语法规则:B=edge(A,method)

A:原图像,B:结果图像,method:边缘化方法算子的名称;

算子:Sobel、log、Roberts、Canny、Prewitt、Zerocross

代码语言:javascript
复制
clc;clear;
s=what;
p=s.path;
I=imread([p,'\图像素材\','lenaRGB.bmp']);
I1=rgb2gray(I);
BW1 = edge(I1,'Sobel');%sobel边缘检测算子
BW2 = edge(I1,'roberts'); %Roberts边缘检测算子 
BW3 = edge(I1,'prewitt'); %prewitt边缘检测算子 
BW4 = edge(I1,'log');%log边缘检测算子
BW5 = edge(I1,'canny');%canny边缘检测算子 
BW6 = edge(I1,'zerocross');%zerocross边缘检测算子
subplot(2,4,1),imshow(I),title('原图','FontSize',16); 
subplot(2,4,2),imshow(I1),title('灰度图','FontSize',16); 
subplot(2,4,3),imshow(BW1),title('sobel','FontSize',16) 
subplot(2,4,4),imshow(BW2),title('roberts','FontSize',16) 
subplot(2,4,5),imshow(BW3),title('prewitt','FontSize',16) 
subplot(2,4,6),imshow(BW4),title('log','FontSize',16) 
subplot(2,4,7),imshow(BW5),title('canny','FontSize',16)
subplot(2,4,8),imshow(BW5),title('zerocross','FontSize',16)

运行结果

3.3 自定义图像边缘检测算法

为了让小伙伴深入了解边缘检测算法,在此教大家如何自定义边缘检测算法。

思路:一个彩色三通道的图像灰度化之后,图像除去最边缘像素点以外的,任意一个像素点与其上、下、左、右的像素点值之差的绝对值只要有一个大于设定的阀值flag就取其为边缘点。

比如:设定阀值为20;

abs(160-173)=13<20

abs(160-174)=14<20

abs(160-169)=9<20

abs(160-101)=59>20

其中有一个像素点之间差值的绝对值大于20,我们就认为160这个像素点为边缘点

数学模型如下图:

注意:此图行用x表示,列用y表示

自定义边缘检测关键代码:

代码语言:javascript
复制
index=find(abs(I1(x,y)-I1(x-1,y))>flag...
           |abs(I1(x,y)-I1(x,y-1))>flag...
           |abs(I1(x,y)-I1(x,y+1))>flag...
           |abs(I1(x,y)-I1(x+1,y))>flag);

总代码:

代码语言:javascript
复制
clc;clear;
s=what;
p=s.path;
I=imread([p,'\图像素材\','lenaRGB.bmp']);
I1=rgb2gray(I);
[m,n]=size(I1);
x=2:m-1;
y=2:n-1;
flag=20;%阀值
index=find(abs(I1(x,y)-I1(x-1,y))>flag...
           |abs(I1(x,y)-I1(x,y-1))>flag...
           |abs(I1(x,y)-I1(x,y+1))>flag...
           |abs(I1(x,y)-I1(x+1,y))>flag);
edge=ones(m-2,n-2);
edge(index)=0;
subplot(1,3,1),imshow(I);title('原始图像');
subplot(1,3,2),imshow(I1);title('灰度图像');
subplot(1,3,3),imshow(edge,[]);title('自定义边缘图像');

运行结果

注意:代码中x=2:m-1;y=2:n-1;为设定的边缘检测显示图像的大小,因为x、y所取的点不能是最上、最下、最左和最右边的点,所以边缘检测的图像比原图的长宽各小2个单位,如下图红色区域代表边缘检测的图像大小,自定义的边缘检测大小始终比原图像小。具体小几个单位,可以自己设定,但是长宽最小只能是2个单位。

具体可以根据变量看出,边缘检测的图像比原图像小。

以上就是今天介绍的图像处理推文全部内容,后期小编会陆续更新系统的matlab图像处理推文,希望大家持续关注,如有错误或者不懂的地方,可以留言评论,小编当竭诚为大家服务解答疑惑。

参考资料:

https://blog.csdn.net/zzx2016zzx/article/details/80741266

图片来源:https://en.wikipedia.org/wiki/Lena_Forsén

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-01-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 巴山学长 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 第三章:图像边缘检测
相关产品与服务
图像处理
图像处理基于腾讯云深度学习等人工智能技术,提供综合性的图像优化处理服务,包括图像质量评估、图像清晰度增强、图像智能裁剪等。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档