模板匹配
对象可以通过存储示例图像或“模板”来表示
模板匹配的假设
• 将模板放在给定图像的每个位置。
• 将模板中的像素值与图像底层区域中的像素值进行比较。
• 如果发现“良好”匹配,则宣布对象存在于图像中。
•可能的测量方法有:SSD、SAD、互相关、归一化互相关、最大差异等。
模板匹配的局限性
如果对象在图像上显示为缩放、旋转或倾斜,则匹配将不好。
解决方法
搜索模板和模板可能的变换(transformations)
效率不高!(但可行……)
使用特征空间
• 图像中对象的外观取决于以下几点:
–视角
–光照条件
–传感器
–对象本身(例如:人类面部表情)
• 原则上,可以通过增加模板数量来处理这些变化。
特征空间: 使用多个模板
• 模板数量可以快速增长!
• 我们需要:
•存储模板的有效方法
•搜索匹配的有效方法
• 观察:虽然每个模板不同,但模板之间存在许多相似之处。
有效的图像存储
考虑以下 3×1 的模板:
如果每个像素存储在一个字节中,我们需要18=3 x 6字节
仔细看,我们可以看到所有的图像都非常相似:它们都是相同的图像,按比例缩放:
它们只需要用9个字节存储(节省50%:存储一个图像(3字节)+ 乘法常数(6字节))
几何解释
将图像中的每个像素视为向量空间中的坐标。然后,可以将每个3x1模板视为三维空间中的一个点:
但在这个例子中,所有的点恰好属于一条直线:原始三维空间的一维子空间。
考虑一个新的坐标系,其中一个轴沿直线方向:
在这个坐标系中,每个图像只有一个非零坐标:我们只需要存储直线的方向(一个3字节的图像)和每个图像的非零坐标(6个字节)。
线性子空间
将 x 变换到 v1,v2坐标
v2坐标测量什么?
-
到直线的距离
-
用它来分类——距离橙黄点接近为 0
v1坐标测量什么?
-
沿着直线的位置
-
用它来指定是哪个橙色点
• 分类可能比较耗资源
– 必须搜索(例如近邻的)或存储大概率密度函数。
• 假设数据点按上述方式排列
– 想法——拟合一条直线,分类器测量到线的距离
降维
• 降维
– 我们只用它们的v1坐标表示橙色点
• 因为v2坐标基本上都是0
– 这使得存储和比较点数更加节省资源
– 但对于更高维度的问题来说是一个比较大的开销
线性子空间
考虑所有橙色点沿 v 方向的变化:
什么单位向量 v 使 var 最小化?
什么单位向量 v 最大化 var?
解:v1是A的最大特征值对应的特征向量;v2是A的最小特征值对应的特征向量
主成分分析法(PCA)
给定一组模板,我们如何知道它们是否可以像前面的示例中那样被压缩存储?
–答案是研究模板之间的互相关性
–执行此操作的工具称为PCA
PCA理论
设x1 x2…xn为一组 n 个 的向量,设 为它们的平均值:
注:每个 N x N 图像模板可以表示为 N2 x 1 向量,其元素是模板像素值。
PCA理论
设 X 为 的矩阵,列向量为
注:减去平均值等价于将坐标系平移到平均值的位置。
PCA理论
令 为一个 矩阵
注:
-
Q 是平方的
-
Q 是对称的
-
Q 是协方差矩阵[又称为散列矩阵]
-
Q 可以非常大(记住N2是模板中像素的数量)
PCA理论
理论:
每一个 xj 可以被写成:
其中 ei 是 Q 的非零特征值所对应的n个特征向量。
注:
-
特征向量 扩展为一个特征空间
-
e1到en为 的正交向量 ( N*N 图像)
-
标量gji是xj在特征空间中的坐标。
使用PCA压缩数据
• 用e1…en表示x不会改变数据的大小
• 但是,如果模板高度相关,x的许多坐标值将为零或接近零。
注:这意味着它们位于一个更低维度的线性子空间中
使用PCA压缩数据
根据特征值排列特征向量 ei
假设
可以得到
特征空间:有效的图像存储
使用 PCA 压缩数据
每一个图像被存储为一个 k 维向量
需要存储 k 维 N×N 个特征向量
特征空间:有效的图像比较
使用相同的过程将给定的图像压缩为一个 k 维向量。
比较压缩的向量:
k 维向量的点积
实现细节
需要找到Q的“第一个” k 维特征向量:
Q是N2 x N2,其中N2是每个图像中的像素数。对于256 x 256图像,N2=65536!!
找到 Q 的 ev
Q = XXT 是非常大的。所以,考虑矩阵 P = XTX
Q 和 P 都是对称阵,但 Q 不等于 PT
Q 是 N2 x N2,P 是 n×n
n 是训练图像的数量,一般 n<<N
设e是具有特征值lamda的P的特征向量:
Xe也是具有特征值lamda的Q的特征向量:
奇异值分解(SVD)
任何 m×n 的矩阵 X 可以被转换为三个矩阵的乘积:
其中:
-
U 是 m x m 矩阵,其列向量是正交向量
-
V 是 n x n 矩阵,其列向量是正交向量
-
D 是 m x n 对角矩阵,其对角线元素被称为X的奇异值(singular values),并且是这样的:
SVD性质
U 的列向量是矩阵 XXT 的特征向量
V 的列向量是矩阵 XTX 的特征向量
矩阵 D 的对角线元素的平方是矩阵 XXT 和矩阵 XTX 的特征值
算法 特征空间学习 EIGENSPACE_LEARN
假设:
-
每个图像只包含一个对象
-
对象由固定相机成像
-
图像被规范化为 N*N 的尺寸
——图像帧是包围对象的最小矩形 -
像素值的能量函数归一化为1
—— -
对象在所有图像中都是完全可见以及未被遮挡的。
算法 特征空间学习 EIGENSPACE_LEARN
获取数据:
对于要表示的每个对象o,o=1,…,O
- 将o放置在转台上,通过以360度/n的增量方式旋转转台来获取一组n个图像
- 对每一个图像p, p = 1, …, n:
- 把o从背景中分割出来
- 归一化图像尺寸和能量
- 将像素排列为
算法 特征空间学习 EIGENSPACE_LEARN
存储数据:
-
求平均图像向量
-
组合矩阵 X
-
找到 XXT 的第一个 k 维特征向量:e1, …, ek (使用XTX或者SVD)
-
对于每一个对象 o,每一个图像p:计算对应的 k 维点:
算法 特征空间学习 EIGENSPACE_LEARN
从DB中识别一个对象:
- 给定一个图像,从背景中分割出一个对象
- 归一化尺寸和能量,将其表示为向量 i
- 计算对应的 k 维点:
- 找到离 g 最近的 k 维点
特征空间表示法的关键性质
给定:
两个图像 用来创建特征空间
——是图像的特征空间投影
——是图像的特征空间投影
然后,
也就是说,特征空间中的距离近似等于两幅图像之间的互相关性
例子:Murase and Nayar, 1996
物体的数据库
无背景杂波或遮挡
Murase and Nayar, 1996
使用转台获取对象外观模型
外观流形
例子:特征脸
• 图像是高维空间中的一个点
– N x M图像是 R N M R^{NM} RNM中的一个点
– 我们可以在这个空间中定义向量,就像在二维空间的情况那样
降维
脸集是图像集的“子空间”
–假设它是K维的
–我们可以使用PCA找到最佳子空间
–这就像将“超平面”拟合到脸集
•通过向量 扩展
任何脸:
产生特征脸
-
拍摄了大量的人脸图像。
-
图像被标准化,以排列眼睛、嘴巴和其他特征。
-
然后提取人脸图像协方差矩阵的特征向量。
-
这些特征向量称为特征脸。
特征脸
特征脸看起来有点像一般的脸
面部识别的特征脸
•适当加权后,可将特征脸相加,以生成人脸的近似灰度渲染。
•几乎不需要特征向量项就能让大多数人的脸看起来很像。
•因此,特征脸提供了一种将数据压缩应用于面部识别目的的方法
特征脸
PCA提取 A 的特征向量
——给出一组向量 v1, v2, v3, …
——这些向量中的每一个都是脸空间中的一个方向
投影到特征脸上
特征脸 v1, …, vk扩展脸空间
—— 通过下面的操作,脸被转换到特征脸坐标系中
使用特征脸来识别
算法
-
处理图像数据库(一组有labels的图像)
——进行PCA—计算特征脸
——为每个图像计算 K 个系数 -
给定一个新的图像(为了被识别)x,计算 K 个系数
- 检测 x 是否是脸
- 如果是脸,是谁?
——在数据库中查找最近的打了label的脸
——K维空间中的最近邻