【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= ∂x∂f∂y∂f
- 梯度方向:亮度变化最快的方向(垂直于边缘)
- 梯度大小(幅度):变化有多剧烈
∣ ∇ 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∣=(∂x∂f)2+(∂y∂f)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= −1−1−1000111 垂直方向( 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= −101−101−101 | 水平方向( 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= −1−2−1000121 垂直方向( 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= −101−202−101 | |
特点 | 简单,但对噪声敏感。 | 权重更大 → 对中心像素更敏感 → 边缘更清晰,噪声影响更小。 |
求导——Sobel
图像幅值
边缘后处理——Tinning and Thresholding 细化与阈值处理
- 非极大值抑制 NMS
- 只保留梯度方向上的局部最大值点,剔除冗余边缘,使边缘变细。
- 效果:边缘从“粗线”变为“单像素宽”的细线。
- 阈值处理
- 设定一个阈值,只保留梯度强度高于该值的边缘点,生成二值化边缘图像。
- 示例:Sobel算子检测后的图像经过阈值处理,得到清晰的边缘轮廓。
3. Canny边缘检测
最常用
结合高斯模糊、梯度计算、NMS和双阈值,得到清晰、连续的边缘。
步骤:
- 高斯滤波:先用高斯模糊降噪。
- 梯度计算:用Sobel算子计算梯度的强度和方向。
- 非极大值抑制:细化边缘。
- 双阈值检测:
- 高阈值:保留强边缘(肯定是真的边缘,如物体轮廓)。
- 低阈值:保留弱边缘(可能是噪声或次要边缘,如阴影或纹理)。
- 最终边缘 = 强边缘 + 与强边缘相连的弱边缘。
- 规则:仅保留与强边缘相连的弱边缘,孤立弱边缘视为噪声。
优势:
- 抗噪声能力强。
- 能检测真实的弱边缘(如模糊边界)。
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=∂x2∂2+∂y2∂2 | ∇ 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σ1∗f−Gσ2∗f(σ₁ > σ₂) |
离散卷积核 | 3×3核(常用): [ 0 1 0 1 − 4 1 0 1 0 ] \begin{bmatrix} 0 & 1 & 0 \\ 1 & -4 & 1 \\ 0 & 1 & 0 \end{bmatrix} 0101−41010 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 1414−204141 | ![]() | |
抗噪性 | ❌ 极差(噪声会被放大) | ✅ 强(高斯滤波抑制噪声) | ⚠️ 中等(依赖高斯参数选择) |
计算复杂度 | ⏱️ 低(单次卷积) | ⏱️ 高(两次卷积:高斯+拉普拉斯) | ⏱️ 中(两次高斯卷积,可并行) |
边缘定位精度 | ✅ 高(无模糊,锐利边缘) | ✅ 最高(零交叉点精准) | ⚠️ 中等(近似LoG) |
检测目标 | 边缘、角点、细线(二阶导过零点) | 边缘(零交叉点) | 边缘(近似零交叉点) |
是否需要调参 | ❌ 无参数 | ✅ σ(高斯标准差)需调整 | ✅ σ 1 σ₁ σ1和 σ 2 σ₂ σ2需匹配(通常 σ 1 ≈ 1.6 σ 2 σ₁≈1.6σ₂ σ1≈1.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轴的夹角。
- 投票机制
- 每个边缘点对所有可能经过它的直线投票。
- 投票最多的 ( ρ , θ ) (ρ, θ) (ρ,θ) 就是图像中的直线。
- 参数化表示:每条直线可用极坐标参数 ( ρ , θ ) (ρ, θ) (ρ,θ) 表示
- 步骤:
- 检测边缘
- 先用 Canny 等算法提取图像边缘(得到二值边缘图)
- 初始化累加器:
- 创建一个二维数组 ( ρ × θ ) (\rho \times \theta) (ρ×θ),初始值为0。
- 投票过程:
- 对每个边缘点 ( x , y ) (x, y) (x,y),遍历所有可能的 θ \theta θ(如0°~180°),计算对应的 ρ \rho ρ,并在累加器中对应位置投票(+1)。
- 峰值检测:
- 找到累加器中的局部最大值(即投票数最多的 ( ρ , θ ) (\rho, \theta) (ρ,θ)),这些值即为图像中的直线参数。
- 后处理(可选):
- 对检测到的直线进行拟合优化(如最小二乘法),剔除噪声或合并相近直线。
特性 | 说明 |
---|---|
优点 | 对遮挡和噪声鲁棒(部分边缘点缺失仍可检测) 可推广到其他形状(圆、椭圆等) |
缺点 | 计算量大(参数空间维度随形状复杂度增加) 需手动设置阈值(如累加器峰值阈值) |
时间复杂度 | 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(能检测到更微弱的边缘变化)
霍夫变换(参数化表示+投票机制)进行直线检测