【问题标题】:Local Gradient Pattern Implementation局部梯度模式实现
【发布时间】:2017-10-10 18:15:00
【问题描述】:

我正在尝试理解Local gradient pattern - A novel feature representation for facial expression recognition 中描述的局部渐变模式

下面有个计算像素新值的例子:

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

  • 中心像素的新值是多少?
  • LGP 与 LBP 有什么关系?
  • 是否有任何使用 LGP(首选 Python)转换二维矩阵的伪代码?

【问题讨论】:

    标签: python numpy image-processing feature-extraction lbph-algorithm


    【解决方案1】:

    中心像素的新值是多少?

    这取决于编码方案。参考论文没有清楚地解释局部梯度模式是如何编码的。一种可能的编码是:

    在哪里

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

    请注意,使用不同编码的效果会是对直方图 bin 进行重新排序,但这不会影响分类准确度。

    LGP与LBP有什么关系?

    LGP 只是众多LBP 变体中的一种。查看this book 进行全面审查。

    是否有任何使用 LGP 转换二维矩阵的伪代码(首选 Python)?

    试试这个代码:

    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]])
    

    【讨论】:

    • 感谢您的精彩解释。真的很感激。你能检查一下吗? gist.github.com/arsho/251ff14df1c0ed88c469bad17c767efe
    • 如果您必须处理许多图像或图像很大,我建议使用矢量化代码而不是标量代码,因为显式 for 循环可能会减慢程序执行速度。
    • 我不需要处理很多图像。这是为了演示上述算法。你检查过代码吗?如果您进行评论,我会很高兴。
    • 是的,我检查了代码,这就是为什么我建议您使用矢量化代码(如我的 SO 答案中)而不是标量代码(如您的 git 存储库中)。
    猜你喜欢
    • 2015-05-29
    • 1970-01-01
    • 1970-01-01
    • 2014-03-14
    • 1970-01-01
    • 2012-05-22
    • 2018-09-16
    • 2021-02-20
    • 2016-09-25
    相关资源
    最近更新 更多