[CS131] Lecture 5 Edge detection

根据 Stanford CS131 课程写的笔记(大部分为 note 翻译),英语水平一般,如有错误请评论指正

Lecture 5 Edge Detection

Edge Detection in Mammals

Hubel & Wiesel

两个人的实验表明,猫的视觉神经在碰到特定方向的边缘时,会产生反应。

Biederman

Biederman 的实验表明,人们在只看到物品一半的轮廓时,仍能识别物体且速度不受影响。这给计算机视觉提供了一个想法:即使只展现图像的一部分,一个系统理论上应该能够识别整个物品。

Walther, Chai, Caddigan, Beck & Fei-Fei

一群研究者发现大脑的低层次在识别轮廓方面更强,而高层次对颜色识别能力更强。

Edge Detection for Computer Vision

边缘检测的目的是检测图像中的不连续部分。直观来讲,图像的大部分语义学和形状信息可以在图像边缘被编码。边缘可以帮助我们提取信息、识别物体、恢复几何和视角。

Types of Discrete Derivative(离散导数) in 1D

主要有三类,它们的公式和对应的滤波器为:

  • Backward

    d f d x = f ( x ) f ( x 1 ) = f ( x ) [ 0 , 1 , 1 ]

  • Forward

    d f d x = f ( x ) f ( x + 1 ) = f ( x ) [ 1 , 1 , 0 ]

  • Central

    d f d x = f ( x + 1 ) f ( x 1 ) = f ( x ) [ 1 , 0 , 1 ]

Discrete Derivative in 2D

  • Gradient vector

    f ( x , y ) = [ f x f y ]

  • Gradient magnitude

    | f ( x , y ) | = f x 2 + f y 2

  • Gradient direction

    θ = t a n 1 ( d f d y d f d x )

Example

矩阵的梯度可以近似为用基于中心离散倒数方程的相邻像素拓展到 2D。一个水平滤波器如下:

1 3 [ 1 0 1 1 0 1 1 0 1 ]

当这个滤波器覆盖在像素 x [ m , n ] 上,可以产生一个输出。这个输出近似于于像素 ( m , n ) 在水平方向上的梯度,这个滤波器检测水平边缘,同样需要一个单独的内核检测垂直边缘。

Simple Edge Detectors

Characterizing Edges

描述边缘是检测边缘的第一步,是为了边缘可以被识别。首先,定义边缘为图片的强度函数快速变化的位置,也是导数较大的位置。

Image Gradient

图片的梯度可以被定义为

f ( x , y ) = [ f x , f y ]

同时,方向与边缘强度可以被定义为
θ = t a n 1 ( f y / f x ) | | f ( x , y ) | | = ( f y ) 2 + ( f y ) 2

梯度向量的方向指向强度变化最快的方向,如上图所示。下图为将梯度应用于图像后的结果。

Effects of Noise

如果边缘噪音过多,偏导数可能无法很好的检测边缘,如下图。

为了减少噪音影响,图片首先要光滑化。光滑化是重新计算像素值,使得该像素值和周围像素更相似的过程。光滑化是通过将滤波器和图像卷积来实现的(例如:高斯核)。

当然,光滑化也有损失:模糊了边缘;较大的滤波器会导致边缘损失和图片有用的细节损失。

总而言之,合适的光滑化可以促进边缘检测。在光滑化 f 后,就可以计算 f d d x g ,顶峰处为边缘。

Gaussian Blur

高斯模糊是用高斯函数减少图片噪音的结果。它是一个低通滤波器,用于降低高频率信号。

一维

G ( x ) = 1 2 π σ e x 2 2 σ 2

二维
G ( x , y ) = 1 2 π σ e x 2 + y 2 2 σ 2

Designing a Good Edge Detector

一个可行的边缘检测器必须有以下性质:

  1. 检测效果好

    必须最小化检测为误报(false positives, 由噪音导致的假性边缘)和漏报率(false negatives,漏掉真的边缘)的可能性。

  2. 定位好

    检测的边缘位置必须与原图实际边缘吻合。检测器还必须在检测哪些像素位于边缘上保持一致。

  3. Silent response

    检测器必须最小化真正边缘附近的局部极大值,即每个真正的边缘点只返回一个点。它应该要告知这里有一个特定的边缘,而不是将一个边缘分散为数个边缘。换句话说,只有真正的边缘会被捕捉到。

    下图是正确的边缘;1 稳健性差;2 定位差;3 过多响应

猜你喜欢

转载自blog.csdn.net/bear507/article/details/82316142