基于edge、bwmorph和bwboundaries函数的三种图像边缘检测方法及应

       边缘检测是图像处理计算机视觉中的基本问题,边缘检测的目的是标识数字图像中亮度变化明显的点。本文给出edge、bwmorph和bwboundaries三个函数进行边缘检测的基本用法,并给出一个应用示例。

一、edge和bwmorph函数简介

edgebwmorph是MATLAB中用于图像处理边缘检测中的两个常用函数。

1. edge函数

edge函数是MATLAB中用于边缘检测的基本函数。它可以根据指定的边缘检测算法(如Sobel、Prewitt、Roberts、log、zerocross、Canny等)来检测图像中的边缘。边缘检测的目的是标识出图像中亮度变化明显的点,这些点通常对应于物体的边界。基本用法:BW = edge(I, 'method'),其中I是输入图像,'method'是指定的边缘检测算法。

2. bwmorph函数

bwmorph函数用于对二值图像进行形态学操作。它可以根据指定的操作类型(如thin、remove、spur等)对二值图像进行处理,以改善边缘的形状或去除不需要的部分。

基本用法:BW2 = bwmorph(BW, operation),其中BW是输入的二值图像,operation是指定的形态学操作类型。

3.bwboundaries函数

bwboundaries函数用于跟踪二值图像中的对象边界基本用法:B= bwboundaries(BW),其中BW是输入的二值图像。

B= bwboundaries(BW)跟踪二值图像BW中对象的外边界以及这些对象内部孔洞的边界。bwboundaries还跟踪父对象完全包围的子对象的外边界和孔洞边界。该函数返回由边界像素位置组成的元胞数组B为边界的特性分析(如边缘曲率计算和边缘突变点检测)提供了便利。下图说明了这些分量

操作类型:包括细化(thin)、去除内部像素(remove)、去除毛刺(spur)等。

下面给出读入coins.png并进行边缘检测的MATLAB代码。

二、程序代码

%基于edge、bwmorph和bwboundaries的三种边缘检测方法
clear all;
close all;
clc;
I = imread('coins.png');
imshow(I)
BW1 = edge(I,'sobel');
BW2 = edge(I,'canny');
figure('Name','基于edge的边缘检测','NumberTitle','off');
subplot(1,3,1),imshow(I),title('原始图像');
subplot(1,3,2),imshow(BW1),title('使用sobel算子检测边缘');
subplot(1,3,3),imshow(BW2),title('使用canny算子检测边缘');
BW=imbinarize(I);  %进行图像二值化
figure,imshow(BW);
BWfill=imfill(BW,'holes');%填充孔洞
figure,imshow(BWfill);
se = strel('disk',2);
afterOpening=imopen(BWfill,se);%开运算进行图像平滑
figure,imshow(afterOpening);
coinsEdge1=bwmorph(afterOpening,'remove');%去除内部像素(无背景像素相邻的前景像素)
figure,imshow(coinsEdge1);
coinsEdge2=bwmorph(coinsEdge1,'thin',inf);%将物体细化至最低限度相连的线形
figure,imshow(coinsEdge2);
figure('Name','基于bwmorph的边缘检测','NumberTitle','off');
subplot(2,2,1),imshow(I),title('原始图像');
subplot(2,2,2),imshow(BW1),title('图像二值化');
subplot(2,2,3),imshow(BWfill),title('孔洞填充');
subplot(2,2,4),imshow(coinsEdge2),title('数学形态学方法提取边缘');
 [B,L]=bwboundaries(afterOpening,'noholes');%返回由边界像素位置组成的元胞数组B和标签矩阵L
 figure,imshow(label2rgb(L, @jet, [.5 .5 .5])) %不同颜色显示目标区域
 hold on
for k = 1:length(B)
   boundary = B{k};
   plot(boundary(:,2), boundary(:,1), 'w', 'LineWidth', 1),title('基于bwboundaries的边界显示')

%显示线宽为1的白色边界
end

三、部分运行结果

四、结果分析

       由上面可知,对coins.png图像边缘提取来讲,使用bwmorph效果要好一些。但要注意,对不同的图像用相同的方法处理结果可能不一样。

       如果你觉得本文对学习和研究有帮助,请关注、点赞和收藏,谢谢大家!

  • 27
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值