边缘检测是图像处理和计算机视觉中的基本问题,边缘检测的目的是标识数字图像中亮度变化明显的点。本文给出edge和bwmorph两个函数进行边缘检测的基本用法,并给出一个应用示例。
edge和bwmorph是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是指定的形态学操作类型。
操作类型:包括细化(thin)、去除内部像素(remove)、去除毛刺(spur)等。
下面给出读入coins.png并进行边缘检测的MATLAB代码。
%基于edge和bwmorph的两种边缘检测方法
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('数学形态学方法提取边缘')
由上面可知,对coins.png图像边缘提取来讲,使用bwmorph效果要好一些。但要注意,对不同的图像用相同的方法处理结果可能不一样。
如果你觉得本文对学习和研究有帮助,请关注、点赞和收藏,谢谢大家!