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

传统CV算法——边缘算子与图像金字塔算法介绍

边缘算子

图像梯度算子 - Sobel

Sobel算子是一种用于边缘检测的图像梯度算子,它通过计算图像亮度的空间梯度来突出显示图像中的边缘。Sobel算子主要识别图像中亮度变化快的区域,这些区域通常对应于边缘。它是通过对图像进行水平和垂直方向的差分运算来实现的,具体来说:

  • ddepth:输出图像的深度,通常设置为cv2.CV_64F来避免负数被截断。
  • dxdy 分别指定了水平和垂直方向的导数阶数,比如 dx=1, dy=0 就是对水平方向求一阶导数,用于检测垂直边缘;而 dx=0, dy=1 对应的是对垂直方向求一阶导数,用于检测水平边缘。
  • ksize 是Sobel算子的大小,它决定了滤波器的大小。ksize越大,滤波器覆盖的像素就越多,边缘检测就越模糊。常见的ksize值有1, 3, 5, 7。特别地,ksize=-1时会应用3x3的Scharr滤波器,它比3x3的Sobel滤波器有更好的结果。

在实践中,Sobel算子通过卷积框架应用于图像,分别计算x和y方向上的梯度,然后根据需要可能会结合这两个方向的梯度来得到边缘的完整表示。

dst = cv2.Sobel(src, ddepth, dx, dy, ksize)

  • ddepth:图像的深度
  • dx和dy分别表示水平和竖直方向
  • ksize是Sobel算子的大小
def cv_show(img,name):cv2.imshow(name,img)cv2.waitKey()cv2.destroyAllWindows()
img = cv2.imread('pie.png',cv2.IMREAD_GRAYSCALE)
cv2.imshow("img",img)
cv2.waitKey()
cv2.destroyAllWindows()
sobelx = cv2.Sobel(img,cv2.CV_64F,1,0,ksize=3)
cv_show(sobelx,'sobelx')

在这里插入图片描述

sobely = cv2.Sobel(img,cv2.CV_64F,0,1,ksize=3)
sobely = cv2.convertScaleAbs(sobely)  
cv_show(sobely,'sobely')

在这里插入图片描述

sobelxy=cv2.Sobel(img,cv2.CV_64F,1,1,ksize=3)
sobelxy = cv2.convertScaleAbs(sobelxy) 
cv_show(sobelxy,'sobelxy')

在这里插入图片描述

灰度化处理
img = cv2.imread('lena.jpg',cv2.IMREAD_GRAYSCALE)
cv_show(img,'img')

在这里插入图片描述
cv2.convertScaleAbs()函数主要作用是将梯度转换成可视化的形式。在进行Sobel边缘检测后,如果直接输出梯度结果,可能会因为数据类型的问题(比如负值)而不能正确显示。这个函数首先对输入的梯度值进行绝对值处理,然后将数据类型转换为无符号8位整型(uint8),这样就可以正常显示为图像了。这个步骤是图像处理中常用的一种方式,用来将处理后的数据转化为图像处理软件或显示设备可以接受的格式。

img = cv2.imread('lena.jpg',cv2.IMREAD_GRAYSCALE)sobelxy=cv2.Sobel(img,cv2.CV_64F,1,1,ksize=3)
sobelxy = cv2.convertScaleAbs(sobelxy) 
cv_show(sobelxy,'sobelxy')	

在这里插入图片描述

图像梯度-Scharr算子

在这里插入图片描述

不同算子的差异

分别为sobel 、 Scharr、laplacian

#不同算子的差异
img = cv2.imread('lena.jpg',cv2.IMREAD_GRAYSCALE)
sobelx = cv2.Sobel(img,cv2.CV_64F,1,0,ksize=3)
sobely = cv2.Sobel(img,cv2.CV_64F,0,1,ksize=3)
sobelx = cv2.convertScaleAbs(sobelx)   
sobely = cv2.convertScaleAbs(sobely)  
sobelxy =  cv2.addWeighted(sobelx,0.5,sobely,0.5,0)  scharrx = cv2.Scharr(img,cv2.CV_64F,1,0)
scharry = cv2.Scharr(img,cv2.CV_64F,0,1)
scharrx = cv2.convertScaleAbs(scharrx)   
scharry = cv2.convertScaleAbs(scharry)  
scharrxy =  cv2.addWeighted(scharrx,0.5,scharry,0.5,0) laplacian = cv2.Laplacian(img,cv2.CV_64F)
laplacian = cv2.convertScaleAbs(laplacian)   res = np.hstack((sobelxy,scharrxy,laplacian))
cv_show(res,'res')

在这里插入图片描述

Canny边缘检测

  1.    使用高斯滤波器,以平滑图像,滤除噪声。
    
  2.    计算图像中每个像素点的梯度强度和方向。
    
  3.    应用非极大值(Non-Maximum Suppression)抑制,以消除边缘检测带来的杂散响应。
    
  4.    应用双阈值(Double-Threshold)检测来确定真实的和潜在的边缘。
    
  5.    通过抑制孤立的弱边缘最终完成边缘检测。
    

cv2.Canny() 函数实现的是Canny边缘检测算法,这是一种非常流行且有效的图像边缘检测方法。该函数需要两个阈值作为参数,用来控制边缘检测的灵敏度。较低的阈值可以捕获更多的边缘(但可能包括一些噪声),而较高的阈值只捕获最显著的边缘。这个算法的步骤包括使用高斯滤波器去除图像噪声、计算图像的梯度强度和方向、应用非极大值抑制(NMS)来消除边缘响应的假阳性以及应用双阈值检测和边缘连接。最终,它输出一个二值图像,显示了检测到的边缘。
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

img=cv2.imread("lena.jpg",cv2.IMREAD_GRAYSCALE)v1=cv2.Canny(img,80,150)
v2=cv2.Canny(img,50,100)res = np.hstack((v1,v2))
cv_show(res,'res')

在这里插入图片描述

对车辆采用canny算子
img=cv2.imread("car.png",cv2.IMREAD_GRAYSCALE)v1=cv2.Canny(img,120,250)
v2=cv2.Canny(img,50,100)res = np.hstack((v1,v2))
cv_show(res,'res')

在这里插入图片描述

图像金字塔

在这里插入图片描述

高斯金字塔

高斯金字塔主要用于图像的多尺度表示。在计算机视觉和图像处理中,高斯金字塔通过逐步降低图像的分辨率并应用高斯滤波来生成图像的一系列缩小版本。这个过程包括两个基本操作:降采样和平滑。首先,原始图像被高斯滤波器平滑处理,然后每个方向上每隔一个像素进行采样,从而创建出更小尺寸的图像。

高斯金字塔的应用包括但不限于:

  1. 图像压缩:通过降低图像分辨率的方式减少存储空间需求。
  2. 图像融合:在进行图像拼接或HDR图像合成时,金字塔可以帮助在不同尺度上平滑地融合图像。
  3. 物体检测和识别:使用图像金字塔可以在不同的尺度上检测物体,提高检测的精度和鲁棒性。

通过这种方式,高斯金字塔能够在不同的分辨率层次上处理图像,适用于多种不同的图像处理任务。
在这里插入图片描述

img=cv2.imread("AM.png")
cv_show(img,'img')
print (img.shape)

在这里插入图片描述
上采样

up=cv2.pyrUp(img)
cv_show(up,'up')
print (up.shape)

在这里插入图片描述

下采样
down=cv2.pyrDown(img)
cv_show(down,'down')
print (down.shape)

在这里插入图片描述

继续上采样
up2=cv2.pyrUp(up)
cv_show(up2,'up2')
print (up2.shape)

在这里插入图片描述

原图与经过图像金字塔后处理的图

在这里插入图片描述

拉普拉斯金字塔

在这里插入图片描述

down=cv2.pyrDown(img)
down_up=cv2.pyrUp(down)
l_1=img-down_up
cv_show(l_1,'l_1')

在这里插入图片描述

相关文章:

传统CV算法——边缘算子与图像金字塔算法介绍

边缘算子 图像梯度算子 - Sobel Sobel算子是一种用于边缘检测的图像梯度算子,它通过计算图像亮度的空间梯度来突出显示图像中的边缘。Sobel算子主要识别图像中亮度变化快的区域,这些区域通常对应于边缘。它是通过对图像进行水平和垂直方向的差分运算来…...

图像去噪算法性能比较与分析

在数字图像处理领域,去噪是一个重要且常见的任务。本文将介绍一种实验,通过MATLAB实现多种去噪算法,并比较它们的性能。实验中使用了包括中值滤波(MF)、自适应加权中值滤波(ACWMF)、差分同态算法…...

Vision Transformer(ViT)模型原理及PyTorch逐行实现

Vision Transformer(ViT)模型原理及PyTorch逐行实现 一、TRM模型结构 1.Encoder Position Embedding 注入位置信息Multi-head Self-attention 对各个位置的embedding融合(空间融合)LayerNorm & ResidualFeedforward Neural Network 对每个位置上单…...

828华为云征文 | Flexus X实例CPU、内存及磁盘性能实测与分析

引言 随着云计算的普及,企业对于云资源的需求日益增加,而选择一款性能强劲、稳定性高的云实例成为了关键。华为云Flexus X实例作为华为云最新推出的高性能实例,旨在为用户提供更强的计算能力和更高的网络带宽支持。最近华为云828 B2B企业节正…...

FreeRTOS学习笔记(六)队列

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、队列的基本内容1.1 队列的引入1.2 FreeRTOS 队列的功能与作用1.3 队列的结构体1.4 队列的使用流程 二、相关API详解2.1 xQueueCreate2.2 xQueueSend2.3 xQu…...

【Python篇】PyQt5 超详细教程——由入门到精通(中篇一)

文章目录 PyQt5入门级超详细教程前言第4部分:事件处理与信号槽机制4.1 什么是信号与槽?4.2 信号与槽的基本用法4.3 信号与槽的基础示例代码详解: 4.4 处理不同的信号代码详解: 4.5 自定义信号与槽代码详解: 4.6 信号槽…...

LinuxQt下的一些坑之一

我们在使用Qt开发时,经常会遇到Windows上应用正常,但到Linux嵌入式下就会出现莫名奇妙的问题。这篇文章就举例分析下: 1.QPushButton按钮外侧虚线框问题 Windows下QPushButton按钮设置样式正常,但到了Linux下就会有一个虚线边框。…...

Statement batch

我们可以看到 Statement 和 PreparedStatement 为我们提供的批次执行 sql 操作 JDBC 引入上述 batch 功能的主要目的,是加快对客户端SQL的执行和响应速度,并进而提高数据库整体并发度,而 jdbc batch 能够提高对客户端SQL的执行和响应速度,其…...

PPP 、PPPoE 浅析和配置示例

一、名词: PPP: Point to Point Protocol 点到点协议 LCP:Link Control Protocol 链路控制协议 NCP:Network Control Protocol 网络控制协议,对于上层协议的支持,N 可以为IPv4、IPv6…...

【Python机器学习】词向量推理——词向量

目录 面向向量的推理 使用词向量的更多原因 如何计算Word2vec表示 skip-gram方法 什么是softmax 神经网络如何学习向量表示 用线性代数检索词向量 连续词袋方法 skip-gram和CBOW:什么时候用哪种方法 word2vec计算技巧 高频2-gram 高频词条降采样 负采样…...

Python 语法糖:让编程更简单(续二)

Python 语法糖:让编程更简单(续) 10. Type hints Type hints 是 Python 中的一种语法糖,用于指定函数或变量的类型。例如: def greet(name: str) -> None:print(f"Hello, {name}!")这段代码将定义一个…...

6 - Shell编程之sed与awk编辑器

目录 一、sed 1.概述 2.sed命令格式 3.常用操作的语法演示 3.1 输出符合条件的文本 3.2 删除符合条件的文本 3.3 替换符合条件的文本 3.4 插入新行 二、awk 1.概述 2. awk命令格式 3.awk工作过程 4.awk内置变量 5.awk用法示例 5.1 按行输出文本 5.2 按字段输出文…...

什么是XML文件,以及如何打开和转换为其他文件格式

本文描述了什么是XML文件以及它们在哪里使用,哪些程序可以打开XML文件,以及如何将XML文件转换为另一种基于文本的格式,如JSON、PDF或CSV。 什么是XML文件 XML文件是一种可扩展标记语言文件。它们是纯文本文件,除了描述数据的传输、结构和存储外,本身什么也不做。 RSS提…...

海外直播对网速、带宽、安全的要求

要满足海外直播的要求,需要拥有合适的网络配置。在全球化的浪潮下,海外直播正逐渐成为企业、个人和各类组织的重要工具。不论是用于市场推广、品牌宣传,还是与观众互动,海外直播都为参与者带来了丰富的机会。然而,确保…...

UWB定位室外基站

定位基站,型号SW,是一款基于无线脉冲技术开发的UWB定位基站,基站可用于人员、车辆、物资的精确定位, 该基站专为恶劣环境使用而设计,防尘、防水等级IP67,工业级标准支持365天连续运行,本安防爆可…...

高斯平面直角坐标讲解,以及地理坐标转换高斯平面直角坐标

高斯平面直角坐标系(Gauss-Krger 坐标系)是基于 高斯-克吕格投影 的一种常见的平面坐标系统,主要用于地理信息系统 (GIS)、测绘和工程等领域。该坐标系将地球表面的经纬度(地理坐标)通过一种投影方式转换为平面直角坐标,以便在二维平面中进行距离、面积和角度的计算。 一…...

C++入门(06)安装QT并快速测试体验一个简单的C++GUI项目

文章目录 1. 清华镜像源下载2. 安装3. 开始菜单上的 QT 工具4. 打开 Qt Creator5. 简单的 GUI C 项目5.1 打开 Qt Creator 并创建新项目5.2 设计界面5.3 添加按钮的点击事件5.4 编译并运行项目 6. 信号和槽(Signals and Slots) 这里用到了C类与对象的很多…...

一篇文章告诉你小程序为什么最近这么火?

微信小程序之所以最近这么火,主要得益于其低成本获取高流量、线上线下流量互换、社交裂变引爆流量以及封闭商业生态闭环等优势。下面将详细探讨小程序火爆的多个原因: 一篇文章告诉你小程序为什么这么火爆? 低成本获取高流量 无需安装注册&…...

Qt-常用控件(3)-多元素控件、容器类控件和布局管理器

1. 多元素控件 Qt 中提供的多元素控件有: QListWidgetQListViewQTableWidgetQTableViewQTreeWidgetQTreeView xxWidget 和 xxView 之间的区别,以 QTableWidget 和 QTableView 为例. QTableView 是基于 MVC 设计的控件.QTableView 自身不持有数据,使用 QTableView 的…...

【系统设计】主动查询与主动推送:如何选择合适的数据传输策略

基本描述总结 主动查询机制:系统A主动向系统B请求数据,采用严格的权限控制和身份认证,防止未授权的数据访问。数据在传输过程中使用TLS加密,并通过动态脱敏处理隐藏敏感信息。 推送机制:系统B在数据更新时主动向系统…...

SecGPT-14B开源大模型部署:CSDN平台内开箱即用,省去HuggingFace下载环节

SecGPT-14B开源大模型部署:CSDN平台内开箱即用,省去HuggingFace下载环节 想快速体验一个专注于网络安全问答的14B大模型,但又不想经历从HuggingFace下载几十GB模型文件的漫长等待和复杂配置?现在,在CSDN星图平台上&am…...

零基础新手指南:借助快马AI无需代码构建你的第一篇论文官网

作为一个完全没有编程基础的研究生,我曾经为了搭建个人论文展示网站头疼不已。直到发现了InsCode(快马)平台,整个过程变得异常简单。下面分享我的完整实践过程,希望能帮助到同样需要展示学术成果的朋友们。 明确网站需求结构 在开始前&#x…...

Krita 5.3.0 与 6.0.0 发布:功能升级与技术革新

文本与工具革新,Krita 功能升级Krita 5.3.0 和 6.0.0 正式推出,带来了一系列显著的功能改进。文本工具被完全重写,支持在画布上进行所见即所得编辑,还能支持 OpenType 的所有特性以及文本置入形状,这大大提升了文字处理…...

Linux远程连接工具评测与选型指南

1. Linux远程连接工具概述作为一名嵌入式Linux开发者,我每天都需要通过远程连接工具访问各种开发板和服务器。在多年的实践中,我尝试过市面上几乎所有主流的远程终端工具,深知每款工具的特点和适用场景。选择一款合适的远程连接工具&#xff…...

如何用MicroSIP实现远程办公通话?2024最新SIP协议设置指南

2024远程办公通话实战:MicroSIP高级配置与网络优化全攻略 远程办公已成为现代企业运营的标配,而稳定高效的语音通信系统则是团队协作的基石。作为一款轻量级开源SIP客户端,MicroSIP凭借其低延迟、高兼容性和零成本优势,正在成为中…...

个人 AI 助理——打造你的第二大脑

个人 AI 助理——打造你的第二大脑摘要:信息过载时代,个人 AI 助理不再是奢侈品,而是必需品。本文教你如何搭建专属 AI 助理,实现信息管理、知识沉淀、决策辅助的智能化,让 AI 成为你的"第二大脑"。一、为什…...

Kandinsky-5.0-I2V-Lite-5s实战:基于Dify平台构建无代码视频生成应用

Kandinsky-5.0-I2V-Lite-5s实战:基于Dify平台构建无代码视频生成应用 1. 引言:让图片动起来的零门槛方案 最近遇到不少朋友在问:有没有什么简单的方法,能让静态图片变成动态视频?传统方案要么需要专业视频编辑技能&a…...

基于GOOSE - Transformer - LSTM的数据回归预测探索

基于GOOSE-Transformer-LSTM的数据回归预测 模型结合Transformer的全局注意力机制和LSTM的短期记忆及序列处理能力 首先,采用Transformer自注意力机制捕捉数据的全局依赖性,并输出一个经过全局上下文编码的表示;然后,采用2024年最…...

axios 供应链投毒事件完整报告:史上最大 npm 攻击技术分析

axios 供应链投毒事件完整报告:史上最大 npm 攻击技术分析 2026年3月31日 | 安全分析报告 一、事件概述 2026年3月31日,npm 生态遭遇了有记录以来针对顶级包最复杂的供应链攻击。攻击者劫持了 axios(全球每周下载量超 8300 万次)核心维护者的 npm 账号,发布了两个恶意版…...

当今互联网安全的基石 - TLS/SSL

LS(Transport Layer Security)传输层安全协议 发展历程 TLS 是 SSL 协议的继任者。由于 SSL 协议存在一些安全漏洞,并且随着网络安全需求的不断提高,IETF(Internet Engineering Task Force)对 SSL 3.0 进…...