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

【IPMV】图像处理与机器视觉:Lec10 Edges and Lines

【IPMV】图像处理与机器视觉:Lec10 Edges and Lines

本系列为2025年同济大学自动化专业**图像处理与机器视觉**课程笔记
Lecturer: Rui Fan、Yanchao Dong


Lec0 Course Description

Lec3 Perspective Transformation

Lec7 Image Filtering

Lec8 Image Pyramid

Lec9 Laplace Blending

Lec10 Edges and Lines

Lec11 Keypoint Features and Corners

持续更新中

文章目录

  • 【IPMV】图像处理与机器视觉:Lec10 Edges and Lines
    • 1. 边缘是什么?
    • 2. 如何找边缘?——用梯度(Gradient)
        • Image Gradient 图像梯度
        • Derivative of Gaussian 高斯导数
        • 边缘检测算子(卷积核)
        • 边缘后处理——Tinning and Thresholding 细化与阈值处理
    • 3. Canny边缘检测
    • 4. 利用二阶导数: Laplacian & LoG & DoG
        • 一阶与二阶导数
        • 拉普拉斯算子 vs. LoG vs. DoG
    • 4. 直线检测: Hough Transform
    • 5. 总结


Edges and Lines

  • Boundaries
  • shadow boundaries
  • Creases

Edge Detection 边缘检测

Edge operators (edge enhancement filters)

边缘像素是在图像强度函数的一阶导数的极值处找到的。

1. 边缘是什么?

边缘就是图像中颜色/亮度突然变化的地方,比如:

  • 物体的轮廓线(比如杯子边缘)
  • 阴影分界线
  • 文字笔画

2. 如何找边缘?——用梯度(Gradient)

Image Gradient 图像梯度

边缘出现在图像亮度变化最大的地方,数学上用梯度表示:

  • ∇ f = G x = [ ∂ f ∂ x ∂ f ∂ y ] \nabla f = G_x = \begin{bmatrix} \frac{\partial f}{\partial x} \\ \\ \frac{\partial f}{\partial y} \\ \end{bmatrix} f=Gx= xfyf
  • 梯度方向:亮度变化最快的方向(垂直于边缘)
  • 梯度大小(幅度):变化有多剧烈
    ∣ ∇ f ∣ = ( ∂ f ∂ x ) 2 + ( ∂ f ∂ y ) 2 | \nabla f | = \sqrt{ \left( \frac{\partial f}{\partial x} \right)^2 + \left( \frac{\partial f}{\partial y} \right)^2 } ∣∇f=(xf)2+(yf)2

(其实就是计算水平和垂直方向的亮度变化,再合成总变化强度)

Derivative of Gaussian 高斯导数

先对图像用高斯函数模糊(去噪),再求导:
h σ ( u , v ) = 1 2 π σ 2 e − ( u 2 + v 2 2 σ 2 ) h_{\sigma}(u, v) = \frac{1}{2\pi\sigma^2} e^{-(\frac{u^2+v^2}{2\sigma^2})} hσ(u,v)=2πσ21e(2σ2u2+v2)
优点:边缘更平滑,减少噪声干扰。


边缘检测算子(卷积核)

实际计算时,用一个小矩阵(卷积核)扫描图像,模拟求导过程。常见算子:

常见算子Prewitt 算子Sobel 算子(更常用)
水平方向( G x Gₓ Gx:检测垂直边缘(比如竖线) G x = [ − 1 0 1 − 1 0 1 − 1 0 1 ] G_x = \begin{bmatrix} -1 & 0 & 1 \\ -1 & 0 & 1 \\ -1 & 0 & 1 \end{bmatrix} Gx= 111000111
垂直方向( G γ Gᵧ Gγ:检测水平边缘(比如横线) G y = [ − 1 − 1 − 1 0 0 0 1 1 1 ] G_y = \begin{bmatrix} -1 & -1 & -1 \\ 0 & 0 & 0 \\ 1 & 1 & 1 \end{bmatrix} Gy= 101101101
水平方向( S x Sₓ Sx S x = [ − 1 0 1 − 2 0 2 − 1 0 1 ] S_x = \begin{bmatrix} -1 & 0 & 1 \\ -2 & 0 & 2 \\ -1 & 0 & 1 \end{bmatrix} Sx= 121000121
垂直方向( S γ Sᵧ Sγ S y = [ − 1 − 2 − 1 0 0 0 1 2 1 ] S_y = \begin{bmatrix} -1 & -2 & -1 \\ 0 & 0 & 0 \\ 1 & 2 & 1 \end{bmatrix} Sy= 101202101
特点简单,但对噪声敏感。权重更大 → 对中心像素更敏感 → 边缘更清晰,噪声影响更小。

求导——Sobel

图像幅值

边缘后处理——Tinning and Thresholding 细化与阈值处理
  • 非极大值抑制 NMS
    • 只保留梯度方向上的局部最大值点,剔除冗余边缘,使边缘变细。
    • 效果:边缘从“粗线”变为“单像素宽”的细线。
  • 阈值处理
    • 设定一个阈值,只保留梯度强度高于该值的边缘点,生成二值化边缘图像。
    • 示例:Sobel算子检测后的图像经过阈值处理,得到清晰的边缘轮廓。

3. Canny边缘检测

最常用

结合高斯模糊、梯度计算、NMS和双阈值,得到清晰、连续的边缘。

步骤

  1. 高斯滤波:先用高斯模糊降噪。
  2. 梯度计算:用Sobel算子计算梯度的强度和方向。
  3. 非极大值抑制:细化边缘。
  4. 双阈值检测
    • 高阈值:保留强边缘(肯定是真的边缘,如物体轮廓)。
    • 低阈值:保留弱边缘(可能是噪声或次要边缘,如阴影或纹理)。
    • 最终边缘 = 强边缘 + 与强边缘相连的弱边缘。
    • 规则:仅保留与强边缘相连的弱边缘,孤立弱边缘视为噪声。

优势

  • 抗噪声能力强。
  • 能检测真实的弱边缘(如模糊边界)。

4. 利用二阶导数: Laplacian & LoG & DoG

前面算子一阶导数

一阶与二阶导数
  • 一阶导数(梯度)
    • f ′ ( x ) f'(x) f(x):检测亮度变化最快的位置(对应边缘)。
    • 问题:对噪声敏感(噪声会导致虚假边缘)。
  • 二阶导数(拉普拉斯)
    • f ′ ′ ( x ) f''(x) f′′(x):检测亮度变化的拐点(边缘处二阶导过零)。
    • 优势:能定位更精细的边缘和角点。
  • 高斯滤波:先对图像平滑(低通滤波),再求导,减少噪声影响。
拉普拉斯算子 vs. LoG vs. DoG
特性拉普拉斯算子高斯-拉普拉斯(LoG)高斯差分(DoG)
数学原理直接计算二阶导数先高斯模糊,再拉普拉斯运算两个不同标准差的高斯模糊图像相减
核心公式 ∇ 2 = ∂ 2 ∂ x 2 + ∂ 2 ∂ y 2 \nabla^2 = \frac{\partial^2}{\partial x^2} + \frac{\partial^2}{\partial y^2} 2=x22+y22 ∇ 2 ( G σ ∗ f ) \nabla^2 (G_\sigma * f) \quad 2(Gσf) G σ 1 ∗ f − G σ 2 ∗ f (σ₁ > σ₂) G_{\sigma_1} * f - G_{\sigma_2} * f \quad \text{(σ₁ > σ₂)} Gσ1fGσ2fσ₁ > σ₂
离散卷积核3×3核(常用): [ 0 1 0 1 − 4 1 0 1 0 ] \begin{bmatrix} 0 & 1 & 0 \\ 1 & -4 & 1 \\ 0 & 1 & 0 \end{bmatrix} 010141010
5×5核(更精确): 1 6 [ 1 4 1 4 − 20 4 1 4 1 ] \frac{1}{6}\begin{bmatrix} 1 & 4 & 1 \\ 4 & -20 & 4 \\ 1 & 4 & 1 \end{bmatrix} 61 1414204141
抗噪性❌ 极差(噪声会被放大)✅ 强(高斯滤波抑制噪声)⚠️ 中等(依赖高斯参数选择)
计算复杂度⏱️ 低(单次卷积)⏱️ 高(两次卷积:高斯+拉普拉斯)⏱️ 中(两次高斯卷积,可并行)
边缘定位精度✅ 高(无模糊,锐利边缘)✅ 最高(零交叉点精准)⚠️ 中等(近似LoG)
检测目标边缘、角点、细线(二阶导过零点)边缘(零交叉点)边缘(近似零交叉点)
是否需要调参❌ 无参数✅ σ(高斯标准差)需调整 σ 1 σ₁ σ1 σ 2 σ₂ σ2需匹配(通常 σ 1 ≈ 1.6 σ 2 σ₁≈1.6σ₂ σ11.6σ2
适用场景高清晰度图像、角点检测、工业精密测量医学影像、复杂场景边缘提取实时处理(如SIFT特征提取、机器人视觉)
直观比喻裸眼找边缘(清晰但易受干扰)戴降噪眼镜找边缘(精准但耗时)快速对比两副眼镜找边缘(平衡速度与效果)
  • 抗噪性
    • LoG > DoG > 拉普拉斯算子
    • 拉普拉斯算子对噪声敏感,适合无噪环境;LoG通过高斯滤波显著降噪。
  • 计算效率
    • 拉普拉斯算子 > DoG > LoG
    • DoG 是 LoG的快速近似,适合实时系统。
  • 边缘质量
    • LoG > 拉普拉斯算子 ≈ DoG
    • LoG的零交叉检测最精准;拉普拉斯在无噪时边缘锐利,但噪声下失效。
  • 选择
    • 需要抗噪+高精度LoG(如医学影像分析)。
    • 实时性要求高DoG(如自动驾驶车道检测)。
    • 无噪声+简单场景拉普拉斯算子(如工业零件尺寸测量)。


优点

  • 边缘定位更精确。
  • 抗噪声能力显著优于普通拉普拉斯。

4. 直线检测: Hough Transform

霍夫变换是一种从图像中检测几何形状(如直线、圆等)的算法,其核心是通过参数空间投票机制将图像中的边缘点映射为参数空间的累积统计,最终通过寻找峰值确定几何形状的参数。

  • 原理
    • 参数化表示:每条直线可用极坐标参数 ( ρ , θ ) (ρ, θ) (ρ,θ) 表示
      • ρ = x sin ⁡ θ + y cos ⁡ θ \rho = x \sin \theta + y \cos \theta ρ=xsinθ+ycosθ
      • ρ \rho ρ:直线到原点的垂直距离。
      • θ \theta θ:直线与x轴的夹角。
    • 投票机制
      • 每个边缘点对所有可能经过它的直线投票。
      • 投票最多的 ( ρ , θ ) (ρ, θ) (ρ,θ) 就是图像中的直线。
  • 步骤
  1. 检测边缘
    • 先用 Canny 等算法提取图像边缘(得到二值边缘图)
  2. 初始化累加器
    • 创建一个二维数组 ( ρ × θ ) (\rho \times \theta) (ρ×θ),初始值为0。
  3. 投票过程
    • 对每个边缘点 ( x , y ) (x, y) (x,y),遍历所有可能的 θ \theta θ(如0°~180°),计算对应的 ρ \rho ρ,并在累加器中对应位置投票(+1)。
  4. 峰值检测
    • 找到累加器中的局部最大值(即投票数最多的 ( ρ , θ ) (\rho, \theta) (ρ,θ)),这些值即为图像中的直线参数。
  5. 后处理(可选)
    • 对检测到的直线进行拟合优化(如最小二乘法),剔除噪声或合并相近直线。
特性说明
优点对遮挡和噪声鲁棒(部分边缘点缺失仍可检测)
可推广到其他形状(圆、椭圆等)
缺点计算量大(参数空间维度随形状复杂度增加)
需手动设置阈值(如累加器峰值阈值)
时间复杂度 O ( n × m ) O(n \times m) O(n×m) n n n为边缘点数, m m m θ θ θ的离散化数量)

应用场景

  • 车道线检测(自动驾驶)。
  • 文档分析(检测表格线或文字行)。
  • 工业检测(机械零件边缘对齐)。

5. 总结

方法核心思想优点缺点
Sobel/Prewitt一阶导数求梯度计算快噪声敏感
Canny高斯导数+双阈值+NMS抗噪强,边缘完整计算复杂
Laplacian直接二阶导数检测精细特征(如角点)极度敏感噪声
LoG高斯平滑+二阶导数边缘精准,抗噪计算量大
  • 找边缘:用Sobel或Canny(像用铅笔描边)
  • 抗噪声:Canny或LoG(像先涂模糊再描边,避免手抖)
  • 精细边缘:LoG(能检测到更微弱的边缘变化)

霍夫变换(参数化表示+投票机制)进行直线检测

相关文章:

【IPMV】图像处理与机器视觉:Lec10 Edges and Lines

【IPMV】图像处理与机器视觉:Lec10 Edges and Lines 本系列为2025年同济大学自动化专业**图像处理与机器视觉**课程笔记 Lecturer: Rui Fan、Yanchao Dong Lec0 Course Description Lec3 Perspective Transformation Lec7 Image Filtering Lec8 Image Pyramid …...

Elasticsearch 初步认识

Elasticsearch 初步认识 1 索引(index) 索引是具有相同结构的文档集合。例如,可以有一个客户信息的索引,包括一个产品目录的索引,一个订单数据的索引。在系统上索引的名字全部小写,通过这个名字可以用来执…...

数据库DDL

数据库DDL(数据定义语言)全面解析 一、DDL定义 DDL(Data Definition Language,数据定义语言)是SQL语言的一个子集,专门用于定义和管理数据库结构。它允许数据库管理员和开发人员创建、修改和删除数据库对象…...

企业级小程序APP用户数据查询系统安全脆弱性分析及纵深防御体系构建

一、用户数据查询系统安全现状分析 1.1 业务场景风险建模 在企业小程序用户数据查询业务中,普遍存在以下安全风险点: ①输入验证缺失:未对姓名、身份证号等关键输入进行严格的格式校验与合法性检查 ②身份认证薄弱:仅依赖基础参数…...

互联网大厂Java面试:从Spring Boot到微服务架构的技术深挖

场景描述 在某互联网大厂的面试会议室里,严肃的面试官老王正审视着面前的程序员明哥。这场面试以业务场景为切入点,围绕Java技术栈展开。 第一轮:基础知识与Spring生态 面试官老王: 明哥,你对Spring Boot的核心功能…...

23种设计模式解释+记忆

一、创建型模式(5种)—— “怎么造对象?” 单例模式(Singleton) 场景:公司的CEO只能有一个。 核心:确保一个类只有一个实例,全局访问。 关键词:唯一、全局访问。 工厂方…...

逻辑与非逻辑的弥聚

非逻辑弥聚与逻辑弥聚是复杂系统中两种不同的信息整合方式。逻辑弥聚侧重于通过明确的规则、规律和结构化方法,将分散的信息或功能进行有序的组织和集中处理,强调理性和确定性。而非逻辑弥聚则更多地涉及情感、直觉、经验等非线性、非结构化的因素&#…...

Python 从列表中删除值的多种实用方法详解

# Python 从列表中删除值的多种实用方法详解 在Python编程中,列表(List)是一种常用的数据结构,具有动态可变的特性。当我们需要从列表中删除元素时,根据不同的场景(如按值删除、按索引删除、批量删除等&…...

C++多线程数据错乱

C多线程数据错乱(也称为线程安全问题或数据竞争)主要是由于多个线程在没有正确同步的情况下,并发访问和修改共享数据导致的。其主要原因包括以下几个方面: 一、线程交替执行导致的非原子操作 线程在执行时,可能会在中途被挂起&a…...

StarRocks Community Monthly Newsletter (Apr)

版本动态 3.4.3 版本更新 核心功能升级 Routine Load和Stream Load新增Lambda表达式支持,支持复杂的列数据提取 增强JSON数据处理能力,支持将JSON Array/Object转为ARRAY/MAP类型 优化information_schema.task_runs视图查询,新增LIMIT支持…...

延时双删-争议与我的思路-001

目录 概括大概思路目的场景思路一退货时间差 思路2思路3 最后 概括 延时双删,是指在代码中删除两次缓存. 第一次自己访问,先删除.之后直接访问数据库获得数据 第二次是指 在第一步之后,在删除一次缓存的数据 大概思路 不进行延时双删的.寻找别的解决方法 目的 主要是为了…...

Tomcat简述介绍

文章目录 Web服务器Tomcat的作用Tomcat分析目录结构 Web服务器 Web服务器的作用是接收客户端的请求,给客户端作出响应。 知名Java Web服务器 Tomcat(Apache):用来开发学习使用;免费,开源JBoss&#xff0…...

掌握版本控制从本地到分布式

一、什么是版本控制? 版本控制是一种记录文件(尤其是源代码)在“时间轴”上变更的系统,主要功能包括: 历史回溯:随时恢复到任意版本的代码或文档;差异比较:查看两个版本之间的改动…...

Linux `touch` 命令深度解析与高阶应用指南

Linux `touch` 命令深度解析与高阶应用指南 一、核心功能解析1. 基本作用2. 与类似操作对比二、选项系统详解1. 基础选项说明2. 时间格式说明三、高阶应用技巧1. 时间戳控制2. 批量文件操作3. 特殊文件处理四、企业级应用场景1. 日志系统维护2. 持续集成系统3. 安全审计跟踪五、…...

Django学习

1:在PyCharm终端: # 查看已安装的Django版本 python -m django --version # 或 pip show django # 卸载当前Django pip uninstall django# 安装指定版本(例如Django 3.2.10) pip install django3.2.10 2. 检查Python版本兼容性 …...

Java IO框架

I/O框架 流 流的分类: 按方向: 输入流:将存储设备的内容读入到内存中 输出流:将内存的内容写入到存储设备中 按单位: 字节流:以字节为单位,可以读取所有数据 字符流:以字符为单…...

Spring AI Alibaba集成阿里云百炼大模型

1.准备工作 开发环境&#xff1a;JDK17、SpringBoot3.x 2.引入maven依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance&q…...

5月18总结

一.算法题总结 1. 解题思路&#xff1a;对于这个题&#xff0c;我最开始想到就是二分&#xff0c;但是头痛的是有三个解&#xff0c;如果我在-100到100之间二分&#xff0c;那么只能得出一个解&#xff0c;然后我就想了一下&#xff0c;这个要求精度&#xff0c;那么0.01这么小…...

动态规划(4)可视化理解:图形化思考

引言 动态规划作为一种强大的算法设计范式,其抽象性常常使初学者感到困惑。许多学习者在理解状态定义、状态转移方程和递归结构时遇到困难,这些困难往往源于动态规划问题的高度抽象性和复杂性。然而,人类的大脑天生擅长处理视觉信息,通过将抽象的动态规划概念转化为直观的…...

2025年- H31-Lc139- 242.回文链表(快慢指针)---java版--需2刷

1.题目描述 2.思路 &#xff08;1&#xff09;将链表取中位数&#xff0c;分为左右两部分。 &#xff08;2&#xff09;右半部分的元素进行反转链表&#xff0c;能达到O&#xff08;1&#xff09;的空间复杂度 &#xff08;3&#xff09;再判断左右部分的元素&#xff0c;是否…...

云原生安全:IaaS安全全解析(从基础到实践)

🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、基础概念:IaaS的核心价值与安全边界 1.1 什么是IaaS? 基础设施即服务(Infrastructure as a Service)是云计算的基础层,提供虚拟机、存储、网络等基础资源。用户通过…...

【AGI】大模型微调数据集准备

【AGI】大模型微调数据集准备 &#xff08;1&#xff09;模型内置特殊字符及提示词模板&#xff08;2&#xff09;带有系统提示和Function calling微调数据集格式&#xff08;3&#xff09;带有思考过程的微调数据集结构&#xff08;4&#xff09;Qwen3混合推理模型构造微调数据…...

二分算法的介绍简单易懂

目录 1.概论 2.朴素的二分算法 3.求左端点的二分算法和求右端点的二分算法 4.总结 1.概论 要想了解什么是二分算法&#xff0c;我们就要知道什么是二分算法&#xff0c;二分算法是根据数组的规律&#xff0c;每次查找的数据原来的效率可能要O&#xff08;n&#xff09;,而我…...

Trae IDE和VSCode Trae插件初探

Trae IDE初探 输入以下提示词&#xff1a; 生成一个to do list清单web页面&#xff0c;采用vue实现&#xff0c;可以在页面上进行todolist进行增删改查。​ VSCode Trae插件初探 trae vscode插件初探 tips&#xff1a;如果还是提示找不到npm命令&#xff0c;重启vscode即可&am…...

数据结构 -- 树形查找(三)红黑树

红黑树 为什么要发明红黑树 平衡二叉树AVL&#xff1a;插入/删除很容易破坏平衡性&#xff0c;需要频繁调整树的形态。如&#xff1a;插入操作导致不平衡&#xff0c;则需要先计算平衡因子&#xff0c;找到最小不平衡子树&#xff08;时间开销大&#xff09;&#xff0c;在进行…...

Mac 在恢复模式下出现 旋转地球图标 但进度非常缓慢

如果您的 Mac 在恢复模式下出现 旋转地球图标 但进度非常缓慢&#xff0c;可能是由于网络连接或系统恢复机制的问题。以下是详细的解决方案&#xff1a; 1. 检查网络连接 • Wi-Fi 信号&#xff1a;确保您的 Wi-Fi 信号稳定&#xff0c;建议靠近路由器或使用有线网络&#xff…...

【YOLO(txt)格式转VOC(xml)格式数据集】以及【制作VOC格式数据集 】

1.txt—>xml转化代码 如果我们手里只有YOLO标签的数据集&#xff0c;我们要进行VOC格式数据集的制作首先要进行标签的转化&#xff0c;以下是标签转化的脚本。 其中picPath为图片所在文件夹路径&#xff1b; txtPath为你的YOLO标签对应的txt文件所在路径&#xff1b; xmlPa…...

【信息系统项目管理师】第8章:项目整合管理 - 39个经典题目及详解

更多内容请见: 备考信息系统项目管理师-专栏介绍和目录 文章目录 【第1题】【第2题】【第3题】【第4题】【第5题】【第6题】【第7题】【第8题】【第9题】【第10题】【第11题】【第12题】【第13题】【第14题】【第15题】【第16题】【第17题】【第18题】【第19题】【第20题】【第…...

“Cloud Native English“云原生时代下的微服务架构设计:从理论到实战全解析

前引 &#xff1a;技术演进与架构变革的必然性 在数字经济高速发展的今天&#xff0c;软件系统的复杂度呈指数级增长。传统单体架构已无法满足高并发、弹性扩展和快速迭代的需求。根据Gartner预测&#xff0c;到2026年全球75%的企业将完成微服务架构改造。本文将深入探讨云原生…...

自由学习记录(61)

使用了 #pragma multi_compile_fwdbase 这条编译指令启用了 Unity 内部用于主光源阴影支持的一组关键词变体&#xff0c;如&#xff1a; SHADOWS_SCREEN&#xff08;屏幕空间阴影贴图&#xff09; SHADOWS_DEPTH&#xff08;深度图阴影&#xff09; SHADOWS_SOFT&#xff08…...

深入了解linux系统—— 基础IO(下)

前言 在基础IO&#xff08;上&#xff09;中&#xff0c;我们了解了文件相关的系统调用&#xff1b;以及文件描述符是什么&#xff0c;和操作系统是如何将被打开的文件管理起来的。 本篇文章来继续学习文件相关的知识 重定向 在了解重定向之前&#xff0c;我们先来看这样的…...

Flink Table SQL

Apache Flink 提供了强大的 Table API 和 SQL 接口&#xff0c;用于统一处理批数据和流数据。它们为开发者提供了类 SQL 的编程方式&#xff0c;简化了复杂的数据处理逻辑&#xff0c;并支持与外部系统集成。 &#x1f9e9; 一、Flink Table & SQL 核心概念 概念描述Table…...

【Git】基本操作

【简介】 Git是一种“版本控制器”&#xff0c; 可以用于记录每次的修改以及版本的迭代 其可以控制电脑上所有格式的文件&#xff0c;方便地查看文件的每个小修改版本都修改了什么内容&#xff0c;但前提条件是被管理的文件需要放在对应的git仓库&#xff08;又名“版本库”&…...

【八股战神篇】MySQL高频面试题

目录 专栏简介 一 什么是索引 延伸 1 索引的底层使用的是什么数据结构&#xff1f; 2 MySQL 索引分类有哪些&#xff1f; 3 什么字段适合创建索引&#xff1f; 4 索引失效的场景 5 什么是最左匹配原则&#xff1f; 二 为什么 InnoDB 存储引擎选用 B 树而不是 B 树呢&a…...

服务器防文件上传手写waf

一、waf的目录结构&#xff0c;根据自己目录情况进行修改 二、创建文件夹以及文件 sudo mkdir -p /www/server/waf-monitor sudo mkdir -p /www/server/waf-monitor/quarantine #创建文件夹 chmod 755 /www/server/waf-monitor #赋权cd /www/server/waf-monitor/touch waf-m…...

ElasticSearch-集群

本篇文章依据ElasticSearch权威指南进行实操和记录 1&#xff0c;空集群 即不包含任何节点的集群 集群大多数分为两类&#xff0c;主节点和数据节点 主节点 职责&#xff1a;主节点负责管理集群的状态&#xff0c;例如分配分片、添加和删除节点、监控节点故障等。它们不直接…...

Android开发——原生渲染方案实现 PDF 预览功能

Android开发——原生渲染方案实现 PDF 预览功能 1. 引言2. 原生渲染方案核心设计:从数据到视图3. 混合文档容器:ViewPager2 与适配器设计1. 引言 在移动应用开发中,PDF 预览是文档处理场景的核心需求之一。Android 生态提供了多元化的技术方案,从系统级简版预览到原生渲染…...

Java求职者面试:从Spring Boot到微服务的技术点解析

Java求职者面试&#xff1a;从Spring Boot到微服务的技术点解析 场景&#xff1a;互联网医疗-预约挂号系统 面试官&#xff1a; “小明&#xff0c;我们今天的场景是一个互联网医疗的预约挂号系统。我们需要支持高并发的用户预约操作&#xff0c;同时保证数据一致性和系统的高…...

操作系统听课笔记之进程的概念

引入新的概念,为什么不能叫程序 内存中进程Image实例: stack: 局部变量(函数弹出来没有了) data: 全局变量(共享) 静态变量 heap: malloc分配的内存 从数据结构和算法角度解决问题: 设计相应的数据结构和设计算法 数据结构: 进程PCB 算法:创建进程和进程通信各种操作在线内…...

【基于Spring Boot 的图书购买系统】深度讲解 用户注册的前后端交互,Mapper操作MySQL数据库进行用户持久化

引言 在现代Web应用中&#xff0c;用户注册功能是用户与应用交互的入口。一个高效、安全且用户友好的注册系统不仅能吸引用户&#xff0c;还能为后续功能&#xff08;如个性化服务&#xff09;奠定基础。本博客将通过一个实际案例&#xff0c;展示如何使用HTML、JavaScript、j…...

Spark,连接MySQL数据库,添加数据,读取数据

以下是使用 Spark/SparkSQL 连接 MySQL 数据库、添加数据和读取数据的完整示例&#xff08;需提前准备 MySQL 驱动包&#xff09;&#xff1a; 一、环境准备 1. 下载 MySQL 驱动 - 下载 mysql-connector-java-8.0.33.jar &#xff08;或对应版本&#xff09;&#xff0c;放…...

ubuntu的虚拟机上的网络图标没有了

非正常的关机导致虚拟机连接xshell连接不上&#xff0c;ping也ping不通。网络的图标也没有了。 记录一下解决步骤 1、重启服务 sudo systemctl restart NetworkManager 2、图标显示 sudo nmcli network off sudo nmcli network on 3、sudo dhclient ens33 //(网卡) …...

Linux系统:ext2文件系统的核心概念和结构

本节重点 块、块组、分区的引入块组的构成inode与inode Table路径解析与路径缓存机制目录与文件名在文件系统中的存储分区的初始化与挂载 一、ext2文件系统 1.1 “块”的引入 在前言部分我们说扇区是磁盘硬件的最小读写单位&#xff0c;通常为512字节&#xff0c;但是在操作…...

Python 装饰器详解

装饰器是 Python 中一种强大的语法特性&#xff0c;它允许在不修改原函数代码的情况下动态地扩展函数的功能。装饰器本质上是一个高阶函数&#xff0c;它接受一个函数作为参数并返回一个新的函数。 基本装饰器 1. 简单装饰器示例 def my_decorator(func):def wrapper():prin…...

Docker配置容器开机自启或服务重启后自启

要将一个 Docker 容器设置为开机自启&#xff0c;你可以使用 docker update 命令或配置 Docker 服务来实现。以下是两种常见的方法&#xff1a; 方法 1&#xff1a;使用 docker update 设置容器自动重启 使用 docker update 设置容器为开机自启 你可以使用以下命令&#xff0c…...

20250518 黎曼在三维空间中总结的一维二维的规律,推广到高维度合适吗?有没有人提出反对意见

黎曼在三维空间中总结的一维二维的规律&#xff0c;推广到高维度合适吗&#xff1f;有没有人提出反对意见 黎曼几何在数学物理中的广泛应用&#xff0c;尤其是在广义相对论和高维空间理论中&#xff0c;确实是建立在黎曼在三维空间中的推广基础上的。不过&#xff0c;这种推广…...

使用AI 生成PPT 最佳实践方案对比

文章大纲 一、专业AI生成工具(推荐新手)**1. 推荐工具详解****2. 操作流程优化****3. 优势与局限**二、代码生成方案(开发者推荐)**1. Python-pptx进阶用法****2. GitHub推荐**三、混合工作流(平衡效率与定制)**1. 工具链升级****2. 示例Markdown结构**四、网页转换方案(…...

【Docker】Docker Compose方式搭建分布式协调服务(Zookeeper)集群

开发分布式应用时,往往需要高度可靠的分布式协调,Apache ZooKeeper 致力于开发和维护开源服务器&#xff0c;以实现高度可靠的分布式协调。具体内容见zookeeper官网。现代应用往往使用云原生技术进行搭建,如何用Docker搭建Zookeeper集群,这里介绍使用Docker Compose方式搭建分布…...

R for Data Science(3)

R for Data Science以下是关于网页内容的详细笔记&#xff1a; 1. 章节概览 章节主题&#xff1a;数据转换&#xff08;Data Transformation&#xff09;核心内容&#xff1a;介绍如何使用 R 中的 dplyr 包进行数据转换&#xff0c;包括对数据框的行、列和组的操作&#xff0…...

深入浅出Hadoop:大数据时代的“瑞士军刀”

深入浅出Hadoop&#xff1a;大数据时代的“瑞士军刀” 在当今这个数据爆炸的时代&#xff0c;每天产生的数据量已经远超人类的想象。从社交媒体的互动到电商平台的交易记录&#xff0c;从物联网设备的实时监控到科学研究的实验数据&#xff0c;大数据已经成为推动各行各业变革…...