Python 局部梯度模式的实现

Python 局部梯度模式的实现,python,numpy,image-processing,feature-extraction,lbph-algorithm,Python,Numpy,Image Processing,Feature Extraction,Lbph Algorithm,我试图理解中描述的局部梯度模式 下面是计算像素新值的示例,如下所示: 我看到中心像素(25)Pattern-1的值是10,Pattern-2的值是01。我有几个问题 该中心像素的新值是多少 LGP与LBP的关系如何 是否有使用LGP(Python首选)转换2D矩阵的伪代码 该中心像素的新值是多少 它取决于编码方案。参考文献没有明确解释局部梯度模式是如何编码的。一种可能的编码方式是: 在哪里 如果将示例的强度值引入模式代码结果上方的表达式中: 请注意,使用不同编码的效果将是直方图箱的重

我试图理解中描述的局部梯度模式

下面是计算像素新值的示例,如下所示:

我看到中心像素(25)
Pattern-1
的值是
10
Pattern-2
的值是
01
。我有几个问题

  • 该中心像素的新值是多少
  • LGP与LBP的关系如何
  • 是否有使用LGP(Python首选)转换2D矩阵的伪代码
该中心像素的新值是多少

它取决于编码方案。参考文献没有明确解释局部梯度模式是如何编码的。一种可能的编码方式是:

在哪里

如果将示例的强度值引入模式代码结果上方的表达式中:

请注意,使用不同编码的效果将是直方图箱的重新排序,但这不会对分类精度产生影响

LGP与LBP的关系如何

LGP只是许多LBP变体之一。看一看,进行全面的回顾

是否有使用LGP(Python首选)转换2D矩阵的伪代码

请尝试以下代码:

import numpy as np

def LGP_codes(img, r=1):
    padded = np.pad(img, (r, r), 'constant')
    a1 = padded[:-2*r, :-2*r]
    b1 = padded[:-2*r, r:-r]
    a2 = padded[:-2*r, 2*r:]
    b2 = padded[r:-r, 2*r:]
    a3 = padded[2*r:, 2*r:]
    b3 = padded[2*r:, r:-r]
    a4 = padded[2*r:, :-2*r]
    b4 = padded[r:-r, :-2*r]
    codes = (a1 >= a3) + 2*(a2 >= a4) + 4*(b1 >= b3) + 8*(b2 >= b4)
    return codes[r:-r, r:-r]
演示

In [31]: patch = np.array([[18, 25, 14], 
    ...:                   [85, 25, 86], 
    ...:                   [45, 65, 14]])
    ...: 

In [32]: LGP_codes(patch)
Out[32]: array([[9]])

谢谢你的解释。非常感谢。你能检查一下这个吗?如果您必须处理许多图像或图像很大,我建议使用矢量化代码而不是标量代码,因为显式for循环可能会降低程序执行速度。我不需要处理许多图像。这是为了演示上述算法。你查过密码了吗?如果您能做一个回顾,我会很高兴。是的,我检查了代码,这就是为什么我建议您使用矢量化代码(如我的SO答案中所示)而不是标量代码(如git存储库中所示)。