LBP算法及其改进算法

LBP

LBP指局部二值模式,英文全称:Local Binary Pattern,是一种用来描述图像局部特征的算子,LBP特征具有灰度不变性和旋转不变性等显著优点。它是由T. Ojala, M.Pietikäinen, 和 D. Harwood在1994年提出,由于LBP特征计算简单、效果较好,因此LBP特征在计算机视觉的许多领域都得到了广泛的应用,LBP特征比较出名的应用是用在人脸识别和目标检测中,在计算机视觉开源库Opencv中有使用LBP特征进行人脸识别的接口,也有用LBP特征训练目标检测分类器的方法,Opencv实现了LBP特征的计算,但没有提供一个单独的计算LBP特征的接口。
原始的LBP算子定义在像素33的邻域内,以邻域中心像素为阈值,相邻的8个像素的灰度值与邻域中心的像素值进行比较,若周围像素大于中心像素值,则该像素点的位置被标记为1,否则为0。这样,33邻域内的8个点经过比较可产生8位二进制数,将这8位二进制数依次排列形成一个二进制数字,这个二进制数字就是中心像素的LBP值,LBP值共有种可能,因此LBP值有256种。中心像素的LBP值反映了该像素周围区域的纹理信息。
备注:计算LBP特征的图像必须是灰度图,如果是彩色图,需要先转换成灰度图。
在这里插入图片描述

def LBP(srcimg):
    '''
    :param src:图像
    :return:
    '''
    src = cv2.cvtColor(srcimg, cv2.COLOR_RGB2GRAY)
    height = src.shape[0]
    width = src.shape[1]
    # dst = np.zeros([height, width], dtype=np.uint8)
    dst = src.copy()

    lbp_value = np.zeros((1,8), dtype=np.uint8)
    neighbours = np.zeros((1,8), dtype=np.uint8)
    for x in range(1, width-1):
        for y in range(1, height-1):
            neighbours[0, 0] = src[y - 1, x - 1]
            neighbours[0, 1] = src[y - 1, x]
            neighbours[0, 2] = src[y - 1, x + 1]
            neighbours[0, 3] = src[y, x - 1]
            neighbours[0, 4] = src[y, x + 1]
            neighbours[0, 5] = src[y + 1, x - 1]
            neighbours[0, 6] = src[y + 1, x]
            neighbours[0, 7] = src[y + 1, x + 1]

            center = src[y, x]

            for i in range(8):
                if neighbours[0, i] > center:
                    lbp_value[0, i] = 1
                else:
                    lbp_value[0, i] = 0

            lbp = lbp_value[0, 0] * 1 + lbp_value[0, 1] * 2 + lbp_value[0, 2] * 4 + lbp_value[0, 3] * 8 \
                + lbp_value[0, 4] * 16 + lbp_value[0, 5] * 32 + lbp_value[0, 6] * 64 + lbp_value[0, 0] * 128

            dst[y, x] = lbp

    return dst

LTP(2007)

作者做出了三个主要贡献:(i)提出了一个简单有效的预处理链,消除了光照变化的大部分影响,同时仍然保留了识别所需的基本外观细节;(ii)引入了局部三元模式(LTP),这是局部二元模式(LBP)局部纹理描述符的一种推广,在均匀区域中更具鉴别能力,对噪声不太敏感;(iii)用基于局部距离变换的相似性度量代替局部历史图,进一步提高了基于LBP /LTP的人脸识别的性能。
LTP将LBP扩展到三值码,即局部三值模式,其中ic周围宽度±t区域中的灰度量化为零,高于此区域的灰度量化为+1,低于此区域的灰度量化为−1,即指示器s(u)替换为三值函数:
在这里插入图片描述
将二进制LBP码替换为三元LTP码。这里,t是用户指定的阈值(因此LTP代码更能抵抗噪声,但不再对灰度变换严格保持不变)。图2中示出了LTP编码过程。此处阈值t设置为5,因此公差间隔为[49,59]。
在这里插入图片描述
下图展示了来自 Extended Yale-B frontal数据库的一个人的图像示例。这些列分别给出了子集1到5的图像。(a) 输入图像。(b) 预处理链中相应的照明归一化图像。
在这里插入图片描述
参考文献:
Tan X , Triggs B . Enhanced Local Texture Feature Sets for Face Recognition Under Difficult Lighting Conditions[J]. Amfg, 2007, 4778(6):1635-1650.

CLBP(2010)

完整的局部二值模式(Complete Local Binary Patterns,CLBP)提出了三种局部纹理描述算子表达纹理:窗口灰度差异描述算子(CLBP-Sign,CLBP_S)、窗口梯度差异描述算子(CLBP-Magnitude,CLBP_M)以及中心像素点描述算子(CLBP-Center,CLBP_C)。其计算方式如下:
在这里插入图片描述
其中,
N 为图像划分的子窗口个数。从公式中可以看出:CLBP_SP,R 即为传统意义上的 LBP;CLBP_MP,R 通过两像素点的灰度差异幅值与全局灰度差异幅值的均值比较,描述了局部窗口的梯度差异信息,作为 CLBP_SP,R 的互补信息;CLBP_CP,R 反应中心像素点的灰度信息。相比于传统 LBP 及其变种,此三种描述算子联合构成的CLBP_SMC 对纹理的描述更加精细,对纹理的识别准确率有了大幅度提高。
对 CLBP 算法分析可知,当因光照不均导致图像灰度梯度分布不均匀时,即相比于图像的大部分区域,小部分区域变化幅度剧烈或变化幅度平缓时,CLBP_MP,R就显现出了它的局限性。【对光照不敏感,会遗漏掉图像光滑部分的纹理信息】

参考文献:
GUO Z, ZHAN GL, ZHANG D. A completed modeling of local binary pattern operator for texture classification [J]. IEEE Transactions on Image Processing, 2010, 19(6):1657-1663

ICLBP(2014)

在 CLBP 算法的基础上,对 CLBP 算法作了进一步改进,同时提出了一种灰度梯度差异特征描述算子 ICLBP_TP,R ,即采用两像素点的灰度差异幅值与窗口灰度差异幅值的均值比较,其计算方式如下:
在这里插入图片描述
其中,在这里插入图片描述
在这里插入图片描述
ICLBP算法将产生的四个纹理描述算子分别是:ICLBP_SP,R、ICLBP_MP,R、ICLBP_CP,R、ICLBP_TP,R ,其中,ICLBP_SP,R 通过对比两个像素点的灰度值大小描述局部窗口的灰度差异特征,与 CLBP_SP,R 一致;ICLBP_MP,R 通过对比两像素点的灰度差异幅值与窗口灰度差异幅值的均值大小描述局部窗口内灰度梯度差异特征;ICLBP_CP,R 通过对比窗口灰度均值与图像全局灰度均值大小描述全局图
像的灰度值差异特征;ICLBP_TP,R 通过对比窗口灰度差异幅值的均值与图像全局灰度差异幅值的均值大小描述了全局图像的梯度差异特征。
相比于原 CLBP算法,改进后的 ICLBP算法对图像纹理的描述具有更好的精细性和鲁棒性,且图像边缘更清晰,纹理更清晰精细
在这里插入图片描述
参考文献:刘豪,杨永全,郭仙草,等.用于纹理特征提取的改进的LBP算法[J].计算机工程与应用,2014,50(6):182-185,245.
LIU Hao, YANG Yongquan, GUO Xiancao, et al. Improved LBP used for texture feature extraction [J] . Computer Engineering and Applications, 2014,50(6):182-185,245.

FLBP(2008)

现有LBP是首先将邻域像素点灰度值和中心像素点灰度值进行相减 运算,若结果为正,将该像素局部二值编码设置为1,结果为负,将其设置0。该算法阈值固定,仅仅取决于中心像素和邻域像素灰度值的差异性,所以,此算法存在不同局部空间结构模式中可能得出同样的局部二值编码的情况,如下图所示。
在这里插入图片描述
为增强基本LBP对局部边缘特征鉴别程度,将模糊数学结合基本LBP。转换二值编码时,起初必须量算中心像素与邻域像素点的灰度差异度,接下来计算邻域像素点相对中心像素点的隶属度,以隶属度为依据判定局部二值编码值。如图2,隶属度高于0.5的情况下,局部二值编码确定为1,不然确定为0。
在这里插入图片描述

模糊局部二值模式较大程度上改善基本无法区别局部结构特征的问题,优化后的 LBP 公式写作:
在这里插入图片描述
其中,局部二进值编码S′定义方式

在这里插入图片描述
μA(u)* 为邻域像素相对于中心像素隶属度,形式化可以写作
在这里插入图片描述
式中:Gmax 和Gmin 分别代表的含义是半径 R 的区域内灰度最大值和最小值。
FLBP提高对于噪声的鲁棒性,但是其计算量大并且难以扩展到多尺度分析。

参考文献:
Iakovidis D K,Keramidas E G,Maroulis D. Fuzzy Local Binary Patterns for Ultrasound Texture Characterization[J]. Image Analysis and Recognition,2008:750-759.

ALBP(2010)

因为LBP无法完全表示图像的局部空间特征,不能表达纹理图像的方向性信息,Guo Zhenhua等人于2010年提出了对于旋转不变的纹理分类使用方向统计信息,用平均值和标准差来定义每个像素点及其周围像素点在每个方向上的局部差分布。为了减小局部差的统计误差,发展出了使用最小二乘估计(LSE)的自适应LBP方法(ALBP)。而且使用LSE的ALBP方法可以为分类带来附加信息,提高分类准确性。
自适应LBP是一种包含方向统计信息的旋转不变纹理分类方法。每个像素与
其周围像素灰度值的局部差的分布是由其平均值和标准差塑造的。给出一个中央像素点灰度值为g。,它的P个邻近点的灰度值为gp,P的值是从0到P-1,gc和gp之间的差值的分布是随着P不同而变化的。图3.7是一个例子,两幅纹理图像有相似的LBP分布,但是他们的局部差|gc-gp|不同。
在这里插入图片描述
在这里插入图片描述ALBP方法也可以被扩展为多尺度的方法。

参考文献:
Guo Z H, Zhang L, Zhang D, Zhang S. Rotation invariant texture classification using adaptive LBP with directional statistical features. In: Proceedings of the 17th IEEE International Conference on Image Processing. Hong Kong,China: IEEE, 2010. 285−288
宋克臣,颜云辉,陈文辉,张旭. 局部二值模式方法研究与展望[J].自动化学报,2013,39(06):730-744.

NTLBP(2012)

Fathi A等提出的NTLBP算子,使用圆形多数表决滤波器和合适的旋转不变标记方法来获得更规则的均匀和非均匀模式,这些模式具有更好的识别能力和更强的噪声鲁棒性。

作者为LBP算子设计了一种新的标记方案,该方案能够以旋转不变的方式描述模式,并且与真实图像中的模式分布更具兼容性。此方法尝试使用具有四个位转换(v=4)的所有非均匀图案。因为对于P位LBP模式,这组模式至少有两个“1”(对于P=8为00100010),最多有P-2个“1”(对于P=8,为11011101)采用1减去“1”的个数作为此类中每个图案的索引。因此,在这组非均匀模式中,与均匀模式一样,作者根据模式中“1”位的数量对P-3存储箱中的所有现有模式进行分类。此外,对于其他非均匀模式,作者对具有相同位转换(v)值的每个组使用一个标签,而不是为所有模式指定一个标签。
此外,为了降低噪声敏感性问题,作者尝试将所提出的LBP算子与标准平滑和降噪平均滤波方法相结合。为此,作者在LBP域中引入了一种新的空间平均滤波,称为循环多数投票滤波。在该滤波器中,为了减少噪声影响,使用其左右两侧邻域的多数值修改每个位的值。与平均滤波一样,这种多数表决滤波器可以平滑所获得的二进制码,并提高所提出的LBP的抗噪声性。由于多数表决是容错系统实现的传统方式,作者将该方法命名为noise tolerant LBP(NTLBP),其公式如下:
在这里插入图片描述
在这里插入图片描述
该方法的核心思想不仅是有效合理地利用局部纹理模式中更规则的非均匀原始信息,而且对噪声具有更强的鲁棒性。为此,采用了循环多数投票过滤和新的标记方案的集成。在不同数据库上的实验表明,该方法在现有LBP算子中具有最高的识别能力和分类精度,以及更好的纹理分析抗噪能力。

参考文献:
Fathi A,Naghsh-Nilchi A R. Noise tolerant local binary pattern operator for efficient texture analysis[J]. Pattern Recognition Letters,2012,33(9):1093-1100.
基于抗噪的LBP纹理特征提取研究

NRLBP、ENRLBP(2013)

Jiang 等在FLBP此基础上提出noise-resistant LBP (NRLBP)和extended noise-resistant LBP (ENRLBP),与LBP、LTP和许多其他变体相比,提议的NRLBP和ENRLBP更耐噪声。在各种应用中,建议的NRLBP和ENRLBP表现出优于LBP\LTP变体的性能。
NRLBP在具有模糊性的像素位置可以产生m种不同的均匀模式,那么每个均匀模式对最后直方图统计的权值简单的取 1/m。如果不确定模式 C(x)无
法产生均匀模式,将表示非均匀模式的 bin增加 1,通过建立一个查找表来实现,使得其计算量比FLBP 明显降低, 仅仅稍高于传统 LBP 方法而计算量依旧很复杂。
在这里插入图片描述
在这里插入图片描述
参考文献:
Ren,Jianfeng,Jiang,et al. Noise-Resistant Local Binary Pattern With an Embedded Error-Correction;Mechanism[J]. IEEE Transactions on Image Processing A Publication of the IEEE Signal Processing Society,2013,22(10):4049-4060.
基于抗噪的LBP纹理特征提取研究

CRLBP(2013)

Zhao等提出了一种完备鲁棒局部二值模式(CRLBP),其中 3*3 局部区域中每个中心像素的值被其平均局部灰度级替换。与中心灰度值相比,平均局部灰度级对噪声和光照变化更稳健。为了使 CRLBP更加稳健和稳定,还引入了加权局部灰度(WLG)代替原中心像素值,该方法对噪声具有较好的鲁棒性。

参考文献:
Zhao Y,Jia W,Hu R X,et al. Completed robust local binary pattern for texture classification[J]. Neurocomputing,2013,106(6):68-76
基于抗噪的LBP纹理特征提取研究

BRINT(2014)

Liu 等在传统 LBP 方法基础上,设计一种新的对噪声稳健的 BRINT 描述子。首先将中心像素的圆形邻域系统进用连续 Q 个邻域像素的平均值表示新的邻域系统中的一个邻域像素点,最后得到一个新的圆形邻域系统;然后再以原中心像素值为阈值对新的邻域系统进行二值量化,最终获得一个二进制模式。
BRINT是一种理论上和计算上都很简单、抗噪的纹理分类方法。该方法效率高,对加性噪声、光照和旋转不变性具有鲁棒性,避免了与均匀模式相关的缺点,并且能够对大量尺度进行编码。所提出的方法在所有数据集上都产生了一致良好的分类结果,在高噪声情况下,其表现最显著地优于最先进的方法。

参考文献:
Liu L,Yang B,Fieguth P,et al. BRINT:A binaryrotation invariant and noise tolerant texture descriptor[C]// IEEE International Conference on Image Processing. IEEE,2014.
基于抗噪的LBP纹理特征提取研究

co-ALBP(2014)

CoALBP(Co-Occurrence of adjacent Local Binary Pattern)相邻局部二值模式,它是由原始 LBP 算子模型改进得到的。因为 LBP 算子对光照具有很强的鲁棒性,所以原始 LBP 算子在纹理识别、面部识别等应用比较多,但是原始 LBP 是通过中间像素与周围像素比较二值化,然后进行直方图的统计,这会导致算子之间缺少空间信息。如图 2.10,表示了 LBP 和 CoALBP 特征的差异,CoALBP 相较于 LBP 特征算子,考虑了算子的空间信息。
在这里插入图片描述

参考文献:
Qi X, Xiao R, Li C G, et al. Pairwise rotation invariant co-occurrence local binary pattern[J].IEEE transactions on pattern analysis and machine intelligence, 2014, 36(11): 2199-2213.
基于网络摄像头的人脸识别系统设计

03-12
### Local Binary Patterns (LBP) in Computer Vision and Image Processing #### Definition of LBP Local Binary Pattern (LBP) is a type of feature used for texture classification in computer vision. The operator labels the pixels of an image by thresholding the neighborhood of each pixel and considers the result as a binary number[^3]. #### Algorithm Steps The extraction algorithm contains two main steps: the threshold step and the encoding step. In the **threshold step**, all neighboring pixel values are compared to the center pixel value within each pattern, converting these into binary values (0 or 1). This process captures local binary differences around the central point. During the **encoding step**, the resulting binary numbers from the threshold phase get encoded and transformed into decimal numbers that characterize structural patterns. These decimal representations effectively summarize the spatial structure surrounding the central pixel. #### Historical Development Initially proposed by Ojala et al., this method was designed for rotation-invariant texture classification. Early versions computed histograms based on absolute gray-level differences between the center pixel's intensity level and its neighbors'. Subsequently, improvements led to using only the sign rather than magnitude when comparing intensities, which simplified computations while preserving useful information about textures' microstructures such as edges, lines, and spots. ```python import cv2 import numpy as np def lbp(image, P=8, R=1): """Compute LBP features.""" lbp_image = np.zeros_like(image) for i in range(1, image.shape[0]-1): for j in range(1, image.shape[1]-1): # Get neighbor pixels at radius R neighbors = [] for k in range(P): angle = float(k)*2.0*np.pi/P nx = int(i + round(R * np.cos(angle))) ny = int(j + round(R * np.sin(angle))) if nx >= 0 and nx < image.shape[0] and ny >= 0 and ny < image.shape[1]: neighbors.append(image[nx][ny]) else: neighbors.append(0) # Compare with center pixel center_pixel_value = image[i,j] codes = [(n > center_pixel_value) for n in neighbors] # Convert list of booleans to integer code lb_code = sum([v << p for p,v in enumerate(codes)]) lbp_image[i,j]=lb_code return lbp_image ``` This Python function demonstrates how one might implement basic LBP computation over an input grayscale `image`. It iterates through every pixel except border regions where full neighborhoods cannot be defined reliably due to boundary conditions.
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值