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

Posted 小白YouCans

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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) = \\begincases 1, \\quad g_p \\ge g_c\\\\ 0, \\quad g_p \\lt g_c \\endcases 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')

参数说明:

  • 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()


【本节完】

版权声明:
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)

以上是关于OpenCV 例程200篇229. 特征描述之 LBP 算子比较(skimage)的主要内容,如果未能解决你的问题,请参考以下文章

OpenCV 例程200篇236. 特征提取之主成分分析(OpenCV)

OpenCV 例程200篇236. 特征提取之主成分分析(OpenCV)

OpenCV 例程200篇227. 特征描述之 LBP 纹理特征算子

OpenCV 例程200篇227. 特征描述之 LBP 纹理特征算子

OpenCV 例程200篇228. 特征描述之 extendLBP 改进算子

OpenCV 例程200篇228. 特征描述之 extendLBP 改进算子