赞
踩
LBPH(Local Binary Patterns Histograms,局部二值模式直方图)的原理主要基于LBP(Local Binary Patterns,局部二值模式)算法,并通过计算并比较图像中局部区域的LBP直方图来进行特征提取和识别。以下是LBPH原理的详细解释:
对于图像中的每个像素,将其邻域的像素与该像素进行比较。如果邻域像素大于或等于中心像素,则该邻域像素被标记为1,否则为0。
对于每个像素,比较结果会形成一个二进制数。这个二进制数通常是由中心像素与其周围8个像素比较得到的8位二进制序列。将这个二进制序列转换为十进制数,即得到该像素的LBP值。
将输入图像划分为若干个小区域(或称为局部区域),每个区域将独立处理。
对于每个局部区域,计算其LBP值的直方图。直方图的每个条目记录了特定LBP模式在该区域中出现的频率。
将所有局部区域的LBP直方图串联起来,形成一个长特征向量。这个特征向量代表了整个图像的纹理特征。
1.计算输入图像的LBP直方图
在识别阶段,对于输入的待识别图像,同样进行图像划分和LBP直方图的计算。
2.比较直方图
将输入图像的LBP直方图与预先存储的训练图像的直方图进行比较。通常使用某种形式的距离度量(如欧几里得距离或卡方距离)来评估相似度。
3.识别决策
基于上述的相似度或距离度量,选择最匹配或最接近的训练图像,将其对应的标签作为识别结果。
LBP算法具有旋转不变性,即当图像发生旋转时,LBP值不会发生改变(或在一定程度上保持稳定性)。这使得LBPH算法对于旋转变化具有一定的鲁棒性。
LBP算法主要关注像素之间的相对关系,而不是绝对灰度值。因此,它对于光照变化等灰度变化因素具有一定的鲁棒性。
- import cv2
- import numpy as np
-
- #将人脸图像读入列表
- images=[]
- images.append(cv2.imread("a1.png",cv2.IMREAD_GRAYSCALE))
- images.append(cv2.imread("a2.png",cv2.IMREAD_GRAYSCALE))
- images.append(cv2.imread("b1.png",cv2.IMREAD_GRAYSCALE))
- images.append(cv2.imread("b2.png",cv2.IMREAD_GRAYSCALE))
-
- #标签列表,对应于images列表中的图像,0表示是Andy的图像,1表示是Tony的图像
- labels = [0,0,1,1]
-
- # 读取预测图像
- predict_image=cv2.imread("a3.png",cv2.IMREAD_GRAYSCALE)
-
- # 创建LBPH人脸识别器对象,并设置阈值
- recognizer = cv2.face.LBPHFaceRecognizer_create(threshold = 80)
-
- # 使用训练数据和对应的标签训练识别器
- recognizer.train(images,np.array(labels))#
-
- # 对预测图像进行预测
- label,confidence =recognizer.predict(predict_image)
-
- # 根据预测结果输出标签和置信度
- if label == 0:
- print("对应的标签label=Andy")
- elif label == 1:
- print("对应的标签label=Tony")
- print("置信度confidence=",confidence)
-
-
- #代码运行结果:
- #对应的标签label=Andy
- #置信度confidence= 67.6856704732354

Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。