首先我们得对计算机视觉有一个基本的感受。

低层次:如何接收、处理信号

中层次:图像分类,3D 建模等

高层次:图像的理解、生成

Classic Vision

图像处理基础

An Image as a function f from R2R^2 to RMR^M

f(x,y)f(x,y) gives the intensity at position (x,y)(x,y)

Defined over a rectangle,with a finite range: f:[a,b]×[c,d][0,255]Mf:[a,b]\times [c,d]\to [0,255]^M

实际处理中这个函数是离散(discrete)的,每个离散的位置叫一个 pixel(像素)。

一般来说 M=3M=3 (RGB)这个数字叫 channel。

可以定义 [fx,fy][\frac{\partial f}{\partial x},\frac{\partial f}{\partial y}] 表示 Image Gradient(图像梯度),通过计算梯度可以体现图像中变化剧烈的位置。

但实践中函数是离散的,常见的处理方式是 fxx=x0\frac{\partial f}{\partial x}|_{x=x_0}f(x0+1,y0)f(x01,y0)2\frac{f(x_0+1,y_0)-f(x_0-1,y_0)}{2} 来估计。

Filters (滤波器)

对图片做某种变换得到新图片。本质上是 2D 的信号处理。

目标:提取图片某种关键信息,或者是去除不必要的信息(去噪)。

先看一下 1D 的滤波器 (1D Filter):

有一个 System GG ,原来的数据 (Original data) ff 通过系统 GG 得到新的数据 hh ,可以看做 h=G(f)h=G(f)

很多时候变换都是离散卷积(discrete convolution)的形式,即有 g[n]g[n] 满足 h[n]=(gf)[n]=m=+f[m]g[nm]h[n]=(g*f)[n]=\sum\limits_{m=-\infty}^{+\infty}f[m]g[n-m]

类似于连续函数的傅里叶变换(Fourier Transform),我们也可以定义离散傅里叶变换(DFT)。

F(f)[n]=m=0M1f[m]exp(2πimnM)F(f)[n]=\sum\limits_{m=0}^{M-1}f[m]\exp(-2\pi i\cdot \frac{mn}{M})

通过 DFT 可以考察卷积的性质,比如说:如果 F(g)[m]F(g)[m] 主要集中在 00 附近,那么 gg 就是低频滤波器(low-pass filter)。我们可以通过这种滤波器进行噪声抑制(denoise)。

当然除了卷积以外,还有做线性变换的滤波器(Linear Filters)。

接下来讨论 2D 的滤波器 (2D Filter) ,我们自然也有 2D 的离散卷积。

(fg)[m,n]=k,lf[k,l]g[mk,nl](f*g)[m,n]=\sum\limits_{k,l}f[k,l]g[m-k,n-l]

一种最简单的卷积核是对一个小矩阵取平均数(Moving Average) ,这样做的好处是可以去除一些噪点,缺点是边缘变得模糊。

一个非线性(Non-Linear)的滤波器例子:(Binarization via Thresholding) 设置一个阈值(threshold)τ\tau ,然后设 h[m,n]=[f[n,m]>τ]h[m,n]=[f[n,m]>\tau]

边缘检测

首先定义 edge:沿着某个方向的像素有高对比度,且垂直方向的权重几乎无变化。

怎么评定检测的效果呢?

(精度)PrecisionTPTP+FP\frac{TP}{TP+FP}

(召回率)RecallTPTP+FN\frac{TP}{TP+FN}

精度高:希望检测到的边缘基本上确为边缘

召回率高:希望所有边缘基本上都被检测到了

对边缘定位的准确:希望和真实边缘的距离尽量小

最后还有去重问题

发现直接求梯度然后去取较大位置的方法不具有鲁棒性(robust):噪声有巨大的影响

alt text

考虑用一种经典的滤波器处理:Gaussian filter ,即设 g(x)=12πσ2exp(x22σ)g(x)=\frac{1}{\sqrt{2\pi \sigma^2}}exp(-\frac{x^2}{2\sigma})