MATLAB边缘检测
一、目的:
熟悉边缘检测原理,并运用matlab软件实现图像的canny边缘检测,体会canny边缘检测的优缺点。
二、内容:
编写matlab程序,实现对lena图像的边缘检测,输出程序运行结果。
三、原理或步骤:
首先回顾一下边缘检测的一般步骤:
边缘检测算法一般包含如下四个步骤:
1.滤波(去噪)。
2.增强(一般是通过计算梯度幅值)。
3.检测(在图像中有许多点的梯度幅值会比较大,而这些点并不都是边缘,所以应该用某种方法来确定边缘点,比如最简单的边缘检测判据:梯度幅值阈值)。
4.定位(有的应用场合要求确定边缘位置,可以在子像素水平上来估计,指出边缘的位置和方向)
Canny边缘检测的算法步骤:
1.用高斯滤波器平滑图像(不同尺度的Canny检测子由高斯的不同标准差来表示)用一阶偏导的有限差分来计算梯度的幅值和方向。
2.对高斯平滑后的图像进行sobel边缘检测。这里需要求横的竖的还有联合的,所以一共三个需要sobel边缘检测图像。
3.对联合的sobel检测图像进行非极大值抑制(Non-Maxima Suppression, NMS)
4.用双阈值算法检测和连接边缘,并进行滞后阈值处理。
其中非极大值抑制细化了幅值图像中的屋脊带,只保留幅值局部变化最大的点。
双阈值算法:用两个阈值得到两个阈值图像,然后把高阈值的图像中的边缘连接成轮廓,连接时到达轮廓的端点时,在低阈值图像上找可以连接的边缘。不断收集,直到所有的间隙连接起来为止。
四、运行结果和分析
每步运行效果:
Figure1原图:


Canny算子的方向性使得它的边缘检测和定位优于其他算子,具有更好的边缘强度估计,能产生梯度方向和强度两个信息。
五、算法程序
Main.m
clear all;
close all;
clc;
img=imread('lena.bmp');
imshow(img);
[m n]=size(img);
img=double(img);
%%canny边缘检测的前两步相对不复杂,所以我就直接调用系统函数了
%%高斯滤波
w=fspecial('gaussian',[5 5]);
img=imfilter(img,w,'replicate');
figure;
imshow(uint8(img))
%%sobel边缘检测
w=fspecial('sobel');
img_w=imfilter(img,w,'replicate'); %求横边缘
w=w';
img_h=imfilter(img,w,'replicate'); %求竖边缘
img=sqrt(img_w.^2+img_h.^2); %注意这里不是简单的求平均,而是平方和在开方。
figure;
imshow(uint8(img))
%%下面是非极大抑制
new_edge=zeros(m,n);
for i=2:m-1
for j=2:n-1
Mx=img_w(i,j);
My=img_h(i,j);
if My~=0
o=atan(Mx/My); %边缘的法线弧度
elseif My==0 && Mx>0
o=pi/2;
else
o=-pi/2;
end
%Mx处用My和img进行插值
adds=get_coords(o); %边缘像素法线一侧求得的两点坐标,插值需要
M1=My*img(i+adds(2),j+adds(1))+(Mx-My)*img(i+adds(4),j+adds(3)); %插值后得到的像素,用此像素和当前像素比较
adds=get_coords(o+pi); %边缘法线另一侧求得的两点坐标,插值需要
M2=My*img(i+adds(2),j+adds(1))+(Mx-My)*img(i+adds(4),j+adds(3)); %另一侧插值得到的像素,同样和当前像素比较
isbigger=(Mx*img(i,j)>M1)*(Mx*img(i,j)>=M2)+(Mx*img(i,j)<M1)*(Mx*img(i,j)<=M2); %如果当前点比两边点都大置1
if isbigger
new_edge(i,j)=img(i,j);
end
end
end
figure;
imshow(uint8(new_edge))
%%下面是滞后阈值处理
up=120; %上阈值
low=100; %下阈值
set(0,'RecursionLimit',10000); %设置最大递归深度
for i=1:m
for j=1:n
if new_edge(i,j)>up &&new_edge(i,j)~=255 %判断上阈值
new_edge(i,j)=255;
new_edge=connect(new_edge,i,j,low);
end
end
end
figure;
imshow(new_edge==255)
相关文章:
MATLAB边缘检测
一、目的: 熟悉边缘检测原理,并运用matlab软件实现图像的canny边缘检测,体会canny边缘检测的优缺点。 二、内容: 编写matlab程序,实现对lena图像的边缘检测,输出程序运行结果。 三、原理或步骤&#x…...
Tortoise SVN 安装汉化教程(乌龟SVN)
1.首先下载 去官网下载 如果下载比较慢的,链接自取 https://pan.quark.cn/s/cb6f2eee3f90 2. 安装Tortoise SVN 无脑next到完成 最后到桌面右键 你就发现svn出来了,但是是英文的!!!! 像我这种英文不好的…...
深入了解Spring重试组件spring-retry
在我们的项目中,为了提高程序的健壮性,很多时候都需要有重试机制进行兜底,最多就场景就比如调用远程的服务,调用中间件服务等,因为网络是不稳定的,所以在进行远程调用的时候偶尔会产生超时的异常࿰…...
海南聚广众达电子商务咨询有限公司靠谱吗怎么样?
在当今这个数字化浪潮席卷全球的时代,抖音电商以其独特的魅力成为了众多商家争相入驻的新蓝海。而在这片浩瀚的电商海洋中,如何找到一家既专业又可靠的合作伙伴,成为了众多商家心中的一大难题。今天,我们就来深入剖析一下海南聚广…...
Java的魔法世界:面向对象编程(OOP)是什么?
这个嘎嘎重要 面向对象编程(OOP)是让Java像玩具世界一样,把现实中的东西变成“对象”,然后让这些对象去互动。你可以想象OOP是Java的“魔法世界”,通过创建“对象”(Object),让它们有…...
软件测试笔记——接口测试
文章目录 一、概念1.接口测试流程2.URL3.HTTP协议4.RESTful5.案例介绍 二、Postman1.Postman软件2.登录接口调试-获取验证码3.登录接口调试-自动关联数据4.合同上传接口-提交请求数据5.提交参数查询6.批量执行7.接口用例设计8.断言8.参数化三、案例1.项目2.课程添加3.课程列表查…...
东方通 TongRDS V2 配置与开机自启指南及 Spring Boot 集成
东方通 TongRDS V2 配置与开机自启指南及 Spring Boot 集成 文章目录 东方通 TongRDS V2 配置与开机自启指南及 Spring Boot 集成一 简述二 配置 cfg.xml1 启用密码访问2 Spring Boot 连接 TongRDS 三 配置 TongRDS 开机自启1 配置 RdsCenter1)设置 RdsCenter.servi…...
在 VS Code 中调试 Tensor 形状不显示的问题及解决方案
文章目录 常见问题解决方案1. 定制类包装和 __repr__ 方法 解释如何应用总结 在使用 VS Code 调试 PyTorch 代码时,可能会遇到一个常见问题:调试时 variables 窗口中不显示 Tensor 的形状信息。这会使得调试时观察数据的结构变得不便,尤其是在…...
Linux 时间获取全面总结
1. 引言 在Linux操作系统中,获取时间是一个基本且重要的功能。本文旨在全面总结Linux系统中获取时间的方法,包括命令行工具和编程接口,帮助读者深入理解Linux时间管理的机制。 2. 命令行工具 2.1 date 命令 date 命令是Linux中最常用的命…...
SQL 自学:游标(Cursors)的理解与应用
在 SQL 中,游标(Cursor)是一种用于处理从数据库中检索出的多行数据的机制。它允许我们逐行地处理查询结果集,而不是一次性处理整个结果集。 一、游标是什么 游标可以看作是一个指向结果集的指针。通过游标,我们可以在…...
IO多路复用概述与epoll简介
一、引言 在网络编程中,高并发的场景下处理大量连接请求是一项挑战。传统的阻塞式IO模型会让线程在等待数据的过程中陷入停顿,导致系统效率低下。为了解决这个问题,IO多路复用应运而生。它允许一个线程同时监听多个文件描述符(如…...
关于region_to_label算子的想法
1,定义:将区域进行编码 2,如何做到的:底层逻辑应该是paint_region。通过一个小的循环,按顺序将区域从灰度值1开始11的往上喷。 3,有什么作用:目前能用到的,是有字典的作用࿰…...
uni-app 实现好看易用的抽屉效果
在移动应用开发中,抽屉效果是一种常用的用户界面设计,它能有效地节省空间,同时提供导航和其他功能。本文将介绍如何在uni-app中实现一个好看且易用的抽屉效果,帮助你提升应用的用户体验。 一、什么是抽屉效果? 抽屉效…...
PowerShell 脚本 比较两文件差异(带粗狂进度条)并汇总输出
一上来就放代码 function Compare-FileHex {param ([Parameter(Mandatory$true)][string]$SourceFile,[Parameter(Mandatory$true)][string]$CompareFile,[Parameter(Mandatory$false)][string]$OutputFile,[Parameter(Mandatory$false)][int]$BufferSize 1MB)function Forma…...
学习 UE5 的一些前置操作总结
随着 Unity, Godot 这些引擎都玩抽象,主动捅自己一刀后,UE5 的风头不可谓不盛,本着多学一点免得失业的思路方针,咱也研究了一下 UE5 引擎,然后发现想要开始使用 UE5 ,包含了很多前置操作,这里总…...
C#/.NET/.NET Core技术前沿周刊 | 第 10 期(2024年10.14-10.20)
前言 C#/.NET/.NET Core技术前沿周刊,你的每周技术指南针!记录、追踪C#/.NET/.NET Core领域、生态的每周最新、最实用、最有价值的技术文章、社区动态、优质项目和学习资源等。让你时刻站在技术前沿,助力技术成长与视野拓宽。 欢迎投稿、推荐…...
Git 基本配置
目录 打开 Git Bash设置用户信息查看配置信息修改电脑名字为常用指令配置别名打开用户目录,创建 .bashrc 文件在 .bashrc 文件中输入如下内容:打开gitBash,执行 source ~/.bashrc 解决GitBash乱码问题打开GitBash执行下面命令${git_home}/etc…...
理工科考研想考计算机,湖南大学、重大、哈工大威海、山东大学,该如何选择?
C哥专业提供——计软考研院校选择分析专业课备考指南规划 计算机对理工科同学来说,还是性价比很高的,具有很大的优势! 一、就业前景广阔 高需求行业 在当今数字化时代,计算机技术几乎渗透到了各个领域,无论是互联网…...
使用langchain和大模型API提取QA的实战教程
大家好,我是herosunly。985院校硕士毕业,现担任算法研究员一职,热衷于大模型算法的研究与应用。曾担任百度千帆大模型比赛、BPAA算法大赛评委,编写微软OpenAI考试认证指导手册。曾获得阿里云天池比赛第一名,CCF比赛第二名,科大讯飞比赛第三名。授权多项发明专利。对机器学…...
Java面试场景题(1)---如何使用redis记录上亿用户连续登陆天数
感谢uu们的观看,话不多说开始~ 对于这个问题,我们需要先来了解一下~ 海量数据都可以用bitmap来存储,因为占得内存小,速度也很快 我大概计算了一下~ 完全够:String类型512M 1byte 8个bit位 8个状态 512M1024byt…...
理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端
🌟 什么是 MCP? 模型控制协议 (MCP) 是一种创新的协议,旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议,它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…...
智能在线客服平台:数字化时代企业连接用户的 AI 中枢
随着互联网技术的飞速发展,消费者期望能够随时随地与企业进行交流。在线客服平台作为连接企业与客户的重要桥梁,不仅优化了客户体验,还提升了企业的服务效率和市场竞争力。本文将探讨在线客服平台的重要性、技术进展、实际应用,并…...
基础测试工具使用经验
背景 vtune,perf, nsight system等基础测试工具,都是用过的,但是没有记录,都逐渐忘了。所以写这篇博客总结记录一下,只要以后发现新的用法,就记得来编辑补充一下 perf 比较基础的用法: 先改这…...
Java求职者面试指南:计算机基础与源码原理深度解析
Java求职者面试指南:计算机基础与源码原理深度解析 第一轮提问:基础概念问题 1. 请解释什么是进程和线程的区别? 面试官:进程是程序的一次执行过程,是系统进行资源分配和调度的基本单位;而线程是进程中的…...
免费数学几何作图web平台
光锐软件免费数学工具,maths,数学制图,数学作图,几何作图,几何,AR开发,AR教育,增强现实,软件公司,XR,MR,VR,虚拟仿真,虚拟现实,混合现实,教育科技产品,职业模拟培训,高保真VR场景,结构互动课件,元宇宙http://xaglare.c…...
NPOI操作EXCEL文件 ——CAD C# 二次开发
缺点:dll.版本容易加载错误。CAD加载插件时,没有加载所有类库。插件运行过程中用到某个类库,会从CAD的安装目录找,找不到就报错了。 【方案2】让CAD在加载过程中把类库加载到内存 【方案3】是发现缺少了哪个库,就用插件程序加载进…...
「全栈技术解析」推客小程序系统开发:从架构设计到裂变增长的完整解决方案
在移动互联网营销竞争白热化的当下,推客小程序系统凭借其裂变传播、精准营销等特性,成为企业抢占市场的利器。本文将深度解析推客小程序系统开发的核心技术与实现路径,助力开发者打造具有市场竞争力的营销工具。 一、系统核心功能架构&…...
6.9-QT模拟计算器
源码: 头文件: widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QMouseEvent>QT_BEGIN_NAMESPACE namespace Ui { class Widget; } QT_END_NAMESPACEclass Widget : public QWidget {Q_OBJECTpublic:Widget(QWidget *parent nullptr);…...
js 设置3秒后执行
如何在JavaScript中延迟3秒执行操作 在JavaScript中,要设置一个操作在指定延迟后(例如3秒)执行,可以使用 setTimeout 函数。setTimeout 是JavaScript的核心计时器方法,它接受两个参数: 要执行的函数&…...
2025.6.9总结(利与弊)
凡事都有两面性。在大厂上班也不例外。今天找开发定位问题,从一个接口人不断溯源到另一个 接口人。有时候,不知道是谁的责任填。将工作内容分的很细,每个人负责其中的一小块。我清楚的意识到,自己就是个可以随时替换的螺丝钉&…...
