图像边缘检测几种方法(算子)的总结(MATLAB)

图像分割技术

图像分割技术,顾名思义,就是将一幅数字图像分割成不同的区域,主要包括:图像边缘分割技术,阈值分割技术和区域分割技术。
这里先简单介绍一下边缘分割技术。

边缘分割技术的介绍

边缘检测是检测图像特性发生变化的位置,比如图像在边界处会有明显的不同,边缘分割技术就是检测出不同区域的边界来进行分割,常见的边缘检测方法包括有微分算子,Canny算子和LOG算子等,其中微分算子常用的有Sobel算子,Roberts算子和Prewitt算子,下面对几种算子的用法和调用格式进行详细的介绍(理论基础略过,可自行百度)。

几种算子及调用格式的介绍

算子:将图像点(x,y)某个邻域中每个像素值都与模板中对应的系数相乘,然后将结果进行累加,得到该点的新像素值。如果邻域的大小为m×n,则共有m×n个系数,这些系数组成的矩阵,就称为模板或算子。通常采用的算子为3×3
在这里插入图片描述

注:边缘检测采用的函数为edge(),只需变换算子即可,且得到的BW图像均为二值图像,即只有黑白两种颜色值

(1)微分算子
——Roberts算子:由以下两个模板组成
在这里插入图片描述matlab中调用格式为:
①BW=edge(I,‘roberts’);
②BW=edge(I,‘roberts’,thresh);
thresh为分割阈值,函数会忽略小于thresh的像素值
③[BW,thresh]=edge(I,‘roberts’,…);

——Prewitt算子:由以下两个模板组成,分别代表图像的水平梯度和垂直梯度在这里插入图片描述matlab中调用格式为:
①BW=edge(I,‘prewitt’);
②BW=edge(I,‘prewitt’,thresh);
③BW=edge(I,‘prewitt’,thresh,direction);
direction是对方向进行设置,可以取值为水平horizontal,垂直vertical和both,默认为both
④[BW,thresh]=edge(I,‘prewitt’,…);

——Sobel算子:由以下两个模板组成
在这里插入图片描述matlab中调用格式为:
①BW=edge(I,‘sobel’);
②BW=edge(I,‘sobel’,thresh);
③BW=edge(I,‘sobel’,thresh,direction);
④[BW,thresh]=edge(I,‘sobel’,…);

注:可以看出调用格式基本类似,只需要换掉所需要的算子即可

(2)Canny算子
优点:低误码率,高定位精度,抑制虚假边缘等
matlab中调用格式为:
①BW=edge(I,‘canny’);
②BW=edge(I,‘canny’,thresh);
③BW=edge(I,‘canny’,thresh,sigma);sigma为高斯滤波器的标准差,默认值为1
④[BW,thresh]=edge(I,‘canny’,…);

(3)LOG算子
优点:边界定位精度高,抗干扰能力强,连续性好
matlab中调用格式为:
①BW=edge(I,‘log’);
②BW=edge(I,‘log’,thresh);
③BW=edge(I,‘log’,thresh,sigma);sigma为LOG滤波器的标准差,默认值为2
④[BW,thresh]=edge(I,‘log’,…);

应用实例

(1)微分算子:
这里用prewitt算子举例,其他算子应用方法一样

close all;clear all;clc;
I=imread('cameraman.tif');
I=im2double(I);
[J1,thresh]=edge(I,'prewitt',[],'both');
[J2,thresh]=edge(I,'prewitt',[],'horizontal');
[J3,thresh]=edge(I,'prewitt',[],'vertical');
figure('NumberTitle','off','Name','prewitt算子进行边缘检测');
subplot(221);imshow(I);title('原始图像');
subplot(222);imshow(J1);title('采用prewitt算子进行边缘检测,方向为水平和垂直');
subplot(223);imshow(J2);title('采用prewitt算子进行边缘检测,方向为水平');
subplot(224);imshow(J3);title('采用prewitt算子进行边缘检测,方向为垂直');

在这里插入图片描述
(2)Canny算子和LOG算子:
对添加了噪声的图像进行边缘检测

clear all; close all;
I=imread('cameraman.tif');
I=im2double(I);
J=imnoise(I, 'gaussian', 0, 0.001);
[BW1,thresh]=edge(J, 'canny');
[BW2,thresh]=edge(J, 'log', [], 2.3);
figure;
subplot(131);  imshow(J);title('原图');
subplot(132);  imshow(BW1);title('采用Canny算子边缘检测');
subplot(133);  imshow(BW2);title('采用LOG算子边缘检测');

在这里插入图片描述

  • 19
    点赞
  • 164
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值