计算机视觉之图像处理--2

LBP算子简介

LBP指局部二值模式(Local Binary Pattemn),是一种 用来描述图像局部特征的算子,具有灰度不变性和旋转不变
性等显著优点。LBP常应用于人脸识别和目标检测中,在OpenCV中有使用LBP特征进行人脸识别的接口,也有用
LBP特征训练目标检测分类器的方法,OpenCV实现了LBP特征的计算,但没有提供-一个单独的计算LBP特征的接
口。也就是说OpenCV中使用了LBP算法,但是没有提供函数接口。在这个深度学习发展非常迅猛的时代仍然具有借鉴意义。

LBP算子原理

原理参考

  • 这里可能用到概率论和数理统计的知识,先是
  • 在这里插入图片描述
    1

在这里插入图片描述

  • 其中(t(gc))决定了局部区域的整体亮度,对于纹理特征,可以忽略这一项,最终得到:
    在这里插入图片描述
    在这里插入图片描述

LBP的三个发展阶段

3X3矩阵的像素

在这里插入图片描述

圆形LBP算子

  • 为了适应不同尺度的纹理特征,并达到灰度级和旋转不变性的要求,
  • 3x3邻域扩展到任意邻域,并用圆形邻域代替了正方形邻域,

在这里插入图片描述

LBP的旋转不变性

在这里插入图片描述

在这里插入图片描述
说实话,没看太懂,先fork一下 qwq

LBP的等价模式

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

人脸检测的流程

运用滑动窗口的方法
在这里插入图片描述

代码实战

插值算法

import cv2
import matplotlib.pyplot as plt 
#  %matplotlib inline
if __name__ == "__main__":
    img = cv2.imread('gangshou.png', cv2.IMREAD_UNCHANGED)
    
    print('Original Dimensions : ',img.shape)
    
    scale_percent = 30       # percent of original size
    width = int(img.shape[1] * scale_percent / 100)
    height = int(img.shape[0] * scale_percent / 100)
    dim = (width, height)
    # resize image
    resized = cv2.resize(img, dim, interpolation = cv2.INTER_LINEAR)

    fx = 1.5
    fy = 1.5

    resized1 = cv2.resize(resized, dsize=None, fx=fx, fy=fy, interpolation = cv2.INTER_NEAREST)
    
    resized2 = cv2.resize(resized, dsize=None, fx=fx, fy=fy, interpolation = cv2.INTER_LINEAR)
    print('Resized Dimensions : ',resized.shape)
    plt.imshow(resized)
    plt.show()
    plt.imshow(resized1)
    plt.show()
    plt.imshow(resized2)
    plt.show()
    # cv2.imshow("Resized image", resized)
    # cv2.imshow("INTER_NEAREST image", resized1)
    # cv2.imshow("INTER_LINEAR image", resized2)
    cv2.waitKey(0)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

LBP算法

import cv2 as cv
import numpy
# from PIL import Image
import matplotlib.pyplot as plt
#读取图像
img=cv.imread('lena.png')
# 检测人脸
face_detect =cv.CascadeClassifier('lbpcascade_frontalface_improved.xml')
# face_detect =cv.CascadeClassifier('haarcascade_frontalface_alt.xml')
# 灰度检测
gray =cv.cvtColor(img,code=cv.COLOR_BGR2GRAY)
#检测人脸,按照1.1倍放到周围最小像素为5
face_zone =face_detect.detectMultiScale(gray,scaleFactor=2,minNeighbors=2)
# maxsize=(55,55)
print('识别人脸的信息:\n',face_zone)

for x,y,w,h in face_zone:
    # 绘制矩形人脸的区域
    cv.rectangle(img,pt1 =(x,y),pt2=(x+h,w+h),color=[0,255,255],thickness=2)
    # 绘制圆形人脸的区域,radius表示半径
    cv.circle(img,center=(x+w//2,y+h//2),radius=w//2,color=[0,255,0],thickness=2)
    # display(Image.open(img))
    plt.imshow(img)
    plt.show()

结果

参考论文

[1] Multiresolution gray-scale and rotation invariant texture classification with local binary patterns

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值