OpenCV 人脸跟踪预习资料

简介

​ OpenCV是一个基于BSD许可开源发行的跨平台计算机视觉库。拥有C++,Python和Java接口,并且支持Windows, Linux, Mac OS, iOS 和 Android系统。实现了图像处理和计算机视觉方面的很多通用算法。

模块 功能
Core 核心基础模块,定义了被所有其他模块和基本数据结构(包括重要的多维数组Mat)使用的基本函数、底层数据结构和算法函数
Imgproc 图像处理模块,包括:滤波、高斯模糊、形态学处理、几何变换、颜色空间转换及直方图计算等
Highgui 高层用户交互模块,包括:GUI、图像与视频I\O等
Video 视频分析,,运动分析及目标跟踪。
Calib3d 3D模块,包括:摄像机标定、立体匹配、3D重建等
Features2d 二维特征检测与描述模块,包括:图像特征检测、描述、匹配等
Objdetect 目标检测模块,如:人脸检测等
MI 机器学习模块,包括:支持向量机、神经网络等
Flann 最近邻开源库。包含一系列查找算法,自动选取最快算法的机制。
Imgcodecs 图像编解码模块,图像文件的读写操作
Photo 图像计算(处理)模块,图像修复及去噪。
Shape 形状匹配算法模块。描述形状、比较形状
Stitching 图像拼接
Superres 超分辨率模块
Videoio 视频读写模块,视频文件包括摄像头的输入。
Videostab 解决拍摄的视频稳定
Dnn 深度神经网络
contrib 可以引入额外模块

LBP

LBP(Local Binary Pattern,局部二值模式)是一种用来描述图像局部纹理特征的算子,具有多分辨率、灰度尺度不变、旋转不变等特性。主要用于特征提取中的纹理提取。

LBP的核心思想就是:以中心像素的灰度值作为阈值,与他的领域相比较得到相对应的二进制码来表示局部纹理特征。

lbp.jpg

基本LBP

原始的LBP算子定义为在3*3的窗口内,处理83这个像素点的lbp值:

​ 将83与包围83的8个位置进行比较。如果大于83则取值为1,否则为0,然后将这些数据顺时针组合在一起,这样的到一个01111100,即:0x7C(124)。这就是83位置的lbp值。顺序并无硬性要求,只要在同一处理中保持相同的顺序即可。提取的LBP算子在每个像素点都可以得到一个LBP值,对一幅图像提取其原始的LBP算子之后,得到的原始LBP特征依然是“一幅图片”(记录的是每个像素点的LBP值)这种图片称之为lbp图谱。

/**
 * 原始lbp:应该是3x3的src(先不管3x3)
 * src: 原图
 * dst: 计算出的lbp图谱
 *
*/
void processLBP(Mat src, Mat &dst){
    // 循环处理图像数据
    for(int i=1; i < src.rows-1;i++) {
        for(int j=1;j < src.cols-1;j++) {
            uchar lbp = 0;
            uchar center = src.at<uchar>(i,j);
            //取出对应 高、宽位置的像素 与 中心点位置进行比较
            if(src.at<uchar>(i-1,j-1)>center) { lbp += 1 << 7;}
            if(src.at<uchar>(i-1,j  )>center) { lbp += 1 << 6;}
            if(src.at<uchar>(i-1,j+1)>center) { lbp += 1 << 5;}
            if(src.at<uchar>(i  ,j+1)>center) { lbp += 1 << 4;}
            if(src.at<uchar>(i+1,j+1)>center) { lbp += 1 << 3;}
            if(src.at<uchar>(i+1,j  )>center) { lbp += 1 << 2;}
            if(src.at<uchar>(i+1,j-1)>center) { lbp += 1 << 1;}
            if(src.at<uchar>(i  ,j-1)>center) { lbp += 1 << 0;}
            dst.at<uchar>(i-1,j-1) = lbp;
        }
    }
}
//读取一张图片
Mat img = imread("/path/x.png");
cvtColor(img, img, COLOR_BGR2GRAY);
//计算lbp图谱
Mat lbp = Mat(img.rows-2, img.cols-2,CV_8UC1);
processLBP(img,lbp);

从lBP定义可以看出LBP是灰度不变的,简单来说就是对图像的灰度值根据一个系数X进行修改,得出的LBP值不变。

圆形LBP

​ 基本的 LBP算子的最大缺陷在于它只覆盖了一个固定3x3范围内的小区域,为了满足不同尺寸的需要,并达到灰度和旋转不变性的要求,对 LBP 算子进行了改进,将 3×3邻域扩展到任意邻域,并用圆形邻域代替了正方形邻域。以某个像素点为中心,以一个任意大小半径R画一个圆,将落在圆内的P个像素与中心点像素比较得到LBP算子。

圆形lbp.png

旋转不变LBP

​ LBP 算子是灰度不变的,但却不是旋转不变的,图像的旋转就会得到不同的 LBP值。

旋转.png

为了解决这个问题,将 LBP算子进行了扩展具有旋转不变性。LBP的旋转不变模式,即不断旋转圆形邻域得到一系列初始定义的 LBP值,取其最小值作为该邻域的 LBP 值。

旋转不变.png

首先获得LBP值为: 11100001 (255),进过旋转分别得到8中不同的LBP值,最终得到的具有旋转不变性的 LBP值为 15。

等价LBP

​ 对于半径为R的圆形区域内含有P个采样点的LBP算子将会产生2^P(0和1的排列组合)种模式。随着邻域集内采样点数的增加,二进制模式的种类是以指数形式增加的。这么多的二进制模式导致在人脸检测时候LBP模式统计直方图过于稀疏(见下面检测原理部分)。因此需要对原始的LBP模式进行降维,也就是减少数据量。

​ 等价模式(均匀模式)就是解决这个问题的。在实际图像中,绝大多数LBP模式最多只包含两次从1到0或从0到1的跳变。因此,等价模式定义为:当某个LBP所对应的循环二进制数从0到1或从1到0最多有两次跳变时,该LBP所对应的二进制就称为一个等价模式类,除等价模式类以外的模式都归为另一类,称为混合模式类。

​ 00000000(0次跳变),00000111(1次从0到1的跳变),10001111(1到0,0到1,两次跳变)是等价模式类。

​ 10010111(共四次跳变)是混合模式类。

​ 通过这样的改进,二进制模式数量由原来的2^P种减少为 P* ( P-1)+2种。

比如:3x3的8采样本来有256种,现在变成58(等价模式)+1种(混合模式)。即本来lbp值为0-255,也就是256种结果,转化为了59种。混合模式编码为0,等价模式根据值大小编码为1—58。

00000000 : 1

00000001 : 2

00000010 : 3

00000101 : 0 (跳变3次)

检测原理

​ 将一幅图片划分为若干的子区域,对每个子区域内的每个像素点都提取LBP特征,然后,在每个子区域内建立LBPH(LBP特征的统计直方图)。 每个子区域就可以用一个统计直方图来进行描述;整个图片就由若干个统计直方图组成 之后,将图片和人脸的直方图进行相似性比较。

直方图:

把图片的亮度分为0到255共256个数值,数值越大,代表的亮度越高。其中0代表纯黑色的最暗区域,255表示最亮的纯白色,而中间的数字就是不同亮度的灰色。用横轴代表0-255的亮度数值。竖轴代表照片中对应亮度的像素数量,这个函数图像就被称为直方图。

简单来说,图像的直方图是用来表现图像中亮度分布的情况,给出的是图像中某个亮度或者某个范围亮度下共有几个像素

直方图.jpg

参考:
https://www.cnblogs.com/nsnow/p/4461998.html
https://www.cnblogs.com/lxy2017/p/3927280.html

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,219评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,363评论 1 293
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,933评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,020评论 0 206
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,400评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,640评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,896评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,597评论 0 199
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,327评论 1 244
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,581评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,072评论 1 261
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,399评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,054评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,083评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,849评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,672评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,585评论 2 270

推荐阅读更多精彩内容