opencv - 如何实现LBP un​​iform

标签 opencv descriptor lbph-algorithm

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

我的问题是在完成此过程后我必须在该像素中计算什么代码。我知道 LBP 原始 wew 有 256 个值,但是使用 LBP un​​iform que 的这个变体将数量减少到 59 个 bins 值。所以我的问题是,如果每个像素的过渡次数是 <=2 或 >2,我必须在测试后放置什么代码。

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

最佳答案

here's a lookup-table for this, assuming 8 neighbours:


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

关于opencv - 如何实现LBP un​​iform,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35747924/

相关文章:

python - 无法在 macOS 上的 Anaconda3 python3.6 上安装 OpenCV3

python - 包围图像所有黑色像素的最小角度矩形

python - 使用 opencv 手写数字上的边界框

python - 获取描述符对象的好方法

opencv - OpenCV 的 createLBPHFaceRecognizer 中的半径参数是什么?

c++ - 进行 OCR 之前的预处理(tesseract、OpenCV)

Python:为什么描述符不能是实例变量?

android - 低功耗蓝牙 - notifyCharacteristicChanged() 不更新描述符值

matlab - 如何在 matlab 中缩放 kinect 深度图像以在其上应用 LBP?

python - ConvergenceWarning : Liblinear failed to converge, 增加迭代次数