By: CaesarChang Email: root121toor@gmail.com
老师我先不演示项目,先大题讲下我的项目用到的算法吧
我的项目是基于LBPH算法的人脸识别,
LBPH也就是局部二值编码直方图,获取到图片,对一幅图提取其原始的LBP算子之后, 得到LBP图. 再将一幅图片划分为若干的 子区域 ,对每个子区域内的 每个像素点 都提取LBP特征 ,然后,在每个子区域内建立LBP特征的统计直方图。如此一来,每个子区域,就可以用一个统计直方图来进行描述.
例如:一幅100100像素大小的图片,划分为1010=100个子区域,每个子区域的大小为1010像素;在每个子区域内的每个像素点,提取其LBP特征,然后,建立统计直方图;这样,这幅图片就有1010个子区域,也就有了1010个统计直方图,利用这1010个统计直方图,就可以描述这幅图片了。之后,我们利用各种 相似性 度量函数,就可以判断两幅图像之间的相似性了.
它具有旋转不变性和灰度不变性
其优点是不会受到光照、缩放、旋转和平移的影响.
那接下来我再运行下项目,在根据项目进行每一步的讲解.
先来看下训练图片: #获取当前路径 #打开图片 识别人脸 #将图像转化为数组 #获取每张图片的ID #获取图像数组和ID标签数组 #获取训练对象 #保存文件到yml中
再看下 人脸识别: #加载训练数据集文件 #准备识别的图片 #进行灰度转换(降维) ,灰度的话,就256个维度而已 #选择识别方式 这个是下载OpenCV里面带的 我选择是人脸识别的 #开始识别 灰色图片 #调用recognizer.predict进行人脸识别
train: 就找到他的源码 然后就按我的理解来说就是先 初始化参数,利用label初始化模型标签数组,然后 在计算每个图像的LBP编码图像,然后计算所有像素的LBP编码值, 最后在根据每一个LBP图像计算对应的直方图.然后就得到了yml里面的一些 0 或者非零值.
elbp和spatial_histogram 相似性度量函数 : 求图像中每个位置的8个采样点的值时, 是使用的采样点四个角上相应位置的加权平均值才作为采样点的值.
等价模式类 当某个LBP所对应的循环二进制数从0到1或从1到0最多有两次跳变,该LBP所对应的二进制就称为一个等价模式类
pridict: for循环分别比较query和人脸库直方图数组_histograms中每一个直方图的相似度,并把相似度最小的作为最终结果.