计算机视觉导论
首先我们得对计算机视觉有一个基本的感受。
低层次:如何接收、处理信号
中层次:图像分类,3D 建模等
高层次:图像的理解、生成
Classic Vision
图像处理
An Image as a function f from to
gives the intensity at position
Defined over a rectangle,with a finite range:
实际处理中这个函数是离散(discrete)的,每个离散的位置叫一个 pixel(像素)。
一般来说 (RGB)这个数字叫 channel。
可以定义 表示 Image Gradient(图像梯度),通过计算梯度可以体现图像中变化剧烈的位置。
但实践中函数是离散的,常见的处理方式是 用 来估计。
Filters (滤波器)
对图片做某种变换得到新图片。本质上是 2D 的信号处理。
目标:提取图片某种关键信息,或者是去除不必要的信息(去噪)。
先看一下 1D 的滤波器 (1D Filter):
有一个 System ,原来的数据 (Original data) 通过系统 得到新的数据 ,可以看做 。
很多时候变换都是离散卷积(discrete convolution)的形式,即有 满足 。
类似于连续函数的傅里叶变换(Fourier Transform),我们也可以定义离散傅里叶变换(DFT)。
。
通过 DFT 可以考察卷积的性质,比如说:如果 主要集中在 附近,那么 就是低频滤波器(low-pass filter)。我们可以通过这种滤波器进行噪声抑制(denoise)。
当然除了卷积以外,还有做线性变换的滤波器(Linear Filters)。
接下来讨论 2D 的滤波器 (2D Filter) ,我们自然也有 2D 的离散卷积。
一种最简单的卷积核是对一个小矩阵取平均数(Moving Average) ,这样做的好处是可以去除一些噪点,缺点是边缘变得模糊。
一个非线性(Non-Linear)的滤波器例子:(Binarization via Thresholding) 设置一个阈值(threshold) ,然后设 。
边缘检测
首先定义 edge:沿着某个方向的像素有高对比度,且垂直方向的权重几乎无变化。
怎么评定检测的效果呢?
(精度)Precision:
(召回率)Recall:
精度高:希望检测到的边缘基本上确为边缘
召回率高:希望所有边缘基本上都被检测到了
对边缘定位的准确:希望和真实边缘的距离尽量小
最后还有去重问题
发现直接求梯度然后去取较大位置的方法不具有鲁棒性(robust):噪声有巨大的影响
考虑用一种经典的滤波器处理:Gaussian filter 。
1D 时我们设
2D 时我们设
效果一般来说是很好的。
去重需要一个经典算法:非极大值抑制Non-Maximal Suppression (NMS) 。
对网格上的每个点 ,计算梯度 ,然后考察 ,如果 的大小 ,那么就称 是一个极大值。
不一定刚好踩在格点上,需要通过所谓双线性插值(Bilinear Interpolation)来计算它们的 。其实就是取周围四个点做一个线性组合。
一个简单版本的判定方式:把梯度的方向分类成四个方向之一(东-西,南-北,西北-东南,东北-西南),然后取相邻的两个格子比较即可。
在做完 NMS 之后,还有进一步筛选的方法叫 滞后阈值(hysteresis thresholding),在通过 NMS 保留的格点中进一步筛选。我们设置两个阈值 ,所有梯度 的点一定保留,然后每次取一个保留点,判断垂直于其梯度方向的相邻两点是否能拓展,拓展的要求就是梯度 且在 NMS 中保留。
上面这一套方法被称为 Canny Edge Detector 。
