3.1 图像边缘检测简介
图像边缘是图像中重要特性(如像素灰度、纹理等)分布的不连续处,图像周围特性有阶跃变化或屋脊状变化的那些像素集合。图像的边缘部分集中了图像的大部分信息,一幅图像的边缘结构与特点往往是决定图像特质的重要部分。图像边缘的另一个定义是指其周围像素灰度变化不连续的那些像素的集合。边缘广泛存在于物体与背景之间、物体与物体之间,因此,边缘是图像分割及图像识别中的重要特征。
图像边缘检测主要用于增强图像中的轮廓边缘、细节以及灰度跳变部分,形成完整的物体边界,达到将物体从图像中分离出来或将表示同一物体表面的区域检测出来的目的。目前为止最通用的方法是检测亮度值的不连续性,用一阶和二阶导数检测的。
3.2 图像边缘检测matlab实现
语法规则:B=edge(A,method)
A:原图像,B:结果图像,method:边缘化方法算子的名称;
算子:Sobel、log、Roberts、Canny、Prewitt、Zerocross
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表示
自定义边缘检测关键代码:
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);
总代码:
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