如何实现LBP统一

问题描述 投票:0回答:1

我是 OpenCV 新手。我正在尝试做一个样本来提取面部特征。我正在对几篇论文进行评分,其中最受推荐的一篇是 LBP。我了解 LBP 描述符的工作原理,但我从中读到了一个变体。 LBP 统一 我理解它是 LBP 原始的,但是一旦你有了二进制序列(例如,你将一个特定像素与邻居进行比较,你就会得到下一个结果 -> 11110001,我知道有 2 个转换,所以在这种情况下我们可以说它是均匀,因为转换数量是 <= 2.

我的问题是在完成此过程后我必须在该像素中计算什么代码。我知道 LBP 原始值有 256 个值,但使用 LBP 统一 que 的变体将数量减少到 59 个箱值。所以我的问题是,如果每个像素中的转换数量为 <=2 or >2,则测试后我必须输入什么代码。

谢谢!我希望我解释正确。

opencv descriptor lbph-algorithm
1个回答
4
投票

这里有一个查找表,假设有 8 个邻居:

    static int uniform[256] =
    {  
        0,1,2,3,4,58,5,6,7,58,58,58,8,58,9,10,11,58,58,58,58,58,58,58,12,58,58,58,13,58,
        14,15,16,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,17,58,58,58,58,58,58,58,18,
        58,58,58,19,58,20,21,22,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,
        58,58,58,58,58,58,58,58,58,58,58,58,23,58,58,58,58,58,58,58,58,58,58,58,58,58,
        58,58,24,58,58,58,58,58,58,58,25,58,58,58,26,58,27,28,29,30,58,31,58,58,58,32,58,
        58,58,58,58,58,58,33,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,34,58,58,58,58,
        58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,
        58,35,36,37,58,38,58,58,58,39,58,58,58,58,58,58,58,40,58,58,58,58,58,58,58,58,58,
        58,58,58,58,58,58,41,42,43,58,44,58,58,58,45,58,58,58,58,58,58,58,46,47,48,58,49,
        58,58,58,50,51,52,58,53,54,55,56,57
    };

使用此功能,您只需将 8 位 lbp 值替换为 LUT 中的值即可:

    value = uniform[value];
© www.soinside.com 2019 - 2024. All rights reserved.