(二)OpenCV——边缘增强与检测

边缘增强与检测是图像处理中的核心技术,其核心目标是突出图像中的不连续区域(边缘),为后续的图像分析提供基础。

一、基本概念

边缘本质上是图像中灰度/颜色发生突变的区域,对应着:

  • 物体边界

  • 表面方向改变

  • 材质变化

  • 光照不连续

边缘增强通过强化这些突变区域,使边缘更明显;边缘检测则直接标识出边缘位置。

二、核心作用

作用维度具体表现
特征提取为物体识别、图像分割提供基础特征(如SIFT、HOG等算法依赖边缘)
数据压缩边缘信息可代替原始图像进行存储(如矢量图转换)
视觉增强医疗影像增强、老旧照片修复
三维重建通过多视图边缘匹配恢复三维结构
工业检测零件尺寸测量、缺陷检测(如裂纹、毛刺)

 三、边缘增强与检测技术矩阵

维度Sobel算子Scharr算子Laplacian算子Canny边缘检测
数学基础一阶导数近似一阶导数优化二阶导数多阶段梯度分析
核结构示例[[-1,0,1],[-2,0,2],[-1,0,1]][[-3,0,3],[-10,0,10],[-3,0,3]][[0,1,0],[1,-4,1],[0,1,0]]无固定核(算法流程)
计算复杂度O(2MN)(可分离)O(2MN)(可分离)O(MN)O(6MN)(含高斯滤波+NMS)
边缘响应特性中等宽度(~2px)细边缘(~1.5px)双线效应(~2px)单像素级边缘
抗噪能力★★★☆☆★★★★☆★★☆☆☆(需预滤波)★★★★★(内置高斯滤波)
方向敏感性8方向(近似)16方向(更精确)各向同性全方向(梯度计算)
OpenCV实现cv2.Sobel(dx=1, dy=1, ksize=3)cv2.Scharr(ddepth=cv2.CV_32F)cv2.Laplacian(ksize=3)cv2.Canny(threshold1=50, threshold2=150)
特性抗噪较好,边缘较粗方向精度比Sobel高30%对噪声敏感,需配合高斯滤波强抗噪性,计算复杂度最高

四、Sobel算子

Sobel算子是一种离散微分算子,通过计算图像灰度的一阶梯度来检测边缘。其核心思想是:

  • 水平方向(Gx):检测垂直边缘

  • 垂直方向(Gy):检测水平边缘

  • 梯度幅值:综合两个方向的梯度强度

卷积核结构:

# X方向(垂直边缘)
kernel_x = np.array([[-1, 0, 1],[-2, 0, 2],[-1, 0, 1]])# Y方向(水平边缘)
kernel_y = np.array([[-1,-2,-1],[ 0, 0, 0],[ 1, 2, 1]])

权重分配:中心行/列的权重更高,增强对中心像素的敏感性。 

使用Sobel算子对lene进行边缘检测

import cv2
import numpy as np# 读取图像并转换为灰度图
image = cv2.imread('../lene.jpg', 0)# 使用Sobel算子计算x和y方向的梯度
sobel_x = cv2.Sobel(image, cv2.CV_64F, 1, 0, ksize=3)
sobel_y = cv2.Sobel(image, cv2.CV_64F, 0, 1, ksize=3)# 计算总梯度
gradient_magnitude = cv2.magnitude(sobel_x, sobel_y)# 将梯度映射到8位范围内
gradient_magnitude = np.uint8(255 * gradient_magnitude / np.max(gradient_magnitude))# 显示结果
cv2.imshow('Original Image', image)
cv2.imshow('Sobel Edge Detection', gradient_magnitude)
cv2.waitKey(0)
cv2.destroyAllWindows()

运行后:

 五、Scharr算子

Scharr算子是Sobel算子的优化版本,通过改进核系数设计,显著提升边缘检测的方向精度旋转对称性。其核心改进在于:

  • 核权重调整:增大中心行/列的权重差异

  • 数学推导:基于最小化角度误差的优化目标函数

卷积核结构:

# X方向(垂直边缘检测)
scharr_x = np.array([[-3,  0,  3],[-10, 0, 10],[-3,  0,  3]])# Y方向(水平边缘检测)
scharr_y = np.array([[-3, -10, -3],[ 0,   0,  0],[ 3,  10,  3]])

使用Scharr算子对lene进行边缘检测

import cv2
import numpy as np# 读取图像并转换为灰度图
image = cv2.imread('../lene.jpg', 0)# 使用Scharr算子计算x和y方向的梯度
scharr_x = cv2.Scharr(image, cv2.CV_64F, 1, 0)
scharr_y = cv2.Scharr(image, cv2.CV_64F, 0, 1)# 计算总梯度
gradient_magnitude = cv2.magnitude(scharr_x, scharr_y)# 将梯度映射到8位范围内
gradient_magnitude = np.uint8(255 * gradient_magnitude / np.max(gradient_magnitude))# 显示结果
cv2.imshow('Original Image', image)
cv2.imshow('Scharr Edge Detection', gradient_magnitude)
cv2.waitKey(0)
cv2.destroyAllWindows()

运行结果:

关键优势 

特性Scharr vs Sobel
方向精度角度误差从Sobel的±7°降至±1°(提升86%)
边缘响应边缘宽度更细(约1.5像素 vs Sobel的2-3像素)
旋转对称性对45°方向边缘的响应更一致
计算效率与Sobel相同(可分离卷积),实测耗时比Sobel多约15%

六、Laplacian算子

Laplacian算子是基于二阶导数的边缘检测方法,通过寻找图像灰度变化的拐点(零交叉点)来定位边缘,其本质是计算图像的拉普拉斯算子。

离散卷积核:

# 4邻域版本(常用)
kernel_4 = np.array([[ 0, 1, 0],[ 1,-4, 1],[ 0, 1, 0]])# 8邻域版本(对角增强)
kernel_8 = np.array([[ 1, 1, 1],[ 1,-8, 1],[ 1, 1, 1]])

使用Laplacian算子对lene进行边缘检测

import cv2
import numpy as np# 读取图像并转换为灰度图
image = cv2.imread('../lene.jpg', 0)# 在应用Laplacian算子之前进行高斯模糊
blurred = cv2.GaussianBlur(image, (3, 3), 0)
laplacian = cv2.Laplacian(blurred, cv2.CV_64F)# 将结果转换回uint8类型
laplacian_abs = cv2.convertScaleAbs(laplacian)# 显示结果
cv2.imshow('Original Image', image)
cv2.imshow('Laplacian Edge Detection', laplacian_abs)
cv2.waitKey(0)
cv2.destroyAllWindows()

运行结果:

 七、Canny边缘检测

Canny边缘检测是一种多阶段优化算法,包含以下关键步骤:

  1.  高斯滤波(去噪)

  2. 梯度计算(Sobel算子)

  3. 非极大抑制(NMS)

    1. 目的:保留梯度方向上的局部最大值,细化边缘

    2. 方法:比较当前像素与其梯度方向上的相邻像素

  4. 双阈值检测

阈值类型处理方式典型比例
强边缘直接保留(>高阈值)高阈值 = 2.5×低阈值
弱边缘仅当连接强边缘时保留(低~高阈值)低阈值 = 图像梯度中值×0.5

使用Canny对lene进行边缘检测

import cv2# 读取图像并转换为灰度图
image = cv2.imread('../lene.jpg', 0)# 高斯模糊降噪
blurred = cv2.GaussianBlur(image, (5, 5), 0)# 使用Canny进行边缘检测
edges = cv2.Canny(blurred, threshold1=50, threshold2=150)# 显示结果
cv2.imshow('Original Image', image)
cv2.imshow('Canny Edge Detection', edges)
cv2.waitKey(0)
cv2.destroyAllWindows()

运行结果:

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

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

相关文章

018 进程控制 —— 进程等待

🦄 个人主页: 小米里的大麦-CSDN博客 🎏 所属专栏: Linux_小米里的大麦的博客-CSDN博客 🎁 GitHub主页: 小米里的大麦的 GitHub ⚙️ 操作环境: Visual Studio 2022 文章目录进程控制 —— 进程等待1. 进程等待必要性2. 常用等待方法&#xf…

PHP password_hash() 函数

password_hash() 函数用于创建密码的散列(hash)PHP 版本要求: PHP 5 > 5.5.0, PHP 7语法string password_hash ( string $password , int $algo [, array $options ] )password_hash() 使用足够强度的单向散列算法创建密码的散列(hash&…

理解Linux文件系统:从物理存储到统一接口

目录 一、狭义理解(物理层面) 二、广义理解(Linux系统视角) 三、文件结构解析 四、系统实现机制 一、狭义理解(物理层面) 存储特性:文件以二进制形式存储在磁盘等永久性存储介质中 介质特点…

前端接入海康威视摄像头的三种方案

方案选择​方案适用场景优缺点​Web SDK(3.0)​​需要完整功能(PTZ控制、录像回放)功能全,但需加载海康JS文件​RTSP转Web播放​低延迟实时监控需后端转码(如FFmpeg转HLS)​HTTP API​简单截图或…

openGL学习(Shader)

认识Shader在计算机图形学中,Shader(着色器)是一种运行在 GPU(图形处理单元)上的程序,用于控制图形渲染过程中顶点和像素的处理。着色器是 OpenGL、Direct3D、Vulkan 等图形 API 的核心组成部分&#xff0c…

webpack高级配置

一、了解webpack高级配置: 1、什么是webpack高级配置: 进行 Webpack 优化,让代码在编译或者运行时性能更好 2、webpack优化从哪些方面入手: ① 提升开发体验,增强开发和生产环境的代码调试: 如果代码编写…

LLM表征工程还有哪些值得做的地方

LLM表征工程还有哪些值得做的地方 在大型语言模型(LLM)的表征工程领域,近年来涌现出多个具有突破性的创新方向,这些方法通过动态调整、多模态融合、结构化记忆增强等技术,显著提升了模型的适应性、可解释性和效率。 一、动态自适应表征:从静态到动态的范式革新 传统LL…

LabVIEW智能避障小车

​LabVIEW结合 NI、德州仪器(TI)、欧姆龙(Omron)等硬件,设计实现了一款具备智能避障、循迹功能的轮式机器人。系统支持手动操控与自主运行两种模式,通过无线通信实时传输传感器数据与图像信息,在…

逻辑代数中的基本规则,代入规则和反演规则,对偶规则

本文探讨了代入规则在逻辑等式中的应用,解释了如何通过替换变量来保持等式的正确性,同时介绍了反演规则和对偶规则的概念。代入规则定义:在任何一个包含变量A的逻辑等式中,如果用另一个逻辑式代入式中的所有A位置,则等式依然成立反…

Javaweb使用websocket,请先连上demo好吧!很简单的!

Javaweb使用websocket先看结构及效果MyWebSocketHandler用于处理消息WebSocketConfig用于配置建联地址等SchedulerConfig必须配置这个MyWebSocketInterceptor建联的拦截器SpringBootWebsocketApplication启动类POM依赖展示效果源码先看结构及效果 MyWebSocketHandler用于处理消…

文心大模型4.5开源测评:保姆级部署教程+多维度测试验证

前言:国产大模型开源的破局时刻 2025年6月百度文心大模型4.5系列的开源,标志着国产AI从"技术跟跑"向"生态共建"的关键跨越。 文心大模型4.5是百度自主研发的新一代原生多模态基础大模型,通过多个模态联合建模实现协同优…

前端学习5:Float学习(仅简单了解,引出flex)

一、Float基础概念1. 设计初衷: float最初是为实现文字环绕图片的效果(类似杂志排版),后来被开发者用来做页面布局。2. 核心特性:使元素脱离普通文档流(但仍在DOM中)元素会向左/右浮动&#xff…

08-自然壁纸实战教程-视频列表-云

08-自然壁纸实战教程-视频列表 前言 视频列表页面本质上也是一个数据展示的列表,不同之处在于之前是是展示壁纸,Image组件负责渲染,这里展示的是视频,使用Video组件,另外视频页面也实现了下载的基本功能,…

SCI特刊征稿

我们团队联合北京工业大学研究团队在SCI源刊CMC组织了特刊SI: Advanced Edge Computing and Artificial Intelligence in Smart Environment,主要收录边缘计算和人工智能方向的文章,欢迎领域专家和学者投稿,网址https://www.techscience.com/cmc/special…

DO,VO,DTO.....

在 Java 项目里(尤其是 Spring、MyBatis 这类框架),经常会看到一堆以 O 结尾的类:VO、DO、DTO、BO、POJO……它们本质上都是普通的 Java Bean(即 POJO),但职责和出现的位置不同。下面用“用户下…

数据结构之并查集和LRUCache

系列文章目录 数据结构之ArrayList_arraylist o(1) o(n)-CSDN博客 数据结构之LinkedList-CSDN博客 数据结构之栈_栈有什么方法-CSDN博客 数据结构之队列-CSDN博客 数据结构之二叉树-CSDN博客 数据结构之优先级队列-CSDN博客 常见的排序方法-CSDN博客 数据结构之Map和Se…

UE5多人MOBA+GAS 21、给升龙添加连段攻击,从角色的按下事件中传递事件给GA

文章目录给升龙制作可连段缓存下一连段用普攻键来触发升龙后续的连段在角色中发送按下普攻标签事件在升龙中接收按下事件,触发连段以及伤害和力量的传递最后在蓝图中设置一下升龙技能的完整代码给升龙制作可连段 给升龙技能添加一些连段 缓存下一连段 缓存下一连…

基于光栅传感器+FPGA+ARM的测量控制解决方案

基于光栅传感器结合FPGA与ARM的测量控制解决方案,通过硬件协同分工实现高精度、实时性及多场景适应性:⚙️ ‌一、系统架构分工‌‌传感层(光栅传感器)‌采用光栅尺输出正交脉冲信号,分辨率达0.5μm,精度1μ…

NW831NW910美光固态闪存NW887NW888

美光固态闪存深度解析:NW831、NW910、NW887、NW888系列全方位评测一、技术根基与架构创新美光NW系列固态闪存的技术突破源于其先进的G9 NAND架构,该架构采用5纳米制程工艺和多层3D堆叠技术,在单位面积内实现了高达256层的存储单元堆叠&#x…

reasense api 文档

API 架构 英特尔实感(Intel RealSense™)API 提供对深度摄像头流数据的配置、控制和访问功能。该 API 支持通过高层级 API 快速启用摄像头基础功能,或通过底层级 API 全面控制所有摄像头设置。请根据需求选择合适的 API: 高层级 P…