前言
L B P LBP LBP(Local Binary Patterns)算法是一种描述图像像素点与邻域各个像素点之间的灰度关系的局部关系的非参数算法,同时也是一种高效的纹理描述算法,纹理是物体表面的自然特性,它描述图像像素点与图像领域之间的灰度空间的分布关系[6], L B P LBP LBP 最重要的特性是其对单调光照变化的容忍度及其计算简单性[4]。 L B P LBP LBP 最初被提出用于纹理分析 [3],并已被证明是一种描述局部结构的简单而强大的方法。
基本的LBP算子
原始LBP 算子
最原始的
L
B
P
LBP
LBP 算子具有灰度不变性,它在[3]中首次提出。它定义为在3x3的窗口内,以窗口中心像素为阈值,用一串二进制数表示中心像素,这些二进制数称为
L
B
P
LBP
LBP 或
L
B
P
LBP
LBP 码,这些二进制数用于编码每个像素周围的局部结构。 如图 1 所示:将中心像素(图1中的红色像素)与 3 × 3 邻域中的八个相邻像素进行比较;小于中心像素值的位置用 0 表示,大于中心像素值的位置用 1 表示(这个操作并不改变邻域的像素值,只是为了得到二进制
L
B
P
LBP
LBP 码)。对于每个中心像素,通过以顺时针方向从其左上角开始连接所有这些二进制值来获得一个二进制数, 然后将生成的二进制数的相应十进制值用于标记给中心像素。
图 1
用公式表示这个算法。给定
(
x
c
,
y
c
)
(x_c , y_c )
(xc,yc)处的像素,生成的
L
B
P
LBP
LBP 可以用十进制形式表示如下:
L
B
P
(
x
c
,
y
c
)
=
∑
p
=
0
P
−
1
2
p
s
(
g
p
−
g
c
)
\large LBP(x_c,y_c) = \sum_{p=0}^{P-1}2^ps(g_p-g_c)
LBP(xc,yc)=p=0∑P−12ps(gp−gc)
其中
(
x
c
,
y
c
)
(x_c,y_c)
(xc,yc)是中心像素的位置,
g
c
g_c
gc是中心像素的灰度值,
g
p
g_p
gp是相邻像素的灰度值,
s
(
x
)
s(x)
s(x)是一个符号函数。
s
(
x
)
=
{
1
,
if
x
≥
0
0
,
if
x
<
0
\large s(x) = \left\{ \begin{array}{ll} 1, & \textrm{if $\quad$ $x\ge 0$}\\ 0, & \textrm{if $\quad$ $x < 0$}\\ \end{array} \right.
s(x)={1,0,if x≥0if x<0
圆形LBP算子
原始
L
B
P
LBP
LBP 算子的一个限制是它的
3
×
3
3 × 3
3×3 小邻域无法捕获具有大规模结构的主要特征。为了处理不同尺度的纹理,该算子后来被泛化为使用不同大小的邻域[5]。 局部邻域被定义为一组均匀分布在一个圆上的采样点,该圆以待标记的像素为中心,不落在像素内的采样点使用双线性插值进行插值,从而允许任意半径和邻域内任意数量的采样点。 圆形
L
B
P
LBP
LBP 算子计算
L
B
P
LBP
LBP 的方式和原始
L
B
P
LBP
LBP 算子是一样的,以中心像素为阈值,将中心像素与邻域中的相邻像素进行比较,以顺时针方向连接所有这些二进制值来获得一个二进制数。图 2 显示了扩展
L
B
P
LBP
LBP (
E
L
B
P
ELBP
ELBP) 算子的一些示例,其中符号
(
P
,
R
)
(P, R)
(P,R)表示半径为
R
R
R的圆上的
P
P
P个采样点的邻域。
图 2
用公式表示这个算法。给定
(
x
c
,
y
c
)
(x_c , y_c )
(xc,yc)是中心像素的位置,则邻域的坐标
(
x
p
,
y
p
)
(x_p,y_p)
(xp,yp)可表示为
x
p
=
x
c
+
R
c
o
s
(
2
π
p
P
)
y
p
=
y
c
−
R
s
i
n
(
2
π
p
P
)
\large x_p = x_c+Rcos(\frac{2\pi p}{P}) \\ y_p = y_c-Rsin(\frac{2\pi p}{P})
xp=xc+Rcos(P2πp)yp=yc−Rsin(P2πp)
当
(
x
p
,
y
p
)
(x_p,y_p)
(xp,yp)不是整数时,邻域的坐标要通过使用双线性插值(参考[7])进行插值获得
生成的
L
B
P
(
P
,
R
)
LBP(P,R)
LBP(P,R) 可以用十进制形式表示如下:
L
B
P
P
,
R
(
x
c
,
y
c
)
=
∑
p
=
0
P
−
1
2
p
s
(
g
p
−
g
c
)
\large LBP_{P,R}(x_c,y_c) = \sum_{p=0}^{P-1}2^ps(g_p-g_c)
LBPP,R(xc,yc)=p=0∑P−12ps(gp−gc)
其中
(
x
c
,
y
c
)
(x_c,y_c)
(xc,yc)是中心像素的位置,
g
c
g_c
gc和
g
p
g_p
gp分别是半径为 R 的圆邻域中中心像素和 P 个周围像素的灰度值,函数
s
(
x
)
s(x)
s(x) 定义为
s
(
x
)
=
{
1
,
if
x
≥
0
0
,
if
x
<
0
\large s(x) = \left\{ \begin{array}{ll} 1, & \textrm{if $\quad$ $x\ge 0$}\\ 0, & \textrm{if $\quad$ $x < 0$}\\ \end{array} \right.
s(x)={1,0,if x≥0if x<0
从上述定义来看,基本的 LBP 算子对单调灰度变换是不变的,即保留局部邻域中的像素强度顺序。
旋转不变LBP算子
旋转不变
L
B
P
LBP
LBP算子是在圆形
L
B
P
LBP
LBP算子的基础上进行改进的。圆形
L
B
P
(
P
;
R
)
LBP(P;R)
LBP(P;R)算子产生
2
P
2^P
2P 个不同的输出值,对应于相邻集合中的
P
P
P个像素可以形成的
2
P
2^P
2P 个不同的二进制码。 当图像旋转时,灰度值
g
p
g_p
gp 将相应地沿着围绕
g
0
g_0
g0 的圆的周长移动。 由于
g
0
g_0
g0 始终被指定为
g
c
g_c
gc 左上角元素
(
0
;
R
)
(0;R)
(0;R) 的灰度值,因此旋转特定的二进制码自然会产生不同的
L
B
P
(
P
;
R
)
LBP(P;R)
LBP(P;R)值,如图3所示。为了消除旋转的影响,论文[5]提出了一种旋转不变的
L
B
P
LBP
LBP算子。
图 3
旋转不变
L
B
P
LBP
LBP算子就是不断的对圆形邻域的二进制码执行循环逐位右移(相当于图3旋转不同的角度),根据得到一系列的
L
B
P
LBP
LBP二进制码,从这些
L
B
P
LBP
LBP码中选择
L
B
P
LBP
LBP值最小的作为中心像素点的
L
B
P
LBP
LBP值( 如上图3中,应是取最右边最小的00000001为中心像素点的
L
B
P
LBP
LBP)。若令
P
=
8
,
R
=
1
P = 8 ,R = 1
P=8,R=1时,则256种二进制码都做这种旋转,得到最小的数作为旋转不变
L
B
P
LBP
LBP,旋转不变
L
B
P
LBP
LBP一共有36种,如下图4所示:
图 4
结合圆形
L
B
P
LBP
LBP算子的
L
B
P
LBP
LBP计算方式,旋转不变
L
B
P
LBP
LBP算子的公式描述为:
L
B
P
P
,
R
r
i
=
m
i
n
{
R
O
R
(
L
B
P
P
,
R
,
i
)
∣
,
i
=
0
,
1
,
⋯
,
P
−
1
}
\large LBP^{ri}_{P,R} = min\left\{ ROR(LBP_{P,R},i)|,i = 0,1,\cdots,P-1 \right\}
LBPP,Rri=min{ROR(LBPP,R,i)∣,i=0,1,⋯,P−1}
其中
R
O
R
(
x
,
i
)
ROR(x, i)
ROR(x,i) 代表在
x
x
x上执行
i
i
i次循环按位右移。
等价LBP算子
一个 L B P LBP LBP算子可以产生不同的二进制模式,对于半径为 R R R的圆形区域内含有 P P P个采样点的 L B P LBP LBP算子将会产生 2 P 2^P 2P种二进制码。很显然,随着邻域集内采样点数的增加,二进制码的种类是急剧增加的。例如:5×5邻域内20个采样点,有220=1,048,576种二进制码。如此多的二值码无论对于纹理的提取还是对于纹理的识别、分类及信息的存取都是不利的[1]。
为了解决二进制码过多的问题,提高统计性,[3]提出了采用一种“等价模式”(Uniform Pattern)来对
L
B
P
LBP
LBP算子的种类进行降维,使得数据量减少的情况下能最好的代表图像的信息。[3]认为,在实际图像中,绝大多数LBP码最多只包含两次从1到0或从0到1的跳变。因此,[3]将“等价模式”定义为:当某个
L
B
P
LBP
LBP所对应的循环二进制数从0到1或从1到0最多有两次跳变时,该
L
B
P
LBP
LBP所对应的二进制就称为一个等价模式类。如00000000(0次跳变),00000111(只含一次从0到1的跳变),10001111(先由1跳到0,再由0跳到1,共两次跳变)都是等价模式类[1]。
通过这样的改进,二进制码的种类大大减少,而不会丢失任何信息。模式数量由原来的
2
P
2^P
2P种减少为
P
(
P
−
1
)
+
1
P ( P-1)+1
P(P−1)+1种,其中P表示邻域集内的采样点数。对于3×3邻域内8个采样点来说,二进制码由原始的256种减少为58种,即:它把值分为59类,58个小于或等于2次跳变的uniform pattern类,其它超过两次跳变的所有值为第59类,这样从原来的256维变成59维。58个小于或等于2次跳变的uniform pattern类,如图5所示:
图 5
[3]中观察到,在纹理图像的
L
B
P
LBP
LBP (8, 1) 邻域中,等价
L
B
P
LBP
LBP算子约占所有LBP算子的 90%,在
L
B
P
LBP
LBP(16, 2) 邻域中约占 70%。检验某种
L
B
P
LBP
LBP是不是等价
L
B
P
LBP
LBP算子的简单方法是将其和其移动一位后的二进制LBP二进制码按位相减的绝对值求和,定义如下:
U
(
L
B
P
P
,
R
)
=
∣
s
(
g
P
−
1
−
g
c
)
−
s
(
g
0
−
g
c
)
∣
+
∑
p
=
1
P
−
1
∣
s
(
g
p
−
g
c
)
−
s
(
g
p
−
1
−
g
c
)
∣
U(LBP_{P,R}) = |s(g_{P-1}-g_c) - s(g_0-g_c)| + \sum_{p=1}^{P-1}|s(g_{p}-g_c) - s(g_{p-1}-g_c)|
U(LBPP,R)=∣s(gP−1−gc)−s(g0−gc)∣+p=1∑P−1∣s(gp−gc)−s(gp−1−gc)∣
等价旋转不变LBP算子
等价旋转不变
L
B
P
LBP
LBP算子要同时满足两个条件,一个是等价
L
B
P
LBP
LBP算子,另一个是旋转不变
L
B
P
LBP
LBP算子。对于3×3邻域内8个采样点来说,二进制码由原始的256种减少为9种,如图6红色框中所示:
图6
等价旋转不变
L
B
P
LBP
LBP算子用公式进行描述,可表示为:
L
B
P
P
,
R
r
i
u
2
=
{
∑
p
=
0
P
−
1
s
(
g
p
−
g
c
)
,
if
U
(
L
B
P
P
,
R
≤
2
)
P
+
1
,
otherwise
\large LBP_{P,R}^{riu2} = \left\{ \begin{array}{ll} \sum_{p=0}^{P- 1}s(g_p-g_c), & \textrm{if $\quad$ $U(LBP_{P,R}\le2)$}\\ P+1, & \textrm{otherwise}\\ \end{array} \right.
LBPP,Rriu2={∑p=0P−1s(gp−gc),P+1,if U(LBPP,R≤2)otherwise
其中
U
(
L
B
P
P
,
R
)
=
∣
s
(
g
P
−
1
−
g
c
)
−
s
(
g
0
−
g
c
)
∣
+
∑
p
=
1
P
−
1
∣
s
(
g
p
−
g
c
)
−
s
(
g
p
−
1
−
g
c
)
∣
U(LBP_{P,R}) = |s(g_{P-1}-g_c) - s(g_0-g_c)| + \sum_{p=1}^{P-1}|s(g_{p}-g_c) - s(g_{p-1}-g_c)|
U(LBPP,R)=∣s(gP−1−gc)−s(g0−gc)∣+p=1∑P−1∣s(gp−gc)−s(gp−1−gc)∣
最后,其实
L
B
P
LBP
LBP还有很多种形式的改进,这里不在往下写了,因为暂时没有用到。如果读者有兴趣,可以下载论文[4]自行查阅。
参考文献
[1] 基础LBP算法及其改进算法 _Carol_小菜鸟-CSDN博客 https://blog.csdn.net/weixin_42213622/article/details/109381138
[2] Local Binary Pattern Algorithm: The Math Behind It https://medium.com/swlh/local-binary-pattern-algorithm-the-math-behind-it-%EF%B8%8F-edf7b0e1c8b3
[3] Ojala T , Pietik?Inen M , Harwood D . A Comparative Study of Texture Measures with Classification Based on Feature Distributions[J]. Pattern Recognition, 1996, 29(1):51-59.
[4] Huang D , Shan C , Ardabilian M , et al. Local Binary Patterns and Its Application to Facial Image Analysis: A Survey[J]. IEEE Transactions on Systems Man & Cybernetics Part C Applications & Reviews, 2011, 41(6):765-781.
[5] Ojala T , Pietikainen M , Maenpaa T . Multiresolution Gray-Scale and Rotation Invariant Texture Classification with Local Binary Patterns[J]. IEEE Transactions on Pattern Analysis and Machine Intelligence, 2002, 24(7):971-987.
[6] 特征提取方法(二):LBP原理与OpenCV实现 https://cloud.tencent.com/developer/article/1015105
[7] 图像处理之双线性插值法 https://blog.csdn.net/qq_37577735/article/details/80041586
[8] LBP算子https://www.cnblogs.com/ilk123/p/11797261.html