Histogram intersection(直方图交叉核)
看关于LBP人脸识别的论文时提到了Histogram intersection这个方法,方法最初来自The Pyramid Match Kernel:Discriminative Classification with Sets of Image Features这篇论文,用来对特征构成的直方图进行相似度匹配,下面介绍下原理。
假设图像或其他数据的特征可以构成直方图,根据直方图间距的不同可以得到多种类型的直方图:
论文里是这么设置的,假设H0(x)里每个直方图宽度为a,那么H1(x)为2a,以此类推。举个例子,假设有某计算机学院男生身高范围在160cm-200cm,H0(x)宽度可以设置为2cm,那H0(x)里会有20个直方图;类推H1(x)宽度则为4cm,H1(x)会有10个直方图。
两个数据集的相似度可以用下式来匹配:
y和z分别代表不同的数据集,比如给了两个学院男生身高,想看下这两个学院是不是同一个学院(例子不恰当,凑合着用吧^_^),用上式他们的相似度就好了。其中w代表权重,论文里将wi设置为1/(2^i),N代表每两层之间的新匹配的数目,可以通过下式计算:
上式里面的L可以通过下式计算:
附图解释什么意思。
(a)里的y和z代表两种数据分布,三幅图代表三层金字塔,每一层里有间距相等的虚线,意思和我之前说的2cm,4cm的宽度一样。可以看到红点蓝点的位置是固定的,但是根据直方图宽度的不同可以划到不同的直方图里,如(b)所示。(c)图就是L的计算结果,是通过(b)里两种直方图取交集得来的,不过直方图的高度忽略不计,只计算交集后的数目,(c)图每个图的下方都给出了交集数目,比如x0=2,x1=4,x2=3。
L得到了,就算N就是通过,也就是通过Ni=Li-Li-1得到(看公式是能取负数的,比如上图里的N0=2,N1=2,N2=-1)。
由于wi之前设置为1/(2^i)了,所以
算法就是这样了,但是感觉不适合Extended LBP,因为等价模式取值不多,经不起这么多的直方图宽度变化,倒是比较适合原生的LBP方法。
卡方检验
方检验是一种检验两个变量独立性的方法。本文将介绍其理论并给出其应用在LBP特征匹配中的例子。
卡方检验最基本的思想就是通过观察实际值与理论值的偏差来确定理论的正确与否。具体做的时候常常先假设两个变量确实是独立的(行话就叫做“原假设”),然后观察实际值(也可以叫做观察值)与理论值(这个理论值是指“如果两者确实独立”的情况下应该有的值)的偏差程度,如果偏差足够小,我们就认为误差是很自然的样本误差,是测量手段不够精确导致或者偶然发生的,两者确确实实是独立的,此时就接受原假设;如果偏差大到一定程度,使得这样的误差不太可能是偶然产生或者测量不精确所致,我们就认为两者实际上是相关的,即否定原假设,而接受备择假设。
那么用什么来衡量偏差程度呢?假设理论值为E(这也是数学期望的符号哦),实际值为x,如果仅仅使用所有样本的观察值与理论值的差值x-E之和:
来衡量,单个的观察值还好说,当有多个观察值x1,x2,x3的时候,很可能x1-E,x2-E,x3-E的值有正有负,因而互相抵消,使得最终的结果看上好像偏差为0,但实际上每个都有偏差,而且都还不小!此时很直接的想法便是使用方差代替均值,这样就解决了正负抵消的问题,即使用
这时又引来了新的问题,对于500的均值来说,相差5其实是很小的(相差1%),而对20的均值来说,5相当于25%的差异,这是使用方差也无法体现的。因此应该考虑改进上面的式子,让均值的大小不影响我们对差异程度的判断,式(1):
上面这个式子已经相当好了。实际上这个式子就是开方检验使用的差值衡量公式。当提供了数个样本的观察值x1,x2,……xi ,……xn之后,代入到式(1)中就可以求得开方值,用这个值与事先设定的阈值比较,如果大于阈值(即偏差很大),就认为原假设不成立,反之则认为原假设成立。
那如果将卡方检验用在图像特征匹配上,可以将已有图像的每个特征作为均值(或者多个图像的特征取平均值作为均值)E,而待匹配图像特征作为变量xi,按照式子(1)进行独立性检验,如果检验结果小于阈值,则可认为待匹配图像和原图像是相同的。
举个例子,在LBP人脸识别中,每个图像可以被分割成大小相同的N块区域,在这些小区域中利用LBP提取直方图特征,这样每个图像就得到了很多直方图信息,设待匹配图像的直方图为Si,j,已知图像的直方图为Mi,j,其中i=1,2,...,N为图像的某块小区域,j为小区域内直方图的某一列的值,则两幅图像的相似性为:
其中wj是每块小区域的权重,比如在人脸区域中,眼睛嘴巴等区域包含的信息量更为丰富,那么这些区域的权重就可以设置的大一些。上式中的分母部分为Si,j+Mi,j,可能是考虑到相同人脸在不同照片中的差异性。
以上理论部分参考自:http://www.blogjava.net/zhenandaci/archive/2008/08/31/225966.html