0

我正在尝试理解Local Gradient Pattern - A new feature representation for facial expression recognition中描述的局部梯度模式。

有一个计算像素新值的示例,如下所示:

模式计算

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

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

1 回答 1

1

该中心像素的新值是多少?

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

导光板

在哪里

f(x)

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

代码计算示例

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

LGP 与 LBP 有什么关系?

LGP 只是众多LBP 变体之一。看看这本书以获得全面的评论。

是否有任何使用 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]])
于 2017-05-12T09:45:37.673 回答