最近看了两篇关于CLBP和ELBP的文章。现在对文中提到的LBP相关知识做一个小小的总结
其中是中心像素的灰度值,是其邻域像素的灰度值。通过比较中心像素周围邻域像素与中心像素的大小,大于中心像素为1,小于中心 像素为0,最后按一定顺序进行二进制编码。对于没有完全落在像素中心的邻域点,可以通过线性插值的方法来估算其灰度值。最后通过遍历所有LBP像素值,建立直方图来表示该图的纹理特征。假设图片尺寸是i*j,则直方图表达为:
由上文可知,传统LBP会有种编码模式,这会生成一个非常冗长的直方图,由于巨大维数,H值的估计也十分棘手,并且LBP对噪声十分敏感,围绕中心像素轻微的上下波动,可能导致编码结果大相径庭。因此,Ojala等人提出了统一编码模式:
U表示二进制编码0/1跳变的次数。一般情况下,U<=2,称之为统一模式,以p=8为例,编码数量从原先的=256个变为8*7+3=59个,其中58个为统一模式,如下图所示。这样既降低了维度,又减少了高频噪声的影响。考虑旋转不变性,开始7行每一行为一种,再加上全1、全0和其他,共p+2种。
由于LBP过分简化了局部结构丢失了纹理信息,Ojala等人通过对每个局部模式进行对比,提出了一个局部互补的描述子,称为,并使用2维直方图并联和,这里记为LBP/VAR
与传统LBP不同,CLBP具有3个描述子。分别是CLBP-C、CLBP-S、CLBP-M。
如图,规定
上述公式中并不能直接作为描述子,因为其对于光照,旋转,噪声等都很敏感。作者把邻域像素和中心像素的差值分成符号分量和梯度分量,且由二者相乘得到,分别记做CLBP_S和CLBP_M。如图,(a)为3x3的采样块,其差值可由(b)表示,并且可以分解成(c)*(d),(c)为符号分量,(d)为梯度分量。本文中的符号分量CLBP_S实际上就是传统LBP,两者编码方式也是相同的(这里的-1相当于传统LBP中的0)。作者分析并验证了,符号分量所包含的纹理特征远高于梯度分量。
由上图可发现CLBP_M是连续的值,为了与CLBP_S统一编码,需要将其也转换成二进制编码。受CLBP_S启发,作者提出以下编码方式对其进行编码,其中c是自适应阈值,这里c的值取整幅图相中的均值。但文中作者并未给出的计算过程。个人推测是邻域像素与中心像素梯度差的绝对值累加(或者求平均,最后比较的结果都一样)。
中心像素代表局部灰度级,也包含了局部灰度判别信息,为了让其有效和LBP_M和LBP_S结合,我们进行如下编码:
这里表示中心像素灰度值,表示整幅图像灰度的平均值。即通过比较中心像素与全图平均像素值的大小来进行二进制编码。
CLBP算法流程如图所示。至此三个描述子CLBP_SCLBP_M,CLBP_C全部产生,可通过串联、并联或串并联其直方图的形式将其进行融合。
最后,运用到纹理识别分类中,用卡方距离来测量两个直方图的不相似度:
X是直方图bin的总数,和别分表示样本和模板在第x个bin上的值。
本文中作者针对局部区域块提出了两种互补的特征类型,像素强度和像素差异。像素强度又分为邻域像素强度和中心像素强度,像素差异分为径向差异和角度差异。下面将逐一介绍:
(应该是1/p,原文中作者写错了)可以发现NI-LBP其实就是邻域像素与其均值的比较并进行二进制编码,说白了和传统LBP的差异就在于阈值u的选择不同。
和LBP_C一样,是整幅图的均值。
其中,表示的是径向距离相差的和两点的像素灰度值的差。
与RD-LBP类似,其中,表示的是半径为r且角度相差的两个像素灰度值的差。作者通过实验发现,在统一LBP模式下,AD-LBP所提供的纹理信息较少,为了降低维度提高运算速率,后面的实验中,AD-LBP不作为重点。最后,使用串并联的方式将直方图融合。下图是ELBP算法的示意图
通过改变(p,r)的值实现多分辨率,下图清晰的表达了实现过程。
参考文献:
A Completed Modeling of Local Binary Pattern Operator for Texture Classification
Extended local binary patterns for texture classification