计算机视觉 04 Feature Detection
Edge Detection
Edge Detection: Identify sudden changes (discontinuities) in an image
可以用导数来描述”sudden changes”
Partial Derivative
- 导数:函数 f(x) 沿某个方向在某一点上变化的速率;梯度:所有偏导数堆叠在一起而形成
- 图像的偏导数(图像可以描述为2D function f(x,y)):
- 图像的偏导数可以用图像的滤波来计算:水平竖直方向分别用滤波卷积计算
每一个方向先前向差分再归一化,水平、竖直方向拼起来形成梯度
Noise Severely Affects Derivatives of an Image:求梯度的时候噪音的梯度被放大,主导图像的梯度
解决办法:先对图像做平滑处理,可以先对图像用高斯滤波,然后再进行边缘检测求梯度。经过数学推导改变偏导顺序可以把这个过程变为:
- 先对高斯求偏导
- 再对函数进行滤波求梯度
- 最后归一化
The gradient direction is given by:
- The edge strength is given by the gradient magnitude(梯度幅度):
Canny Edge Detector
- Canny Edge Detector的流程:
- 预处理: Grayscale conversion + Gaussion blur
- 使用中心差分来计算梯度图像(而不是第一次前向差分),这样更准确。
kernelX = {1,0,-1,2,0,-2,1,0,-1}
KernelY = {1,2,1,0,0,0,-1,-2,-1} - 计算梯度幅度,是连续变化,需要加阈值
- NMS非极大值抑制:消除误判导致的边界很粗现象,利用NMS使得Edge变得更细。遍历所有像素,仅保留edge detection中的最大值
- Double threshold(双阈值):
- 高于高阈值,则置为edge(1)
- 低于低阈值,则置为非edge(0)
- 处于低阈值~高阈值之间的(weak edges)进入下一阶段的检测
- Edge Tracking by Hysteresis(滞后现象):
- weak edges如果能连接到此前置为1的edge则置为1
- 否则置为0
Corners(角点检测)
- 初步定义角点:两条或多条边的交点
Harris Corner Detector
- Key idea: characterize corners by measuring the intensity change when shifting a small local window,移动窗口查看变化
移动窗口 W by (u,v)(点的平移)
移位前后每个像素的强度变化可以通过将平方差 (SSD) 相加来定义:其中,I(x,y)是像素的值,w(x,y)是像素的权重
缺点:循环遍历,精确计算所需时间很长
泰勒展开:一种线性化函数的方法
- 将其用于图像中(Harris Corner Detector)可得:
- The Sum of Squared Differences with Taylor Series:形成二次型,M是半正定对称矩阵
对称矩阵M和向量[u,v],假设:𝐸 [𝑢, 𝑣] = [𝑢, 𝑣] 𝑴 [𝑢, 𝑣].T。那么其等值线/切面,即是一个椭圆。𝐸 [𝑢, 𝑣]取不同值对应的椭圆面不同
可以通过将 M 分解为旋转 + 缩放来查看这个椭圆的形状。其中𝜆1𝜆2是特征值
- 特征值的解释:只有当𝜆1𝜆2都很大时,R才会很大,说明E在任何方向的变化都很大,此时为角点。否则𝜆1𝜆2任意一者小,R都会很小,不判定为角点
- summary:
- 预处理:将输入图像转换为灰度并应用高斯滤波器
- 求梯度:应用 Sobel 算子查找 x 和 y 渐变值
- 求Harris 值:对于每个像素 p,考虑其周围一个 3×3 窗口,并计算第二个矩矩阵 M 和角强度函数 R
- 设置阈值 R 和应用非最大值抑制NMS
Properties of Corners(角点的性质)
所有操作通过卷积完成,卷积操作具有平移不变性
旋转只会导致角旋转发生变化,特征值保持不变。角点具有旋转不变性
将仿射强度变化(颜色值的变化)定义为:𝐼𝑛𝑒𝑤 = 𝛼𝐼𝑜𝑙𝑑 + β(𝛼是对比度,β是明暗)。二阶矩矩阵 M 只取决于导数,所以 β 无关。但是,α 影响图像导数的缩放,并且存在阈值。角点对仿射强度变化部分不变
角点不随缩放而等变。欲使角点随缩放而等变,则可以使用高斯金字塔在尺度空间中执行 Harris 检测
Blobs(图像色块检测)
Limitations of Points and Edges:
- Edge难以被定位
- 角点可以被定位但是描述性低
Blobs:图像色块,是数字图像中与周围区域相比在属性(如亮度或颜色)上不同的区域
Blob 具有固定的位置和大小,可以localized,是很好的interest points
Blob detection是SIFT feature的前身
1D Blobs:和周围不一样,有两条边夹着Blobs,可以通过Edge detection完成Blobs检测
高斯梯度下的 Edge Detection
Filtering with convolution:𝑓 ∗ ℎ = ∫ 𝑓(𝜏) ℎ(𝑥 − 𝜏) 𝑑𝜏,其中*是卷积操作
Calculate gradient for edge detection:
Extremum of 𝑓 ∗ ℎ′ is an edge:设𝑓(𝑥) = 𝑢(𝑥 − 𝑥0)为阶跃函数,ℎ(𝑥) = 𝐺𝛿(𝑥) is a Gaussian function:𝑓 ∗ ℎ′= 𝑓 ∗ ℎ′= 𝑓′∗ ℎ= 𝐺𝛿(𝑥) ∗ 𝛿(𝑥 − 𝑥0)= 𝐺𝛿(𝑥 − 𝑥0)
The edge is at the location of 𝑥:
- 使用归一化高斯导数不依赖于 δ(冲击函数,采样函数) 的极值,即 f ∗ δ Gδ’
二阶高斯梯度下的 Edge Detection
- Extremum of 𝑓 ∗ ℎ′ is an edge → Zero-crossing of 𝑓 ∗ ℎ′′ is an edge
二阶高斯梯度下的 Blobs Detection
- Blob小,极值点加强。一个边两个极值。与之匹配的机制σ是Blob的大小,极值σ的位置是Blob的位置。图像随着σ的变化而变化
- Summary of 1D Blob Detection:
2D Blob Detection: Laplacian of Gaussian
- 直观地说,我们可以用高斯的二阶导数 G′′(x; σ) 在 x 方向上检测Blob,然后用 G′′ (y;σ) 在 y 方向上检测Blob;,然后对两个方向求和
- 可以使用多尺度高斯归一化拉普拉斯算力(NLoG: σ²∇²G x, y;σ )来检测二维Blob,即过滤具有不同σ值的图像,并提取极值
2D Blob Detection: Scale Selection
- 给定一个二进制圆和尺度为 σ 的 NLoG 滤波器,我们可以将结果计算为尺度 I(x, y; σ) 的函数:
- Summary of 2D Blob Detection:
SIFT Feature
尺度不变关键点的显著图像特征
将Blob作为尺度不变的关键点:
- 通过提取多尺度 NLoG 的极值来检测Blob
- 如果重新缩放了Blob,仍然可以在 NLoG 的移位滤波输出中检测到
- 在缩放归一化后,我们使Blob缩放不变
- Blob对旋转、遮挡、杂波或噪声也很鲁棒
Fast NLoG Approximation: DoG
- 高斯差值 (DoG) 是高斯归一化拉普拉斯量 (LoG) 的近似值和快速实现
Blob Detection with the Image Pyramid
- 通过在当前和相邻比例(用圆圈标记)下将像素与 3x3x3 区域中的 26 个相邻像素进行比较来检测 DoG 图像的极值
Blob Keypoint Selection
Computing the Principal Orientation of the Feature(计算特征的主方向)
通过计算梯度的方向和幅度来构建梯度方向直方图,选择梯度方向直方图中的峰值方向作为特征的主方向
可以用主方向来消除旋转带来的变化
可以使用梯度直方图作为描述符,实施细节:
- 使用关键点的缩放来选择图像的高斯模糊级别
- 预先计算金字塔所有级别的梯度以提高效率
- 使用高斯窗口(蓝色圆圈)以避免突然变化
- 将特征标准化为单位长度以减少照明的影响
- 在实践中,使用 4x4 本地窗口,每个窗口有 8 个方向,因此维度为 128
- Summary of SIFT:
Histogram of Oriented Gradients (HoG) Feature
局部物体的外观和形状可以通过梯度分布来表征,甚至无需精确了解梯度位置:
- 将图像大小调整为 128x64,并计算每个像素的梯度
- 将无符号梯度(幅度和角度)划分为 8x8 个单元格,并计算 9 点直方图
- 将 2x2 单元格分组,步幅为 1
- 标准化直方图(对照明和阴影具有鲁棒性)
HoG vs SIFT:
- 对于计算:
- HoG 特征以单一比例在密集网格中计算,而不进行主导方向对齐
- SIFT 特征在一组稀疏的比例不变关键点处计算,旋转以对齐其主导方向
- 对于用法:
- SIFT 功能针对稀疏宽基线匹配进行了优化
- HOG 功能用于空间形式的密集稳健编码
- 对于计算:
HoG Feature for Detection
提取 HoG 特征并训练线性分类器 (SVM)
使用具有不同尺度的滑动窗口运行分类器