当前位置: 首页 > news >正文

图像数据处理21

五、边缘检测

5.2基于二阶导数的边缘检测

一阶导数(如Sobel、Prewitt算子)能够捕捉到灰度值的快速变化,但有时会因检测到过多的边缘点而导致边缘线过粗。为了更加精确地定位边缘位置,可以利用二阶导数的零交叉点。零交叉点是是函数二阶导数为零(正负变换)的点。

高斯拉普拉斯算子是一种用于图像边缘检测的算法。它先对图像进行高斯平滑处理,然后计算拉普拉斯算子,以找到图像中的零交叉点,从而实现图像边缘位置的检测。

其的优点有

①抗噪声能力强:LoG算子结合了高斯平滑和拉普拉斯锐化的优点。高斯平滑能够有效地抑制图像中的噪声,减少噪声对边缘检测的影响。这使得LoG算子在处理含有噪声的图像时,能够更准确地检测出边缘,防止因噪声而出现伪边缘检测。

②可调整性强:LoG算子中的高斯核标准差(σ)是一个可调整的参数,通过改变σ的值,可以控制高斯平滑的程度,适应不同噪声水平和边缘特性的图像,进而优化缘检测的效果。

def apply_log(image, sigma):"""应用高斯拉普拉斯算子进行边缘检测。参数:image: 输入图像sigma: 高斯核的标准差,用于平滑图像返回:edges: 检测到的边缘图像"""# 使用高斯模糊平滑图像blurred_image = cv2.GaussianBlur(image, (0, 0), sigma)# 计算拉普拉斯算子laplacian_image = cv2.Laplacian(blurred_image, cv2.CV_64F)# 将拉普拉斯图像的数据类型转换为8位无符号整数laplacian_image = np.uint8(np.absolute(laplacian_image))# 找到零交叉点作为边缘# 使用阈值来近似找到零交叉点_, edges = cv2.threshold(laplacian_image, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)return edges# 读取图像
image = cv2.imread('fu.jpg', cv2.IMREAD_GRAYSCALE)# 缩小原图
resized_image = cv2.resize(image, None, fx=0.4, fy=0.4)# 应用LoG算子
edges = apply_log(resized_image, sigma=1.5)# 缩小边缘图像(确保使用与原图相同的缩放因子)
resized_edges = cv2.resize(edges, (resized_image.shape[1], resized_image.shape[0]))# 将原图和处理后的图像水平堆叠
stacked_image = np.hstack((resized_image, resized_edges))# 显示结果
cv2.imshow('Original and Edges', stacked_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

5.3 Canny边缘检测算子

5.3.1Canny边缘检测算子概念:Canny算法是应用于边缘检测的标准算法,其目标是找到一个最优的边缘检测解,即尽可能多地标识出图像中的实际边缘,同时使标识出的边缘尽可能接近实际边缘,并尽可能减少噪声对边缘检测结果的干扰。

5.3.2原理及步骤:

①图像平滑:使用高斯滤波器对原始图像进行平滑处理,减少图像噪声。高斯滤波器通过加权平均周围像素的值来模糊图像,降低噪声的影响。

②梯度计算:计算平滑后图像的梯度幅度和方向。通常使用Sobel算子、Prewitt算子等来计算图像在水平和垂直方向上的梯度值,从而得到每个像素点的梯度大小和方向。

③非极大值抑制:在梯度图像上,对每个像素点在其梯度方向上进行比较,并保留局部最大值点,抑制非边缘像素。从而细化边缘线条,减少边缘的宽度。 

④双阈值检测:设定高阈值和低阈值,梯度值大于高阈值的一定是边缘;梯度值小于低阈值的一定不是边缘,要是介于高阙值和低阙值之间,就要根据其的邻接像素做出判断。

⑤边缘连接:从强边缘像素开始,沿着梯度方向追踪并连接相邻的弱边缘像素,从而形成完整的边缘。

import cv2
import numpy as np# 读取图片
image = cv2.imread('fu.jpg')# 转换为灰度图
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)# 应用高斯模糊
blurred_image = cv2.GaussianBlur(gray_image, (5, 5), 0)# 使用Canny算子进行边缘检测
low_threshold = 50
high_threshold = 150
edges = cv2.Canny(blurred_image, low_threshold, high_threshold)# 获取原始图像和边缘检测图像的尺寸
height, width = image.shape[:2]
edges_height, edges_width = edges.shape[:2]# 将图像缩小一半
resized_image = cv2.resize(image, (width // 2, height // 2))
resized_edges = cv2.resize(edges, (edges_width // 2, edges_height // 2))# 显示原图和边缘检测结果
cv2.imshow('Original Image', resized_image)
cv2.imshow('Edges', resized_edges)# 等待按键后关闭窗口
cv2.waitKey(0)
cv2.destroyAllWindows()

注:本人为在校学生,博客是边学边写的,主要是为了巩固知识,如有错误请积极指正。

本文的内容主要基于我对张运楚教授编著的《数字图像处理》一书的学习和理解。这本书深入浅出地介绍了数字图像处理的基本理论以及经典算法等,并且提供了丰富的示例代码和实际用例,极大地帮助了我学习图像处理知识。在此,我推荐大家阅读这本书,更加深入的学习有关图像处理的知识。

相关文章:

图像数据处理21

五、边缘检测 5.2基于二阶导数的边缘检测 一阶导数(如Sobel、Prewitt算子)能够捕捉到灰度值的快速变化,但有时会因检测到过多的边缘点而导致边缘线过粗。为了更加精确地定位边缘位置,可以利用二阶导数的零交叉点。零交叉点是是函…...

day37动态规划+三.Github链接本地仓库

一.动态规划 474.一和零 给你一个二进制字符串数组 strs 和两个整数 m 和 n 。 请你找出并返回 strs 的最大子集的长度,该子集中 最多 有 m 个 0 和 n 个 1 。 如果 x 的所有元素也是 y 的元素,集合 x 是集合 y 的 子集 。 思路:这道题更像是另一种的0-…...

设备运维故障排查与修复技巧

运维中最常见的40个故障问题及其解决方法: 1. 网络不通问题:无法访问网络资源。 解决方法:检查物理线路、交换机端口、网卡驱动和配置,使用ping、traceroute等工具定位问题。 2. 网络速度慢问题:访问网络资源速度慢。 解决方法:分析带宽使用情况,检查是否存在广播风…...

探索Python的自动化魔法:AutoIt库揭秘

文章目录 探索Python的自动化魔法:AutoIt库揭秘第一部分:背景介绍第二部分:AutoIt是什么?第三部分:如何安装AutoIt库?第四部分:AutoIt的五个简单函数第五部分:场景应用第六部分&…...

【I/O多路复用】

基于I/O多路复用的并发编程 I/O实现I/O多路复用select优缺点 pollepoll优点 I/O I/O复用是基于一个单进程或单线程的一个执行流当中监控多个输入输出流的技术(网络套接字或者文件描述符进行监控)。单进程或单线程,允许多个用户对单进程发起连…...

【python报错已解决】“IndexError: list index out of range”

🎬 鸽芷咕:个人主页 🔥 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活! 引言 你是否在处理Python列表时遇到了“IndexError: list index out of range”的错误?这个错误可能会让你的程序中…...

oracle和mysql查询某字段在哪个表中

oracle和mysql查询某字段在哪个表中 oracle的 select TABLE_NAME from user_tab_columns where COLUMN_NAME字段名mysql的: select table_schema ,table_name from information_schema.columns where column_name ‘字段名’ 查询结果table_schema为数据库名&a…...

TCP vs UDP:揭秘可靠性与效率之争

概述 今天我们开始主要讲解TCP的相关知识点。在之前讲解分层章节的时候,我们提到过一个重要观点。在网络层及以下几层,更多的是让主机与主机建立连接,也就是说你的电脑需要知道另一台电脑在哪里才能连接上它。然而,在网络中的通信…...

“树”的高度的计算——CSP-J1真题详解

如同树有高度一样,数据结构中的“树”也有高度,只不过这个高度指的是第几“层”。就像武功可以修炼到第几层一样,树也可以长到第几层。 需要指明的是,树的根节点属于第几层是没有严格的定义的,一般被认为是处于第0层或…...

Docker介绍、docker安装以及实现docker的远程管理

1.Docker介绍 1.Docker介绍 Docker 是⼀个开源的应用容器引擎,可以实现虚拟化,完全采用“沙盒”机制,容器之间不会存在任何接口。 Docker 通过 Linux Container(容器)技术将任意类型的应用进行包装,变成一…...

【UE5】基于摄像机距离逐渐剔除角色

效果 步骤 1. 新建一个工程,在内容浏览器中添加第三人称游戏内容包 2. 找到第三人称角色的材质实例“MI_Quinn_01”并打开 找到材质实例的父项材质“M_Mannequin” 打开材质“M_Mannequin” 在材质图表中添加如下节点 此时运行效果如文章开头所示。 参考视频&#…...

LabVIEW优化内存使用

在LabVIEW中,优化内存使用的关键在于理解LabVIEW的内存管理机制并采用一些最佳实践。以下是一些可能帮助减少内存占用的方法: 1. 减少数据副本的生成 避免不必要的数据复制:每当你在程序中传递数组或子数组时,LabVIEW可能会创建副…...

多进程和多线程基础概念LINUX

进程和程序的区别 程序是静态的,它是保存在磁盘上的指令的有序集合,没有任何执行的概念进程是一个动态的概念,它是程序执行的过程,包括了动态创建、调度和销毁的整个过程 并行:在 cpu 多核的支持下,实现物…...

React Native的Android端fetch的网络请求FormData请求错误:TypeError:Network request failed

// formdataconst formData new FormData();formData.append("code", appUserCode);formData.append("wallet", appName);// const formDataStr code appUserCode &wallet appName;// 参数形式//const _body code${appUserCode}&wallet${app…...

python之matplotlib (1 介绍及基本用法)

介绍 matplotlib是Python中的一个绘图库,它提供了一个类似于 MATLAB 的绘图系统。使用matplotlib你可以生成图表、直方图、功率谱、条形图、错误图、散点图等。matplotlib广泛用于数据可视化领域,是 Python 中最著名的绘图库之一。 同样matplotlib的安…...

ROS2常用指令

ROS2(Robot Operating System 2)是一个用于机器人软件开发的灵活框架,它提供了一套丰富的工具和库来支持机器人的开发、模拟、部署和测试。ROS2的常用指令可以大致分为几个类别,包括功能包管理、节点管理、话题管理、服务管理、动…...

SQL注入(原理、分类、union、POST注入)

目录 【学习目标、重难点知识】 【学习目标】 【重难点知识】 SQL注入简介 SQL注入原理 SQL注入类型 MySQL与SQL注入的相关知识 information_schema 数据库的结构 数据库查询语句 limit的用法 需要记住的几个函数 注释符号 SQL注入探测方法 SQL注入漏洞攻击流程…...

【勒索病毒应急响应流程】

概述 不同应急事件响应方式不同,建议大家阅读以下案例,解决自己当前的困扰,当然也可以根据自己的经验对文章进行补充和修正,欢迎在评论区留言。 案例1 事件概述 某安服团队接到某政府部门的远程应急响应求助,要求对被勒索服务器进行排查分析并溯源。 排查溯源 1、应…...

C ++初阶:C++入门级知识点

目录 🌞0.前言 🚈1.C输入输出 🚈2.缺省参数 🚝2.1全缺省参数 🚝2.2半缺省参数 🚈3.函数重载 🚝3.1参数类型不同 🚝 3.2参数个数不同 🚝3.3参数类型顺序不同 ​…...

php中如何高效地实现一个函数以判断给定日期是否位于多个预定义的时间范围内,同时确保代码的可读性、可维护性和性能优化

背景信息: 我有一个包含多个时间范围的数组,每个时间范围由起始日期和结束日期组成(目前以字符串形式给出),例如: $ranges [[start > 2023-01-01, end > 2023-03-31],[start > 2023-06-01, end …...

MetaWRAP数据库安装卡在下载?试试这个Aspera ascp参数详解与速度优化方案

MetaWRAP数据库下载卡顿?Aspera ascp参数深度调优指南 当你在深夜的实验室服务器前,盯着屏幕上缓慢蠕动的进度条——那个已经持续了8小时的NCBI数据库下载任务,突然意识到生物信息学研究中最耗时的可能不是分析代码运行,而是等待数…...

为什么顶尖对冲基金已弃用PerformanceAnalytics?对比12个VaR计算包的收敛精度、鲁棒性与监管可解释性(附基准测试原始数据集)

第一章:顶尖对冲基金弃用PerformanceAnalytics的深层动因与行业范式迁移近年来,桥水、Two Sigma、D.E. Shaw 等头部对冲基金逐步将核心业绩归因与风险建模流程从 R 生态中的 PerformanceAnalytics 迁移至自研或云原生量化平台。这一转向并非技术迭代的被…...

5个步骤彻底解决GTA5在线模式崩溃问题:YimMenu防崩溃菜单完全指南

5个步骤彻底解决GTA5在线模式崩溃问题:YimMenu防崩溃菜单完全指南 【免费下载链接】YimMenu YimMenu, a GTA V menu protecting against a wide ranges of the public crashes and improving the overall experience. 项目地址: https://gitcode.com/GitHub_Trend…...

Nunchaku FLUX.1-dev 操作系统兼容性指南:Windows系统部署要点

Nunchaku FLUX.1-dev 操作系统兼容性指南:Windows系统部署要点 如果你是一名Windows开发者,想在自己的电脑上跑起来Nunchaku FLUX.1-dev,那你来对地方了。我知道,很多AI模型和工具的教程,默认都是给Linux或者macOS用户…...

WSABuilds终极指南:在Windows 10/11上完美运行Android应用的完整解决方案

WSABuilds终极指南:在Windows 10/11上完美运行Android应用的完整解决方案 【免费下载链接】WSABuilds Run Windows Subsystem For Android on your Windows 10 and Windows 11 PC using prebuilt binaries with Google Play Store (MindTheGapps) and/or Magisk or …...

MATLAB数值计算与百川2-13B模型在科学数据分析中的协同

MATLAB数值计算与百川2-13B模型在科学数据分析中的协同 做科研或者工程计算的朋友,对MATLAB肯定不陌生。它就像我们手里的“瑞士军刀”,矩阵运算、信号处理、仿真建模,样样在行。但不知道你有没有过这样的感觉:数据算完了&#x…...

Office Custom UI Editor终极指南:免费打造专属Office界面

Office Custom UI Editor终极指南:免费打造专属Office界面 【免费下载链接】office-custom-ui-editor Standalone tool to edit custom UI part of Office open document file format 项目地址: https://gitcode.com/gh_mirrors/of/office-custom-ui-editor …...

Kimi-VL-A3B-Thinking多模态推理教程:支持LaTeX公式图像识别与解析

Kimi-VL-A3B-Thinking多模态推理教程:支持LaTeX公式图像识别与解析 1. 快速了解Kimi-VL-A3B-Thinking Kimi-VL-A3B-Thinking是一款高效的开源混合专家视觉语言模型,专注于多模态推理任务。这个模型特别擅长处理包含数学公式的图像识别与解析&#xff0…...

接地电阻柜的多种款式!

接地电阻柜作为电力系统的关键保护设备,其多样化主要体现在分类维度丰富、适配场景广泛,可根据电压等级、保护对象、电阻阻值等灵活划分,满足不同工况需求。按电压等级可分为低压(0.22kV~0.66kV)、中压(6kV…...

Pothos GraphQL性能优化:10个技巧提升GraphQL查询效率

Pothos GraphQL性能优化:10个技巧提升GraphQL查询效率 【免费下载链接】pothos Pothos GraphQL is library for creating GraphQL schemas in typescript using a strongly typed code first approach 项目地址: https://gitcode.com/gh_mirrors/po/pothos G…...