[TOC]
当出现边缘时候,Image Intensity Function(i.e. 信号值)会快速更改。
其在 Intensity 上的一阶导便会有起伏。
问题是我们怎么找到一阶导。
一阶核的目的是通过
我们可以把 Prewitt 核看作一个 Smooth + Grad 的操作。
Mathematics behind Prewitt Operator
考虑离散差分倒数: $$ f'(x)\approx \frac{f(x+h) - f(x-h)}{2h} $$ 上述为中心差分公式,即近似中心的导数,如果使用单侧差分,例如
$f(x)-(x-h)$ ,精度会变差。如令步长为
$h=1$ ,则有: $$ f'(x)\approx \frac{f(x+1) - f(x-1)}{2} $$ 即 $$ f'(x)\approx \frac{f(x+1) +0f(x) - f(x-1)}{2} $$ 用向量表示则为: $$ f'(x) = \frac{1}{2}\begin{bmatrix} 1\0\-1\end{bmatrix}^T\begin{bmatrix} f(x+1)\f(x)\f(x-1)\end{bmatrix} $$
Sobel 相比于 Prewitt 加强了中心线的权重。
如考虑
Consider as Gradient Vector
如果将图片梯度看作向量,则有: $$ \nabla f = \begin{bmatrix} \frac{\part f}{\part x} \ \frac{\part f}{\part y} \end{bmatrix} = \begin{bmatrix} g_x\g_y \end{bmatrix} $$ 则有其 Norm/Module 为 $$ || \nabla f|| = \sqrt{g_x^2 + g_y^2} $$ 即 Magnitude
考虑
$$ \tan \theta = 对边/ 邻边 $$
Edge Gradient 垂直于(perpendicular to)Edge Direction。
Canny 定义了如下 criteria:
- Good Detection 应当具有较低的概率会遗漏真实边缘点 同时也应具有较低的概率错误地将非边缘点标记为边缘。
- Good Localization 算子标记的边缘点应当尽可能接近真实边缘的中心。
- Single Response 对单个边缘只产生一个响应。
在最早我们使用如下流程去做边缘检测,其中 EstGrad 是应用之前定义的核。
flowchart LR
DeN[Denoise<br>去噪]
EstGrad[Estimate Gradient<br>估计梯度]
GlbThr[Global Threshold<br>全局阈值/二值化]
DeN ---> EstGrad ---> GlbThr
Canny 提供了一个新的边缘检测算法:
flowchart LR
DeN[Gaussian Filter<br>Suppress Noise<br>Gaussian 核去噪]
EstGrad[Gradient Magnitude & <br> Direction<br>梯度幅度和方向]
NMS[NMS for Single Response<br>应用 NMS 获得每个<br>边缘的单一响应]
GlbThr[Hysteresis Thresholding<br>滞后阈值法查找潜在边缘]
DeN ---> EstGrad ---> NMS ---> GlbThr
用状态描述则为:
flowchart LR
img[Image]
simg[Smoothed Image<br>Gradient Magnitude, Direction]
sres[Single Response]
ed[Edges]
img --Gaussian<br/>Kernel--> simg
simg --NMS--> sres
sres --Hysteresis<br/>Thresholding--> ed
高斯核被用于平滑图像和压制噪声。在高斯平滑后求其梯度。梯度可以可以用 Sobel 求得。
考虑卷积核性质: $$ \frac{d}{dx} (f * g) = \frac{df}{dx} * g = f * \frac{dg}{dx} $$ 可以考虑将平滑和求梯度核心先计算获得更好的计算性能。
对于 2 个可以 decompose 的核心
对于 Strong Edge,其 Magnitude 可能会有很多都很强(如图),从而导致在直接 Thresholding 中获得较粗的 Edge。 而我们只需要获取最强的 response 就行。
而对于屋顶状边缘(Near Roof Edge),我们会发现会得到反方向 Response。而这些 Response 是属于一个边缘的。
图像 | NMS |
如图中的 Kernel。如果我们考虑正在分析 Horizontal 方向的 Gradient。
考虑我们只需要保留一个最大梯度 response 的。因此考虑只在如下情况保留:
$$
|g_5| > |g_4| \text{ and } |g_5| > |g_6|
$$
如果不满足对应情况,则
即对于 Horizontal,中心点
考虑上述情况发生在特定方向,而梯度可能有不同方向
我们可以将 Gradient Direction round 到 8 个角:$0\degree, 45\degree, 90\degree, 135\degree, 180 \degree, 225 \degree, 270\degree, 315 \degree$。 即 4 个轴:Hotizontal, Vertical, Diagonal & Anti-Diagonal。 $$ \begin{matrix} \text{Hotizontal}: g_\leftarrow, g_\rightarrow & \text{Diagonal}: g_\nwarrow, g_\searrow \ \text{Vertical}: g_\uparrow, g_\downarrow & \text{Anti-Diagonal}: g_\nearrow, g_\swarrow \end{matrix} $$ 而 Suppression 的陈述被描述为选取局部最大值(Local Maxima) $$ M(x, y) = \left. \begin{cases} M(x, y) & \text{local maxima}\ 0 & \text{otherwise} \end{cases} \right. $$
左图为使用 Sobel 算子直接算。右图为通过 Sobel 算子 + NMS。
考虑直接进行
考虑低 Magnitude 可能因为:
- 不是边缘:只是扰动(fluctuation)
- 是边缘:但是因为视角或光线原因 less visible。
考虑标准 Thresholding 类似于一刀切,即
$$
g(x, y) = \begin{cases}
1 & \text{if } f(x, y) \geq t \
0 & \text{otherwise}
\end{cases}
$$
而我们需要过滤第一种。因此我们设立两种 Threshold 指标
- 如果
$\text{Magnitide}> t_\text{high}$ ,则该像素被接受为边缘。 - 如果
$\text{Magnitide}<t_\text{low}$ ,则该像素被拒绝。 - 如果
$\text{Magnitide}\in[t_\text{low}, t_\text{high}]$ ,则该像素可能是边缘。 这时需要考虑其相邻像素,如果它与一个 Edge Pixel 相连,则被接受为边缘。
可以用二阶导过零点(Zero-crossing)定位边缘.
拉普拉斯核是由 横向的二阶导 + 纵向的二阶导得来 $$ \begin{bmatrix} 0 & 1 & 0\ 0 & -2 & 0\ 0 & 1 & 0 \end{bmatrix} + \begin{bmatrix} 0 & 0 & 0\ 1 & -2 & 1\ 0 & 0 & 0 \end{bmatrix}
\begin{bmatrix} 0 & 1 & 0\ 1 & -4 & 1\ 0 & 1 & 0 \end{bmatrix} $$ 另一种拉普拉斯核为 $$ \begin{bmatrix} 1 & 1 & 1\ 1 & -8 & 1\ 1 & 1 & 1 \end{bmatrix} $$ 其考虑更多邻居。
Mathematics behind Laplacian Kernal
拉普拉斯算子的定义为: $$ \Delta f = \nabla^2f = \nabla\cdot \nabla f $$ 即二阶导。其再笛卡尔坐标系
$x_i$ 被定义为: $$ \Delta f =\sum^n_{i=1}\frac{\part^2 f}{\part x_i^2} $$ 即在二维情况下定义为 $$ \Delta f = \frac{\part^2f}{\part x^2} + \frac{\part^2 f}{\part y^2} $$ 考虑图像是离散,因此需考虑其差分式:一阶导的离散近似(Forward Difference): $$ f'(x)\approx \frac{f(x+h) - f(x)}{h} $$ 其中
$h$ 为步长二阶导为一阶导的导数,则有: $$ \begin{align} f''(x)&=\frac{f'(x+b) - f'(x)}{h}\ &= \frac{\frac{f(x+2h)-f(x+h)}{h} - \frac{f(x+h)-f(x)}{h}}{h}\ &= \frac{f(x+2h)-f(x+h) - f(x+h)+f(x)}{h^2}\ &= \frac{f(x+2h)-2f(x+h)+f(x)}{h^2}\ \end{align} $$ 令
$h=1$ ,则有: $$ \begin{align} f''(x) &= f(x) - 2f(x+1) + f(x+2)\ &= \begin{bmatrix}1 \ -2 \1 \end{bmatrix} ^T \begin{bmatrix}f(x) \ f(x+1) \f(x+2)\end{bmatrix}\end{align} $$
考虑拉普拉斯对噪音非常敏感,因此使用高斯核先进行 smoothing,在使用 Laplacian 作为 criterion。
-
$n\times n$ 的高斯 Lowpass 核 进行 smoothing - 计算图片的 Laplacian
- 寻找 Zero crossing
- (extra) Thresholding (
$V > T$ )
对于高斯核,其参数
flowchart LR
img[Image]
simg[Smoothed<br>Image]
lap[Laplacian]
img --"*"--> simg
simg --"*"--> lap
考虑上述 MH 的流程,考虑卷积的 Associative,即:
$$
f * G * L = f * (G * L)
$$
其中
Mathematics behind LoG $$ \begin{align} G(x, y) &= e ^{-\frac{x^2+y^2}{2\sigma^2}} \ \nabla^2 G(x, y)&= \frac{\part^2 G(x, y)}{\part x^2} + \frac{\part^2 G(x, y)}{\part y^2} \ &= \frac{\part}{\part x} \left(\frac{-x}{\sigma^2}e^{-\frac{x^2+y^2}{2\sigma^2}} \right)+ \frac{\part}{\part y} \left(\frac{-y}{\sigma^2}e^{-\frac{x^2+y^2}{2\sigma^2}} \right) \ &= \left(\frac{x^2}{\sigma^4} - \frac{1}{\sigma^2} \right)e^{-\frac{x^2+y^2}{2\sigma^2}} + \left(\frac{y^2}{\sigma^4} - \frac{1}{\sigma^2} \right)e^{-\frac{x^2+y^2}{2\sigma^2}} \ &= \left(\frac{x^2 + y^2 - 2\sigma^2}{\sigma^4} \right)e^{-\frac{x^2+y^2}{2\sigma^2}} \end{align} $$
LoG 不是一个 Decomposable 的核,其 Computation Cost 会很高。
我们可以用两个高斯核去近似一个 LoG: $$ D_G(x, y) = \frac{1}{2\pi\sigma_1^2}e ^{-\frac{x^2+y^2}{2\sigma_1^2}}
- \frac{1}{2\pi\sigma_2^2}e ^{-\frac{x^2+y^2}{2\sigma_2^2}} \\ \approx \\ \nabla^2G(x, y) = \left(\frac{x^2 + y^2 - 2\sigma^2}{\sigma^4} \right)e^{-\frac{x^2+y^2}{2\sigma^2}} \ \text{where } \sigma^2 = \frac{\sigma^2_1\sigma^2_2}{\sigma^2_1 - \sigma_2^2}\ln \frac{\sigma^2_1}{\sigma^2_2} $$
上图展示了近似效果。橙线为 LoG,蓝线为 DoG。形状相似,但是尺度不一致。可以 Scale 或者 标准化 一下。
而使用 DoG 可以将两个 Gaussian Kernel 进行 decomposition。
边缘检测告诉我们对于边缘 Pixel-based 的表示。其不是对于物体 Boundary 的 Geometrical Representation。(即,没有连成图形)
最简单有效的方法是使用 Heuristic Search(启发性搜索)。算法从一个边缘像素开始,尝试添加其周围像素(基于周围像素的边缘强度和方向)
$$
\begin{align}
| M(x_i, y_j) - M(x_j, y_j) | &\leq \theta_M\
|\phi(x_i, y_j) -\phi(x_j, y_j)\mid &\leq \theta_\phi
\end{align}
$$
链接的两个 Edge 必须有相近的角度