当前位置: 首页 > 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(能检测到更微弱的边缘变化)

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

相关文章:

  • Linux STM32 电脑 之间的关系 为何选择Linux
  • NetApp FAS存储系统的加密Encrytpion解决方案介绍
  • 实时时钟项目设计
  • 实习记录小程序|基于SSM+Vue的实习记录小程序设计与实现(源码+数据库+文档)
  • 【微信小程序 + 高德地图API 】键入关键字搜索地址,获取经纬度等
  • 【从基础到模型网络】深度学习-语义分割-基础
  • 【深度学习新浪潮】大模型在哪些垂域已经有比较好的落地?
  • OpenCV-去噪效果和评估指标方法
  • C++多线程数据错乱
  • 常见的请求头(Request Header)参数
  • SpringMVC-拦截器
  • 虚幻引擎5-Unreal Engine笔记之`GameMode`、`关卡(Level)` 和 `关卡蓝图(Level Blueprint)`的关系
  • 从0到1吃透卷积神经网络(CNN):原理与实战全解析
  • Linux安全第三章-系统安全及应用
  • vscode优化使用体验篇(快捷键)
  • 【Leetcode】取余/2的幂次方
  • elasticsearch kibana ik 各版本下载
  • Java API学习笔记
  • iOS APP启动页及广告页的实现
  • Python打卡DAY29
  • 一周观展|一批重量级考古博物馆开馆:从凌家滩看到孙吴大墓
  • 中科院合肥物质院迎来新一届领导班子:刘建国继续担任院长
  • 摄影师|伊莎贝尔·穆尼奥斯:沿着身体进行文化溯源
  • 80后女博士黄双燕拟提名为内蒙古盟市政府(行署)副职人选
  • 东部沿海大省浙江,为何盯上内河航运?
  • 俄乌代表团抵达谈判会场