(数字图像处理MATLAB+Python)第七章图像锐化-第三节:高斯滤波与边缘检测

2023-05-16

文章目录

  • 一:高斯函数
    • (1)定义
    • (2)特点
  • 二:LOG算子
    • (1)定义
    • (2)程序
  • 三:Canny算子
    • (1)最优边缘检测
    • (2)Canny算子
    • (3)程序

一:高斯函数

(1)定义

高斯函数:是一种常见的连续函数,通常用符号 G ( x ) G(x) G(x) 表示。它可以用下面的公式定义

G ( x ) = 1 σ 2 π e − x 2 2 σ 2 G(x)=\frac{1}{\sigma \sqrt{ 2\pi }}e^{-\frac{x^{2}}{2\sigma^{2}}} G(x)=σ2π 1e2σ2x2

其中, x x x 是自变量, σ \sigma σ 是一个正实数,表示高斯函数的标准差。高斯函数具有以下性质:

  • 高斯函数是一个偶函数,即 G ( − x ) = G ( x ) G(-x) = G(x) G(x)=G(x)
  • 高斯函数的曲线呈钟形,且在 x = 0 x=0 x=0 处取得峰值。标准差 σ \sigma σ 越小,高斯函数的峰值越高,曲线越陡峭;标准差 σ \sigma σ 越大,高斯函数的峰值越低,曲线越平缓
  • 高斯函数的面积为 1 1 1,即 ∫ − ∞ ∞ G ( x ) d x = 1 \int_{-\infty}^{\infty} G(x) dx = 1 G(x)dx=1
  • σ \sigma σ 趋近于 0 0 0 时,高斯函数的峰值趋近于无穷大,曲线变得越来越陡峭,趋近于一个 δ \delta δ 函数。 δ \delta δ 函数是一个类似于脉冲的函数,当自变量等于 0 0 0 时,函数值无限大,而在其他位置上函数值都为 0 0 0

以下是高斯函数和其一阶导数形式
在这里插入图片描述

以下是高斯函数二阶导数形式

在这里插入图片描述

(2)特点

在这里插入图片描述

  • 随着远离原点,权值逐渐减小到零,表明离中心较近的图像值比远处的更重要
  • 标准差 σ \sigma σ决定邻域范围,总权值的95%包含在 2 σ 2\sigma 2σ的中间范围内
  • 二阶导数具有光滑的中间突出部分,函数值为负;两个光滑的侧边突出部分,值为正
  • 零交叉位于 − σ -\sigma σ + σ +\sigma +σ处,与 g ( x ) g(x) g(x)的拐点和 g ′ ( x ) g^{\prime}(x) g(x)的极值点对应
  • 1D形式绕垂直轴旋转得各向同性的2D函数形式(在任意过原点的切面上具有相同的1D高斯截面),其二阶导数形式好像一个宽边帽或称为墨西哥草帽
  • 从数学推导上,帽子的空腔口沿 z = g ( x , y ) z=g(x,y) z=g(x,y)轴向上,在显示和滤波应用中空腔口一般朝下,即中间突起的部分为正,帽边为负

二:LOG算子

(1)定义

LOG算子:Marr用高斯函数先对图像作平滑,然后用拉普拉斯算子检测边缘,简称LOG滤波器

LoG ⁡ ( x , y ) = 1 π σ 4 [ 1 − x 2 + y 2 2 σ 2 ] e − x 2 + y 2 2 σ 2 \operatorname{LoG}(x, y)=\frac{1}{\pi \sigma^{4}}\left[1-\frac{x^{2}+y^{2}}{2 \sigma^{2}}\right] e^{-\frac{x^{2}+y^{2}}{2 \sigma^{2}}} LoG(x,y)=πσ41[12σ2x2+y2]e2σ2x2+y2

LOG算子可以看作是将高斯函数和拉普拉斯算子(即二阶导数算子)结合在一起,因此它的输出是原始图像的拉普拉斯变换与高斯滤波的结果。它可以用来检测图像中的边缘和角点等特征。将 g g g与图像函数 f f f卷积,得到一个平滑的图像函数,对该函数做拉普拉斯运算,提取边缘

可以证明

∇ 2 [ f ( x , y ) ∗ g ( x , y ) ] = f ( x , y ) ∗ ∇ 2 g ( x , y ) \nabla^{2}[f(x, y) * g(x, y)]=f(x, y) * \nabla^{2} g(x, y) 2[f(x,y)g(x,y)]=f(x,y)2g(x,y)

∇ 2 g ( x , y ) = ∂ 2 g ∂ x 2 + ∂ 2 g ∂ y 2 = 1 π σ 4 ( x 2 + y 2 2 σ 2 − 1 ) exp ⁡ ( − x 2 + y 2 2 σ 2 ) \nabla^{2} g(x, y)=\frac{\partial^{2} g}{\partial x^{2}}+\frac{\partial^{2} g}{\partial y^{2}}=\frac{1}{\pi \sigma^{4}}\left(\frac{x^{2}+y^{2}}{2 \sigma^{2}}-1\right) \exp \left(-\frac{x^{2}+y^{2}}{2 \sigma^{2}}\right) 2g(x,y)=x22g+y22g=πσ41(2σ2x2+y21)exp(2σ2x2+y2)

∇ 2 g ( x , y ) \nabla^{2}g(x,y) 2g(x,y)为LOG滤波器,也称为Marr-Hildrech算子

  • σ \sigma σ为尺度因子,大的值可以用来检测模糊边缘,小的值可以用来检测聚焦良好的图像细节

LOG算子的形状如下图所示

在这里插入图片描述

滤波器的大小由 σ \sigma σ的数值或等价地由 ω 2 D \omega_{2D} ω2D的数值来确定。为了不使函数被过分地截短,应在足够大的窗口内作计算,窗口宽度通常取为 ω ≥ 3.6 ω 2 D \omega \geq 3.6\omega_{2D} ω3.6ω2D

σ \sigma σ取不同值时,对应不同模板
在这里插入图片描述

(2)程序

在这里插入图片描述


matlab实现

Image=im2double(rgb2gray(imread('lotus.jpg')));
figure,imshow(Image),title('原图像');
H=fspecial('laplacian',0);
R=imfilter(Image,H);
edgeImage=abs(R);
figure,imshow(edgeImage),title('Laplacian梯度图像');
H1=[0 -1 0;-1 5 -1;0 -1 0];
sharpImage=imfilter(Image,H1);
figure,imshow(sharpImage),title('Laplacian锐化图像');


Python实现

import cv2
import matplotlib.pyplot as plt
import numpy as np

# 读入图像
Image = cv2.imread('lotus.jpg')
Image = cv2.cvtColor(Image, cv2.COLOR_BGR2GRAY)
Image = Image.astype(np.float64) / 255.0

# 显示原图像
plt.imshow(Image, cmap='gray')
plt.title('原图像')
plt.show()

# 计算Laplacian梯度图像
H = np.array([[0, 1, 0], [1, -4, 1], [0, 1, 0]], dtype=np.float64)
R = cv2.filter2D(Image, -1, H)
edgeImage = np.abs(R)

# 显示Laplacian梯度图像
plt.imshow(edgeImage, cmap='gray')
plt.title('Laplacian梯度图像')
plt.show()

# 计算Laplacian锐化图像
H1 = np.array([[0, -1, 0], [-1, 5, -1], [0, -1, 0]], dtype=np.float64)
sharpImage = cv2.filter2D(Image, -1, H1)

# 显示Laplacian锐化图像
plt.imshow(sharpImage, cmap='gray')
plt.title('Laplacian锐化图像')
plt.show()

三:Canny算子

(1)最优边缘检测

最优边缘检测:是指在所有边缘检测算法中,能够获得最佳边缘检测结果的算法。然而,没有一种边缘检测算法能够在所有情况下都表现最优,因为不同的算法适用于不同类型的图像和不同的应用场景。因此,我们需要根据具体情况选择最适合的边缘检测算法。最优边缘检测的三个主要评价标准

  • 低错误率:标识出尽可能多的实际边缘,同时尽可能的减少噪声产生的误报。
  • 对边缘的定位准确:标识出的边缘要与图像中的实际边缘尽可能接近。
  • 最小响应:图像中的边缘最好只标识一次,并且可能存在的图像噪声部分不应标识为边缘

(2)Canny算子

Canny算子:是一种广泛使用的边缘检测算法,由John Canny在1986年提出。它可以检测出具有低误差率和高定位精度的边缘,并被认为是目前最优秀的边缘检测算法之一。算法步骤如下

  • 去噪:首先,应该对图像进行高斯滤波,以去除噪声
  • 计算梯度:然后,通过使用Sobel算子计算图像的梯度,以检测出边缘的强度和方向
  • 非极大值抑制:接下来,在梯度方向上进行非极大值抑制,以消除较小的边缘响应和边缘的宽度,保留梯度方向上的局部最大值
  • 双阈值处理:然后,应该根据梯度值进行双阈值处理,将像素点分为强边缘、弱边缘和非边缘三类
  • 边缘连接:最后,应该通过连接强边缘像素点和与其相邻的弱边缘像素点,形成完整的边缘。连接边缘的过程可以使用基于深度优先搜索或者基于连通性分析的方法

Canny算子的优点在于,它具有良好的边缘连接性、单一响应和低误差率。缺点在于计算量较大。此外,Canny算子对参数的选择非常敏感,需要根据具体应用场景进行调整

(3)程序

在这里插入图片描述


matlab实现

Image=im2double(rgb2gray(imread('lotus.jpg')));
figure,imshow(Image),title('原图像');
BW= edge(Image,'canny');
figure,imshow(BW),title('Canny边缘检测');

Python实现

Image=im2double(rgb2gray(imread('lotus.jpg')));
figure,imshow(Image),title('原图像');
BW= edge(Image,'canny');
figure,imshow(BW),title('Canny边缘检测');
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

(数字图像处理MATLAB+Python)第七章图像锐化-第三节:高斯滤波与边缘检测 的相关文章

  • PyCharm配置SFTP远程调试Django应用

    背景 之前一直从事Java方面的应用开发 xff0c 由于组里Python方向人手紧缺 xff0c 转而接触了几月Python xff0c 进行Django应用的学习和开发 对于用惯了Eclipse如此强大的IDE xff0c Python
  • 萌新PC网络故障如何排除障碍

    1 首先是排除接触故障 xff0c 即确保你的网线是可以正常使用的 然后禁用网卡后再启用 xff0c 排除偶然故障 打开网络和共享中心窗口 xff0c 单击窗口左上侧 更改适配器设置 右击其中的 本地连接 或 无线网络连接 xff0c 单击
  • 51单片机定时器的计数初值

    设定时时间为 5ms xff08 即5000us xff09 xff0c 定时器计数初值为 X xff0c 晶振频率为11 0592MHz xff0c 又 xff0c 定时时间 61 xff08 2 16 X xff09 12 晶振频率 x
  • mybatis-plus分页踩坑

    踩坑情况 引入的mybatis plus框架 用他的IPage分页接口去查询的时候发现接收到的数据并没有按照预料的去分页 也没执行count数量的sql 分析原因 后来去官网找发现是需要有一个分页插件的配置 代码如下 span class
  • Visual Studio 报错:error LNK2019: 无法解析的外部符号

    遇到的完整报错是这样的 xff1a error LNK2019 无法解析的外部符号 34 public thiscall Person Person void 34 0Person 64 64 QAE 64 XZ xff0c 函数 34 p
  • QT基础:QButtonGroup 按钮组的简单演示

    QButtonGroup 是一个按钮组 xff0c 就是将控件进行组合或分组的一个容器 xff0c 但是它并不在设计师里面可以直接拉出来用 在使用 QButtonGroup 的时候需要引入一下 include lt QButtonGroup
  • QT基础:遍历QListWidget,及QListWidget简单演示,适合初学者食用

    QListWidget 是一个列表框 xff0c 关于它的详细介绍可以参考 xff1a Qt QListWidget详解 初学者如果只是想在短时间内了解 QListWidget 的话 xff0c 可以参考这里 1 打开QT xff0c 创建
  • 查看虚拟机操作系统版本

    看虚拟机操作系统版本 xff0c 可以按照以下步骤进行 xff1a 打开虚拟机并登录到操作系统 打开终端 xff0c 输入以下命令 xff1a lsb release a 这个命令会显示操作系统的版本信息 xff0c 包括发行版名称 版本号
  • 汇编语言及其常用指令 3分钟急速了解

    第一部分 xff1a 汇编语言简介 当今计算机科学的领域中 xff0c 汇编语言是一门非常重要的编程语言 汇编语言是一种低级别的语言 xff0c 它直接操作计算机的硬件 xff0c 因此它比高级编程语言更加快速和高效 在本篇文章中 xff0
  • QT Creator实现导出某数据库的某表格,导出的时候将表头写成中文

    具体实现功能 xff1a 实现将某数据库内的某表格 xff0c 导出为execl可以打开的表格文件 xff0c 一般后缀为 xls xff0c 我这里是在Ubuntu环境下演示的 xff0c Windows环境应该也OK 要实现这个功能 x
  • 文献笔记|知识追踪|GKT|Graph-based Knowledge Tracing: Modeling Student Proficiency Using Graph Neural Network

    文章目录 Graph based Knowledge Tracing Modeling Student Proficiency Using Graph Neural Network研究对象面临的问题难点作者的方法FrameworkGKT问题
  • gRPC, Thrift和Dubbo等3种RPC框架的比较

    gRPC是Google开源的一款RPC框架 xff08 Go版本的实现 xff09 xff0c 以protobuf作为IDL xff0c 通过protoc来编译框架代码 gRPC的Java实现的底层网络库是基于Netty开发而来 xff0c
  • 搭建GitLab服务器

    下载 1 点击下载GitLab的rpm文件 2 或者命令下载 xff08 比较慢 xff0c 建议使用第一种方法直接下载 xff09 span class token function wget span https link zhihu
  • 求出a、b、c、d、e,满足ab-cd+e=1方程

    编写一个实验程序 xff0c 求出a b c d e xff0c 满足ab cd 43 e 61 1方程 xff0c 其中所有变量的取值为1 5并且均不相同 分析 xff1a 采用回溯法 xff0c 以找到变量的个数为终结条件 xff0c
  • idea插件 spring-assistant-@valuetoyml,快速定位到yml配置文件

    这里写自定义目录标题 idea插件 spring assistant 64 valuetoyml xff0c 快速定位到yml配置文件 安装 xff0c 在idea的插件市场直接搜索valuetoyml 自己在插件市场下载安装 插件详情 a
  • CA私有证书中心

    CA服务端 安装CA认证软件包中心 linux默认安装了 xff1a span class token function rpm span qf span class token variable span class token vari
  • MarkDown-IT插件使用

    目的 使后端返回数据库返回内容 xff0c 呈现到前端页面时 xff0c 展示它响应的MarkDown语法 实现机制 后端数据库直接存入Markdown语法 xff0c sql数据库字段数据类型建议采用LongText xff0c 后端传输
  • [Rust GUI]fltk-rs的helloworld

    1 安装VSCode 下载安装VSCode 安装VSCode扩展 rust analyzer或rust analyzer CN 2 安装Microsoft C 43 43 生成工具 访问微软官网下载生成工具 xff0c 勾选使用 C 43
  • OpenHarmony/HarmonyOS通用事件

    通用事件 点击事件 组件被点击时触发的事件 事件 onClick event nbsp event nbsp ClickEvent nbsp gt nbsp void 点击动作触发该回调 event返回值见ClickEvent对象说明 Cl
  • 通用信息整理

    通用事件 点击事件 触摸事件 挂载卸载事件 拖拽事件 按键事件 焦点事件

随机推荐

  • OpenHarmony/HarmonyOS文本通用属性

    文本通用属性 作者 坚果 团队 坚果组织 公众号 大前端之旅 润开鸿技术专家 华为HDE InfoQ签约作者 OpenHarmony布道师 擅长HarmonyOS应用开发 熟悉服务卡片开发 在 战码先锋 活动中作为大队长 累计培养三个小队长
  • OpenHarmony/HarmonyOS基础组件之XComponent

    基础组件之XComponent 作者 坚果 团队 坚果派 公众号 大前端之旅 润开鸿技术专家 华为HDE InfoQ签约作者 OpenHarmony布道师 擅长HarmonyOS应用开发 熟悉服务卡片开发 在 战码先锋 活动中作为大队长 累
  • OpenHarmony3.2release抢先体验

    OpenHarmony3 2release抢先体验 作者 坚果 团队 坚果派 公众号 大前端之旅 润开鸿技术专家 华为HDE InfoQ签约作者 OpenHarmony布道师 擅长HarmonyOS应用开发 熟悉服务卡片开发 在 战码先锋
  • OpenHarmony历史工程迁移

    OpenHarmony历史工程迁移 作者 坚果 团队 坚果派 公众号 大前端之旅 润开鸿技术专家 华为HDE InfoQ签约作者 OpenHarmony布道师 擅长HarmonyOS应用开发 熟悉服务卡片开发 在 战码先锋 活动中作为大队长
  • OpenHarmony应用沙箱路径和真实物理路径对应关系

    应用沙箱路径和调试进程视角下的真实物理路径 作者 坚果 团队 坚果派 公众号 大前端之旅 润开鸿技术专家 华为HDE InfoQ签约作者 OpenHarmony布道师 擅长HarmonyOS应用开发 熟悉服务卡片开发 在 战码先锋 活动中作
  • 创建ArkTS卡片

    创建ArkTS卡片 作者 xff1a 坚果 团队 xff1a 坚果派 公众号 xff1a 大前端之旅 润开鸿 技术专家 xff0c 华为HDE xff0c InfoQ签约作者 xff0c OpenHarmony布道师 xff0c 擅长Har
  • 卡片生命周期管理

    卡片生命周期管理 创建ArkTS卡片 xff0c 需实现FormExtensionAbility生命周期接口 在EntryFormAbility ts中 xff0c 导入相关模块 span class token keyword impor
  • 【坚果派-坚果】ArkTS如何优化Flex的布局性能

    如何优化Flex的布局性能 作者 xff1a 坚果 团队 xff1a 坚果派 公众号 xff1a 大前端之旅 润开鸿技术专家 xff0c 华为HDE xff0c InfoQ签约作者 xff0c OpenHarmony布道师 xff0c 擅长
  • 【坚果派-坚果】ArkTS气泡提示

    气泡提示 作者 xff1a 坚果 团队 xff1a 坚果派 公众号 xff1a 大前端之旅 润开鸿技术专家 xff0c 华为HDE xff0c InfoQ签约作者 xff0c OpenHarmony布道师 xff0c 擅长HarmonyOS
  • Windows服务搭建web网站,使用cpolar内网穿透实现公网访问

    文章目录 概述1 搭建一个静态Web站点2 本地浏览测试站点是否正常3 本地站点发布公网可访问3 1 安装cpolar内网穿透3 2 创建隧道映射公网地址3 3 获取公网URL地址 4 公网远程访问内网web站点5 配置固定二级子域名5 1
  • 搭建一站式OpenHarmony设备开发Windows开发环境

    搭建一站式OpenHarmony设备开发Windows开发环境 作者 xff1a 坚果 团队 xff1a 坚果派 公众号 xff1a 大前端之旅 润开鸿技术专家 xff0c 华为HDE xff0c InfoQ签约作者 xff0c OpenH
  • 关于OpenHarmony蜂窝通信框架能力的说明

    蜂窝通信框架能力 xff08 如需提供完整蜂窝通信能力需芯片厂商适配支持HDI接口 xff09 xff1a 支持双卡管理 xff0c 双卡通话 短信 搜网等基础能力接口和框架 支持VoLTE语音通话接口和框架 xff08 需要芯片厂商实现I
  • 第三方登录用户信息表设计

    user表 xff1a 站内账号表 xff0c 即原始的账号 密码信息表 字段有 user id username password social account表 xff1a 第三方账号信息表 如 wx account 微信账号信息表 a
  • HarmonyOS Codelabs最新参考

    HarmonyOS Codelabs最新参考 作者 坚果 团队 坚果派 公众号 大前端之旅 润开鸿技术专家 华为HDE InfoQ签约作者 OpenHarmony布道师 擅长HarmonyOS应用开发 熟悉服务卡片开发 在 战码先锋 活动中
  • OpenHarmony Stage模型下的窗口开发

    Stage模型下的窗口开发 作者 坚果 团队 坚果派 公众号 大前端之旅 润开鸿技术专家 华为 HDE InfoQ 签约作者 OpenHarmony 布道师 擅长 HarmonyOS 应用开发 熟悉服务卡片开发 在 战码先锋 活动中作为大队
  • 大教堂与集市

    文章目录 第一章 教堂与市集第二章 信一定要寄到第三章 拥有用户的重要第四章 尽早发布 xff0c 经常发布新版本第五章 有多少眼球驯服了复杂度第六章 今花非昨花 xff1f 第七章 Popclient 变成 Fetchmail第八章 Fe
  • 大聪明教你学Java | Spring Boot 项目设置 X-Content-Type-Options 响应头

    前言 我们在开发应用系统的时候 xff0c 总会遇到各种各样的漏洞 xff0c 即便是项目上线后 xff0c 甲方霸霸也会找专门搞安全的公司来对我们的应用系统进行扫描 xff0c 扫描完后或多或少也会出现一些漏洞 xff0c 我们就得加班对
  • (数字图像处理MATLAB+Python)第六章图像平滑-第二节:频域平滑滤波

    文章目录 一 xff1a 理想低通滤波 xff08 1 xff09 概述 xff08 2 xff09 程序 二 xff1a 巴特沃斯低通滤波 xff08 1 xff09 概述 xff08 2 xff09 程序 三 xff1a 指数低通滤波
  • (数字图像处理MATLAB+Python)第七章图像锐化-第一、二节:图像锐化概述和微分算子

    文章目录 一 xff1a 图像边缘分析二 xff1a 一阶微分算子 xff08 1 xff09 梯度算子A xff1a 定义B xff1a 边缘检测C xff1a 示例D xff1a 程序 xff08 2 xff09 Robert算子A x
  • (数字图像处理MATLAB+Python)第七章图像锐化-第三节:高斯滤波与边缘检测

    文章目录 一 xff1a 高斯函数 xff08 1 xff09 定义 xff08 2 xff09 特点 二 xff1a LOG算子 xff08 1 xff09 定义 xff08 2 xff09 程序 三 xff1a Canny算子 xff0