基于edge和bwmorph函数的两种图像边缘检测方法及应用

news2024/11/14 22:44:52

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

一、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是指定的形态学操作类型。

操作类型:包括细化(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效果要好一些。但要注意,对不同的图像用相同的方法处理结果可能不一样。

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1972497.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Datawhale AI 夏令营(2024第三期)AI+逻辑推理方向 模型微调学习笔记

如何基于开源大模型进行优化 1. Prompt工程 大模型可能知道问题相关,但是我们问的不清楚。所以需要根据我们的提问,构建出一个比较结构化的、大模型易于理解和分析的提问内容。 在下方的第二个资料里,我才知道有这么多Prompt的构建思路&…

认真学习JVM中类加载过程

本文我们总结JVM中类加载器子系统关于类加载过程,这里默认是Oracle的Hotspot。 【1】类加载器子系统作用 类加载器子系统负责从文件系统或者网络中加载Class文件,class文件在文件开头有特定的文件标识。 ClassLoader只负责class文件的加载&#xff0…

软件测试——测试分类(超超超齐全版)

为什么要对软件测试进行分类 软件测试是软件⽣命周期中的⼀个重要环节,具有较⾼的复杂性,对于软件测试,可以从不同的⻆度加以分类,使开发者在软件开发过程中的不同层次、不同阶段对测试⼯作进⾏更好的执⾏和管理测试的分类⽅法。…

见证中国数据库的崛起:从追赶到引领的壮丽征程《一》

见证中国数据库的崛起:从追赶到引领的壮丽征程《一》 一、追溯历史:中国数据库发展的艰难起步萌芽阶段(20世纪70年代末-80年代初)起步阶段(20世纪80年代中期-90年代初)发展阶段(20世纪90年代中期…

实验2-1-7 输出倒三角图案

本题要求编写程序&#xff0c;输出指定的由“*”组成的倒三角图案。 输出格式: * * * ** * ** **程序&#xff1a; #define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> int main() {for (int i 0; i < 4; i) {for (int k 0; k < i; k) {printf(" &qu…

YOLO:目标检测模型的训练和推理(简单Demo)

作者&#xff1a;CSDN _养乐多_ 本文将介绍如何训练和推理YOLO模型。使用coco8数据集以一个简单的demo进行示例。 文章目录 一、准备1.1 模型类型1.2 环境配置 二、模型训练和推理三、讨论 一、准备 1.1 模型类型 YOLO8模型性能数据&#xff1a; ModelSize (pixels)mAPval…

ICC2:分段长tree简易版教程

我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧? 拾陆楼知识星球入口 分段长tree让一部分sink balance的更好,有助于时序收敛,但ICC2的分段长tree需要单独写一个sdc去做sub tree再换回原始sdc去长tree,流程繁琐,我整理了一个简单的流程,不需要额外的sdc,唯一的缺…

Linux系统如何查看版本信息,内核、发行版、cpu、所有版本

查看当前操作系统内核信息&#xff1a;uname -a查看当前操作系统版本信息&#xff1a;cat /proc/version查看当前操作系统发行版信息&#xff1a; cat /etc/redhat-release 或 cat /etc/issue查看cpu相关信息&#xff0c;包括型号、主频、内核信息等&#xff1a;cat /proc/cpui…

【ARM】SMMU:boot_code.s中转换页表的配置方式

#工作记录# 拖了非常久的页表转换整理&#xff0c;补坑&#xff01;废话不多说开整。 MMU相关的知识点可以参考我之前的博客&#xff0c;这篇博客主要介绍如何在boot_code.s中配置页表。 目录 1.boot_code.s简介 2. MMU配置相关 2.1系统寄存器 2.2 ttb0_base的配置 1.boo…

设计模式的优点

设计模式的优点 1、可重用性2、架构指导3、经验传承4、设计透明5、实践验证 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 1、可重用性 设计模式允许开发者在遇到相似问题时复用解决方案&#xff0c;节省时间并减少错误。 2、架构指导 …

汽车网络安全 -- MAC介绍:CMAC与CBC-MAC不能混为一谈

目录 1.什么是MAC 2.CMAC 3.HMAC 4.小结 1.什么是MAC MAC全称Message authentication code&#xff0c;是经过特定算法后产生的一小段数据信息&#xff0c;用于校验某数据的完整性和真实性。在数据传递过程中&#xff0c;可检查其内容是否被更改过&#xff0c;不管更改的原…

C语言——分支结构程序设计

分支结构程序设计&#xff08;选择结构&#xff09; 定义&#xff1a;根据条件是否成立&#xff0c;选择相应的操作 条件判断&#xff1a;根据某个条件成立与否&#xff0c;决定是否执行指定的任务。 选择结构中的常见形式&#xff1a; if&#xff08;关系表达式&#xff09…

含锡废水处理的主体处理

含锡废水处理是一个综合性的环保过程&#xff0c;旨在去除废水中的锡离子和其他有害物质&#xff0c;确保废水达到国家排放标准。以下是对含锡废水处理技术的详细阐述&#xff1a; 一、处理技术概述 含锡废水处理技术主要包括化学法、生物法和物理法三大类。每种方法都有其独特…

论文阅读:HuggingGPT: Solving AI Tasks with ChatGPT and its Friends in Hugging Face

HuggingGPT: Solving AI Tasks with ChatGPT and its Friends in Hugging Face https://proceedings.neurips.cc/paper_files/paper/2023/file/77c33e6a367922d003ff102ffb92b658-Paper-Conference.pdf HuggingGPT: 解决与ChatGPT及其在Hugging Face的朋友们相关的AI任务 Yon…

乐尚代驾十订单支付

账单信息 司机结束代驾之后&#xff0c;生成账单&#xff08;包含账单信息和分账信息&#xff09;司机发送账单给乘客乘客获取账单之后&#xff0c;进行支付 获取账单信息 order_bill表记录的账单信息&#xff0c;我们直接获取即可 Operation(summary "根据订单id获…

递归~~~

一.定义 计算机科学中&#xff0c;递归是一种解决计算问题的方法&#xff0c;其中解决方案取决于同一类问题的更小子集。 比如单链表递归遍历的例子&#xff1a; void f(Node node){if (node null){return;}f(node.next);} 说明&#xff1a; 1.自己调用自己&#xff0c;如…

基于SpringBoot+Vue的汽车服务管理系统(带1w+文档)

基于SpringBootVue的汽车服务管理系统(带1w文档) 基于SpringBootVue的汽车服务管理系统(带1w文档) 在开发系统过程中采用Java语言、MySQL数据库存储数据。系统以B/S为基础&#xff0c;实现管理一体化、规范化&#xff0c;为用户提供一个高效快捷的交流系统[5]。利用springboot架…

LearnOpenGL之3D显示

前序 AndroidLearnOpenGL是本博主自己实现的LearnOpenGL练习集合&#xff1a; Github地址&#xff1a;https://github.com/wangyongyao1989/AndroidLearnOpenGL 系列文章&#xff1a; 1、LearnOpenGL之入门基础 2、LearnOpenGL之3D显示 显示效果 根据上一篇文章的LearnO…

结构型设计模式:桥接/组合/装饰/外观/享元

结构型设计模式&#xff1a;适配器/代理 (qq.com)

浮动IP(Floating IP)计费;OpenStack算力共享;OpenStack实现资源虚拟化;算力调度策略

目录 浮动IP(Floating IP)计费 浮动IP的定义与作用 计费中的浮动IP数据 浮动IP在计费中的作用 OpenStack算力共享 一、OpenStack在算力共享中的角色 二、OpenStack与算力共享的结合方式 三、实际应用案例 算力调度策略 算力计费策略 OpenStack实现资源虚拟化 1.虚…