Recognition System复习笔记:LBP

小辣鸡笔者今天突然想起LBP没有看,本来想着上午看一下、下午写作业,嘻嘻,发现PCA忘了,然后开始看PCA,嘻嘻,线性代数忘了,然后看线性代数,然后等下我要去吃晚饭了。所以这三个我是在一天看的,明白个大概,具体内容并不懂。说的不对望指正!


LBP全称是Local Binary Pattern,局部二值模式?应该可以这么翻译吧,局部指的是从每个像素的neighbor处提取特征,怎么提取,转化为二值来提取,模式?突然感觉自己翻译的不大对,pattern也有图样的意思,每个像素周围都二值化成不同的pattern。下图就是个 pattern,黑的是0,白的是1,灰的就是中心像素啦。
在这里插入图片描述

LBP按我的理解应该是一种提取特征的方式,比如不同texture的东西他就能分辨出来,可以用于做图像的segmentation;另外LBP有个重大好处就是它对光强和旋转都有很好的鲁棒性(但是有阴影的话会不会影响我就不知道了)。还有,它计算量不大,搞好了好像可以做实时的应用。

LBP有很多用法,这里我只说一下 L B P P , R r i u 2 LBP_{P,R}^{r_iu_2} LBPP,Rriu2吧,别的我也整不明白。

在心中有个印象的话,记 L B P P , R r i u 2 LBP_{P,R}^{r_iu_2} LBPP,Rriu2这个符号最好了,叫uniform pattern。就看上面那个图好了,局部嘛,中间灰色的是一个像素,P代表在它周围平均取多少个点,这就组成个圈了,所以R代表这个圈的半径, r i r_i ri代表旋转,意思是这样的两个圈,只要转一圈能够得到一样的pattern他们的取值就一样。 u 2 u_2 u2就是指bitwise transition等于2,别慌!就是你转着圈的数,0突然条成1了,那就是一个bitwise transition,如果1跳成0了,也是!好的2是什么,2就是,只关注只有bitwise transition(诶呀好累,叫bt好了)两次(或小于)的pattern,下面就是全部了,这样有什么好处呢,可以看到2和1可以表示线的一端,3是个角,4是条线的edge,等等等等。
在这里插入图片描述
那么,好端端的图像怎么就转化成这个圈圈了呢,这里是将中心pixel设为一个threshold,周围一圈的pixel强度大于等于中心的就取1,小于的就取零,但实际上它取的是个圆,取不到的地方用插值来做,双线性插值!看到这里小辣鸡笔者又懵逼了,学过的肯定是就着粥一起喝掉的。
在这里插入图片描述
这个图是我在笔记本上随便画的,就比如你想求这个中间点像素的像素值,它虽然不在像素点上,但是它周围有四个点呀!双线性插值就是你用四个周围点计算中间点就好了,离得越近的对它影响越大,这样图片视觉效果变化的也自然,就比如P1对中心点的影响比重就是图中的k,当然实现上肯定要用两步,先算上下后算左右,这个很简单只是容易忘!

在这里插入图片描述

取到周围一圈的值之后,周围bt小于等于2的pixel的 L B P P , R r i u 2 LBP_{P,R}^{r_iu_2} LBPP,Rriu2取值为它的neighbor所有1的数量,如果bt大于2的话,就通通算作P+1,这里的P就是上面把一圈分成P份的P。
应用上,把一个图片分成若干份,或者只提取其中的某些部分,在这些部分内部计算像素的LBP并进行直方图统计(记得normalization鸭!)然后将这些不同部分的histogram拼在一起,放到PCA或者各种分类器里分类就好了!嘻嘻,PCA是啥来着,我忘了。

PCA,principal component analysis,主成分分析,发明的本意是为了dimension reduction,结果分起类来效果拔群!多一句嘴,它跟FLD有啥区别呢,就二维来说,FLD是找一条线让这些sample尽量扎堆落,而PCA是穿糖葫芦,找一条线尽量穿过所有sample。
PCA通过找到能够代表sample们的主要维度,用vector表示,这样就构建了一个新坐标系,然后将这些sample投射到这个新坐标系中,由于舍弃了一些起作用很小的坐标,维度变小,计算量变小。并且!为达到PCA的目的,必须尽量增加sample与sample之间的距离,这样反而起到了分类的作用。
那么这条线怎么找呢(高维度的话的话就不是一条线啦!),一句话来说就是使协方差尽量大。
首先,把图像的所有像素列成一个vector,如果400400的图像就是160000个像素(也就是160000个维度,如果直接进行匹配的话,这个计算量很吓人的!),计算出像素们的平均值 x ˉ \bar x xˉ,当然也是160000*1维的vector,这个数好难打,那就变成mm吧,那么协方差矩阵就是 S ( m , m ) = [ x ⃗ 1 − x ˉ   . . .   x ⃗ m 2 − x ˉ ] ∗ [ ( x ⃗ 1 − x ˉ ) T   . . .   ( x ⃗ m 2 − x ˉ ) T ] T S_(m,m)=[\vec x_1-\bar x\ ...\ \vec x_{m^2}-\bar x]*[(\vec x_1-\bar x)^T\ ...\ (\vec x_{m^2}-\bar x)^T]^T S(m,m)=[x 1xˉ ... x m2xˉ][(x 1xˉ)T ... (x m2xˉ)T]T,这个公式我没打好,基本意思就是协方差矩阵嘛,然后求出这个矩阵的特征值和特征向量。

这里小辣鸡笔者不明白的是凭什么求出来的特征值就能作为新的坐标系来用,就仔细的看了一下,现在大约是这么理解的。我们来看 A x ⃗ = λ x ⃗ A\vec x=\lambda\vec x Ax =λx 这个式子,A是要转化的矩阵,这个式子就是想找到一个特征向量 x ⃗ \vec x x 使A在x这个方向上的映射仅与一个常量 λ \lambda λ有关,我们来想一下我们平时用的笛卡尔坐标系是不是也是这样,我的A=(1,2),变长一倍就是(2,4),投射到xy轴上完全就是坐标增加了一倍,并且值越大说明A在这个方向上的取值越大,越能决定这个vector的性质(所以PCA取更大的 λ \lambda λ),加之特征向量互相都是orthogonal的,所以,不得不承认人类的智慧是无穷的。

这样算出来,你得到的特征向量还是m*m维的,但是你可以只取重要的特征向量,(大约100个向量大约表示1万个特征都可以呢!)这样,第j张图片的坐标就变成 [ e 1 T   . . .   e t T ] T ∗ ( x ⃗ j − x ˉ ) [e_1^T\ ...\ e_t^T]^T*(\vec x_j-\bar x) [e1T ... etT]T(x jxˉ)了,t就是你提取出的向量个数。

最后,可以用LBP提取出得特征来用PCA进行分类。

参考
https://blog.csdn.net/hongbin_xu/article/details/80490109
https://blog.csdn.net/baimafujinji/article/details/79376378
https://blog.csdn.net/wz125/article/details/53650213
http://www.scholarpedia.org/article/Local_Binary_Patterns
http://www.scholarpedia.org/article/Local_Binary_Patterns
https://en.wikipedia.org/wiki/Eigenface

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值