美文网首页
LBP特征描述算⼦-⼈脸检测

LBP特征描述算⼦-⼈脸检测

作者: 不跳不蚤 | 来源:发表于2020-06-28 20:57 被阅读0次

    1. 人脸检测流程

        人脸检测的过程是采用多尺度滑窗搜索模式,每个尺度通过一定的步长截取20x20的窗口,然后在分类器中对这些窗口进行判决,如果是人脸就通过所有分类器,否则会在某一级分类器中被排除。

    人脸检测流程图

    2.LBP算法

        LBP是指局部二值模式,它用来描述图像的局部特征,具有灰度不变性和旋转不变性的优点。

        基本的LBP原理的通俗解释:LBP算子定义在像素3x3的邻域内,以邻域中心像素为阈值,相临的8个像素的灰度值与邻域中心的像素值进行比较,若周围像素大于中心像素值,则该像素的位置被标记为1,否则为0。这样,在3x3的领域中就产生了一个8位的二进制数,这个二进制数就是中心点的LBP值。因此,LBP值共有2^8种可能。中心像素的LBP值反应了周围像素的纹理信息。

    LBP计算示意图

    改进的LBP:基本的LBP算子只覆盖了一个固定半径范围的小区域,不能满足不同尺寸和频率纹理的需要。改进后的LBP算子,可以适应不同尺度的纹理特征,并达到灰度、旋转不变性的要求。改进后的LBP将3x3的区域扩展到任意区域,用圆形邻域代替正方形邻域,允许在半径为R的圆形邻域内有任意多个像素点。半径为R,采样点为P个的LBP算子表示为LBP_{P}^R

    圆形LBP

    LBP是灰度不变的,但不是旋转不变。改进后的LBP实现了旋转不变性。

        实现方式:不断旋转圆形邻域,得到一系列初始定义的LBP值,取最小值作为该邻域的值。

    等价模式:当某个局部二进制模式所对应的循环二进制数从0到1或从1到0最多有两次跳变时,该局部二进制模式所对应的二进制就称为一个等价模式。比如:00000000  11111111  10111111。

    除了等价模式,其余的都是混合模式。

    LBP_{P}^R 会产生2^P 种模式,改进后LBP的模式数由2^P 降维到p*(p-1)+2。维数减少可以降低高频噪声的影响。

    3.代码实现

        OpenCV实现了LBP特征的计算,但没有提供单独的接口。

    代码


    #coding:utf-8

    import cv2as cv

    #读取原始图像

    img = cv.imread('qwe.jpg')

    #检测人脸

    face_detect = cv.CascadeClassifier('lbpcascade_frontalface_improved.xml')

    #灰度处理

    gray = cv.cvtColor(img, code=cv.COLOR_BGR2GRAY)

    #检查人脸 按照1.1倍放大 周围最小像素为5

    face_zone = face_detect.detectMultiScale(gray, scaleFactor=2, minNeighbors=2)

    print('识别人脸的信息:\n', face_zone)

    #绘制矩形和圆形人脸检测

    for x,y,w,hin face_zone:

    #绘制矩形人脸区域

        cv.rectangle(img, pt1=(x,y), pt2=(x+w, y+h), color=[0,0,255],thickness=2)

    #绘制圆形人脸区域 radius表示半径

        cv.circle(img, center=(x+w//2, y+h//2), radius=w//2, color=[0,255,0], thickness=2)

    #设置图片可以手动调节大小

    cv.namedWindow('wo',0)

    #显示图片

    cv.imshow('wo', img)

    #等待显示 设置任意键退出程序

    cv.waitKey(0)

    cv.destroyAllWindows()


    结果:

    相关文章

      网友评论

          本文标题:LBP特征描述算⼦-⼈脸检测

          本文链接:https://www.haomeiwen.com/subject/cstgfktx.html