眼球中心定位跟踪算法—eyelike 代码解析
论文及代码地址
原始论文 Accurate eye centre localisation by means of gradients
原始代码 eyelike
代码分析(很久之前写的,排版有点乱,有时间再更新)
Main函数中
face_cascade用于实现人脸捕获
之后是窗口命名。
通过CvCapture将摄像头捕获到的图像传入frame,然后对frame进行分析
进入detectAndDisplay
frame是总的图像.
Faces是在frame基础上得到的人脸区域,vector<Rect>型
通过split函数将frame通道分开,并且取R通道作为灰度图。
face_cascade.detectMultiScale用于检测在此灰度图上面的人脸区域。
对每一个人脸区域均做如下处理:
首先在原图中用矩形标出人脸位置
然后进入findEyes函数 faceROI是灰度图的人脸区域部分,即ROI。
接下来标出眼球所处的区域(此部分为估计区域),以人脸区域为准,按比例估计眼镜区域
cv::Point leftPupil =findEyeCenter(faceROI,leftEyeRegion,"Left Eye");
此语句用于查找眼球的中心,即瞳孔附近。
首先将估计的眼球区域拿出来作为图像命名为eyeROIUnscaled,再改变大小换成较为方形的。
宽度为50,称此图为eyeROI
标记处face上面eye的矩形图
rectangle(face,eye,1234);通过注释此行可以知道原先估计出来的眼睛区域较大,一般都会将眉毛包括进去。
cv::Mat gradientX =computeMatXGradient(eyeROI);
cv::Mat gradientY =computeMatXGradient(eyeROI.t()).t();
cv::Mat mags =matrixMagnitude(gradientX, gradientY);
通过这三个函数来将eyeROI的梯度计算出来,不过这时候的eyeROI已经是变形后的了
double gradientThresh =computeDynamicThreshold(mags, kGradientThreshold);
计算出动态阈值来去除掉较小的部分,以max为基准。
详细来说,将小的部分置为0,大的部分将gradientX和gradientY归一3,而mags不变
之后以5*5的高斯滤波器滤波。
根据eyeROI灰度图的灰度值来为计算出将来要用到的每一个点的附加权重值,命名为weight
然后通过遍历gradientX和gradientY(此时已经成单位值)来寻找可能的中心点。
首先排除gradientX=0以及gradientY=0的点,接下来测试其它点testPossibleCentersFormula
对于每一个不被排除的点(x,y)都进行如下操作:
求出可能点中心点到(x,y)的距离向量,单位化,但mag保持原值。因为这一过程主要测试找到两个向量方向相同的点,所以不必约束其向量大小,重点在单位化后的内积大小。找到最大的意味着找到了方向相同的一系列点。此次最大的内积结果记为dotProduct。将内积结果加上权重后记录于Or中。Or是outSum的指针。
numGradient记录rows*cols。
将outSum变换数据类型成为out。
找出out中最大值以及它的位置分别记为maxVal和maxP
此时设置另外一个阈值,即floodThresh=maxVal * kPostProcessThreshold;
此语句舍弃了97%的点。那些被舍弃的点置0,其他保存
经过floodKillEdges。又去除了一些点。
这时取最大值就认为是eyecenter.
在这里也就是可以总结说:只计算了一次,便将中心点通过两次取最大值得到了。
程序的后半部分便是标记出原图的眼球中心。然后将结果图显示出来。
眼球中心定位跟踪算法—eyelike 代码解析相关推荐
- 眼球中心定位跟踪算法—eyelike
项目介绍 人眼中心定位是一个用于眼部追踪的算法,它来源于github中eyelike项目,C++语言实现,依赖OpenCV库. 关于代码的编译,作者提供了CMakeLists.txt文件,同时支持Wi ...
- dst matlab,DSTcode DST跟踪算法MATLAB代码,复杂环境中仿多目标 实现的单 Other systems 其他 272万源代码下载- www.pudn.com...
文件名称: DSTcode下载 收藏√ [ 5 4 3 2 1 ] 开发工具: matlab 文件大小: 82 KB 上传时间: 2017-03-17 下载次数: 0 提 供 者: Mar ...
- YOLO-V5 算法和代码解析系列 —— 学习路线规划综述
目录标题 为什么学习 YOLO-V5 ? 博客文章列表 面向对象 开源项目学习方法 预备知识 项目目录结构 为什么学习 YOLO-V5 ? 算法性能:与YOLO系列(V1,V2,V3,V4)相比,YO ...
- PPQ库中KLD算法实现代码解析
PPQ量化工具库KLD算法解析 前言 PPQ算法实现 NVIDIA的PPT中KLD算法流程 KLD算法PPQ实现版本 PPQ与NVIDIA的区别: 前言 这是对PPQ库中KLD算法实现代码解析,关于P ...
- Staple目标跟踪算法C++代码测试
一.介绍 Staple综合了局部特征HOG和全局特征颜色直方图用于目标跟踪的算法. 首先作者发现颜色分布不足以将目标和背景区分开来.局部特征这样的模板在应对剧烈形变的时候效果往往很差. 作者针对这两个 ...
- GraphSAGE算法 和 代码解析
聚合邻居 GraphSAGE研究了聚合邻居操作所需的性质,并且提出了几种新的聚合操作(aggregator),需满足如下条件: (1)聚合操作必须要对聚合节点的数量做到自适应.不管节点的邻居数量怎么变 ...
- tdoa/aoa定位的扩展卡尔曼滤波定位算法matlab源码,TDOA/AOA定位的扩展卡尔曼滤波定位跟踪算法Matlab源码...
TDOA/AOA定位是无线定位领域里使用得最多的一种定位体制,扩展卡尔曼滤波器是最经典的非线性滤波算法,可用于目标的定位和动态轨迹跟踪,GreenSim团队实现了该算法,本源码由GreenSim团队原 ...
- KNN 分类算法原理代码解析
作者 | Charmve 来源 | 迈微AI研习社 k-最近邻算法是基于实例的学习方法中最基本的,先介绍基x`于实例学习的相关概念. 基于实例的学习 已知一系列的训练样例,很多学习方法为目标函数建立起 ...
- 对抗样本生成算法复现代码解析:FGSM和DeepFool
参考链接: https://www.jianshu.com/p/72c072551e10 论文地址: FGSM:地址 DeepFool:地址 导入包 import numpy as np import ...
最新文章
- matlab导出jar包错误Error: An error occurred while shelling out to javac(erro code = 1)解决办法...
- codeforces Gym 100338E 	Numbers (贪心,实现)
- OpenCV imgproc直方图的实例(附完整代码)
- springboot快速集成swagger
- python的argsort函数_python——argsort函数
- 《团队激励与沟通》第 5 讲——沟通的技巧 重点部分总结
- sqlserver 2008阻止保存要求重新创建表的更改
- 关于swf转fla 软件的间题
- intel服务器最新主板芯片组,英特尔服务器主板芯片组驱动程序
- 高等数学张宇18讲 第七讲 一元函数积分学的概念与计算
- 室外宽温1口千兆光纤收发器工业导轨式发送机接收机单模单纤单电口
- 数字人实业应用场景,远远不止屏幕互动
- 计算机找不到ie浏览器,IE浏览器不见了怎么办?找回IE浏览器的方法
- cp -r命令 linux什么意思,linux命令 $- 是什么意思
- lokohelp康复机器人_Lokohelp康复机器人在脑卒中偏瘫患者下肢运动功能恢复中的应用...
- [luogu]P1852跳跳棋
- 内存盘 固态硬盘 机械硬盘 速度测试
- HTML5 —新增标签
- python计算长方体体积最简单代码_C语言编程简单的小程序,计算长方体体积!...
- robot-upstart开机自启动