基于edge和bwmorph函数的两种图像边缘检测方法及应用
创始人
2024-11-15 09:11:50
0

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

一、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效果要好一些。但要注意,对不同的图像用相同的方法处理结果可能不一样。

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

相关内容

热门资讯

Excel函数基础(二) 1、单元格名称框选单元格(不含标题),公式选项卡->定义名...
Shell编程——基础语法(2... 文章目录基础语法(2)echo命令read命令printf命令test命...
C++面试---小米 一、static 关键字的作用,及和const的区别 static关键字作用ÿ...
git使用及代码规范 参考链接git flow 简介代码审核的典型问题gitlab工作流
【2024】Datawhale... 【2024】Datawhale AI夏令营 Task3笔记——Baseline2部分代码解读及初步上...
2023-2024年 Java... 在各行各业中,面试前我们总会思索一个问题:究竟什么样的求职者能获得面试官...
arkhamintellige... 大家好!我是爱摸鱼的小鸿,关注我,收看每期的编程干货。 逆向是爬虫工程师进阶必备技能,当我们遇到一个...
【第八天】DNS及其查询过程 DNS及其查询过程什么是DNS?一般我们的主机,服务器都有一个ip地址&...
LCR 083. 全排列 题目给定一个不含重复数字的整数数组 nums ,返回其 所有可能的全排列 。可以 按任...
C++——C++11 前言:本篇文章将分享一些C++11版本所产生的一些新的技术以及对老版本...