• 【OpenCV 例程200篇】229. 特征描述之 LBP 算子比较(skimage)


    『youcans 的 OpenCV 例程200篇 - 总目录』


    【youcans 的 OpenCV 例程200篇】229. 特征描述之 LBP 算子比较(skimage)


    局部二值模式(LBP,Local binary patterns)是一种用来描述图像局部纹理特征的算子,它具有旋转不变性和灰度不变性的优点 。 LBP 特征计算简单、效果较好,在计算机视觉领域得到了广泛的应用。


    4.2.2 改进的 LBP 纹理特征描述子

    基本 LBP 算子

    基本的 LBP 算子定义在 3×3 的窗口内,以窗口中心像素为阈值,与相邻的 8 个像素的灰度值比较,大于阈值则标记为 1,否则标记为 0。从右上角开始顺时针旋转,排列 8 个 0/1标记值,得到一个 8 位二进制数,就是窗口中心像素点的 LBP 值。
    L B P P , R ( x c , y c ) = ∑ p = 0 P − 1 S ( g p − g c ) ∗ 2 p S ( g p − g c ) = { 1 , g p ≥ g c 0 , g p < g c LBP_{P,R} (x_c,y_c) = \sum_{p=0}^{P-1} S(g_p-g_c)*2^p\\ S(g_p-g_c) =

    {1,gpgc0,gp<gc" role="presentation" style="position: relative;">{1,gpgc0,gp<gc
    LBPP,R(xc,yc)=p=0P1S(gpgc)2pS(gpgc)={1,gpgc0,gp<gc

    基本的 LBP 纹理特征描述子只覆盖了一个固定半径范围内的小区域。这种特征描述方法是随尺度变化的,当图像尺度变化时 LBP 特征编码也会发生变化,因此在大尺寸图像时就不能准确提取到所需的纹理特征,不能反映所描述的纹理信息。

    圆形扩展模式(Circular LBP)

    为了满足尺度、灰度和旋转不变性的要求,Ojala 等对 LBP 算子进行了改进,将 3×3 邻域扩展到任意邻域,并用圆形邻域代替了方形邻域。改进算子允许在半径为 R 的圆形邻域内有 P 个采样点,称为扩展 LBP 算子(Extended LBP,Circular LBP)。

    旋转不变模式(Rotation invariant)

    LBP 算子是灰度不变的,但不是旋转不变的。图像旋转后的 LBP 值是不同的,从而影响识别精度。
    Maenpaa等提出具有旋转不变性的 LBP 算子,不断旋转圆形邻域得到一系列 LBP 值,将最小的 LBP 值作为该邻域的 LBP 值,从而具有旋转不变性。

    等价模式(Uniform Pattern)

    Ojala提出了“等价模式(Uniform Pattern)”,把某个最多有两次 0/1 跳变的二进制组合所对应的 LBP 定义为一个等价模式类,其它所有的模式都定义为混合模式类。这种方法将模式数量由 2 P 2^P 2P 种减少为 P ( P − 1 ) + 2 P(P-1)+2 P(P1)+2 种,显著减少了特征向量的维数,可以减少高频噪声的影响。

    此外,还有各种改进的 LBP 方法,例如:

    • TLBP,中心像素与周围所有像素比较,而不是选择 P 个采样点
    • DLBP,考察四个方向的灰度变化,每个方向用 2bits 编码
    • MLBP,用采样点像素的平均值代替中心像素进行比较处理
    • MB-LBP,将图像级联分块,以小区域代替像素单位进行处理
    • VLBP, 对于动态图像序列,考虑前 p 帧图像和后 p 帧图像的 LBP 特征
    • RGB-LBP,对彩色图像的 RGB 颜色分量分别计算 LBP 后再进行连接

    skimage.feature 函数 local_binary_pattern

    skimage 的特征提取库 skimage.feature 提供了函数 local_binary_pattern,可以实现多种 LBP 特征描述算子。

    函数说明:

    local_binary_pattern(image, P, R, method='default')
    
    • 1

    参数说明:

    • image:单通道图像
    • P:整数,圆形邻域中采样点数量
    • R:实数,圆形邻域的半径
    • method:处理方法
      • ‘default’:基本 LBP,默认选项
      • ‘ror’:扩展 LBP,圆形 LBP
      • ‘uniform’:均匀模式,等价模式 LBP
      • ‘nri_uniform’:非旋转不变的均匀模式 LBP
      • ‘var’:方差度量局部图像纹理的对比度

    这些方法的比较如例程 14.9 所示。


    例程 14.9:特征描述之 LBP 算子比较(skimage)

        # 14.9 特征描述之 LBP 算子比较 (skimage)
        from skimage.feature import local_binary_pattern
    
        img = cv2.imread("../images/fabric2.png", flags=1)
        gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)  # 灰度图像
    
        # LBP算法中范围半径的取值
        r = 2  # 邻域半径
        p = 8 * r   # 邻域采样点数量
    
        # 基本 LBP,灰度不变
        basicLBP = local_binary_pattern(gray, 8, 1)
        # 圆形 LBP,扩展灰度和旋转不变
        circleLBP = local_binary_pattern(gray, p, r, method="ror")
        # 旋转不变 LBP
        invarLBP = local_binary_pattern(gray, p, r, method="var")
        # 等价 LBP,灰度和旋转不变
        uniformLBP = local_binary_pattern(gray, p, r, method="uniform")
    
        plt.figure(figsize=(9, 6))
        plt.subplot(231), plt.axis('off'), plt.title("origin")
        plt.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))
        plt.subplot(232), plt.axis('off'), plt.title("gray")
        plt.imshow(gray, 'gray')
        plt.subplot(233), plt.axis('off'), plt.title("basic LBP")
        plt.imshow(basicLBP, 'gray')
        plt.subplot(234), plt.title("extendLBP (r={},p={})".format(r,p))
        plt.imshow(circleLBP, 'gray'), plt.axis('off')
        plt.subplot(235), plt.title("invariantLBP (r={},p={})".format(r,p))
        plt.imshow(invarLBP, 'gray'), plt.axis('off')
        plt.subplot(236), plt.title("uniformLBP (r={},p={})".format(r,p))
        plt.imshow(uniformLBP, 'gray'), plt.axis('off')
        plt.tight_layout()
        plt.show()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34

    在这里插入图片描述


    【本节完】

    版权声明:
    youcans@xupt 原创作品,转载必须标注原文链接:(https://blog.csdn.net/youcans/article/details/125672432)
    Copyright 2022 youcans, XUPT
    Crated:2022-7-7

    227. 特征描述之 LBP 纹理特征算子
    228. 特征描述之 extendLBP 改进算子
    229. 特征描述之 LBP 算子比较(skimage)

  • 相关阅读:
    一个高频问题:异步操作会创建线程吗?
    springboot 项目升级 2.7.16 踩坑
    基于JSP的民宿酒店预约管理系统【数据库设计、源码、开题报告】
    C++Qt开发——QSS样式表
    【以图会意】操作系统的加载流程
    springboot大学新生小助手小程序毕业设计-附源码060917
    国家信息中心举办“数字政府建设暨数字安全技术”研讨会:海云安提出数字政府软件供应链安全解决方案
    软考 系统架构设计师系列知识点之边缘计算(2)
    blazejmeter初次体验
    《诊断服务》禁止功能寻址
  • 原文地址:https://blog.csdn.net/youcans/article/details/125672432