人眼定位算法简单概述

2023-11-12

这篇博客只是总结一下人眼定位的方法。
首先人眼定位效果是得到人眼的坐标,即瞳孔的坐标。大体来说人眼定位的方法有两种,第一种是利用人眼的几何特征,灰度特征等通过算法来实现定位,第二种要通过机器学习,其实opencv自带了瞳孔分类器,但我应用起来效果并不是很好。下面主要是讲解一下通过特征定位人眼的一些算法。


以下对每种方法的实验均是利用低分辨率的图片,即是利用普通摄像头获取的图片。

## 基础
进行人眼定位之前首先是要通过人脸分类器得到人脸的图片,然后对人脸图片根据一些先验知识分割出包含人眼区域的图片。这些先验知识可以是人眼在人脸的大概比例等,具体还是看不同图片以及不同的定位需求。

几何特征

几何特征利用的是人眼是圆型的,通过定位圆取圆心得到大致瞳孔位置。
opencv中有霍夫园检测方法可以对图片中的圆进行检测,其主要原理是通过霍夫变换参数空间,霍夫线检测是将图片的坐标空间转换为极坐标参数空间,而霍夫园检测是将图片坐标转换成x,y,r(圆心坐标,半径)的参数空间,霍夫圆检测还利用了霍夫梯度法对圆心进行过滤。

改进

单纯利用霍夫圆检测方法是肯定不能检测到精准的圆心坐标,因为检测出来的目标圆很多,可以对这些目标圆进行过滤。过滤原理:人眼图片经过二值化后的目标区域主要还是人眼的圆形,即可以利用人眼灰度高于皮肤区域灰度的特征。对霍夫圆检测出的目标圆,在二值化图像计算像素值为255或0的(255或0取决于你二值化的方式)比例,比例最高的圆即为待选的目标人眼。

优缺点:

优点精度还行,缺点就是光照影响以及每次都要调节参数来适应不同的图片。
### 灰度特征
灰度特征主要是利用人眼主要颜色比皮肤更深,即灰度值更强。我第一次利用的灰度特征主要是计算人眼图片行灰度和(把每一行像素相加),其中最大的行灰度和就是人眼所在的行坐标,而人眼的列坐标可以通过分割人眼(双眼)图片为左右两张人眼图片,在计算列灰度和得到。不过我当时并没有将人眼图片分割成左右两张图片,从而在计算列时参考某篇论文,尝试把列灰度和曲线拟合成两条高斯曲线,获得每条高斯曲线的x=u的点,但过于复杂没有成功,不过现在想来这种方法太过于复杂。另加快计算速度可以选择跳行计算。

优缺点

精度不错,光照影响还是挺大的,调节参数必须的,戴眼镜干扰很大。

改进

改进的方法其实是利用梯度,眼睛是人眼灰度变换最明显部分,而灰度变换的速率可以用梯度表示,用梯度来确定是比较合适的了,用灰度总有种勉强的感觉。计算方法:首先要将图片和行尺度不变算子做卷积,作用是突出眼部梯度,在计算行梯度和,取最大的行梯度为人眼行坐标。这种效果适应性比较强,而且适用于戴眼镜的情况。但是利用梯度获得列坐标我没有尝试过,因为眼睛区域在行方向是梯度明显的,而在列方面不明显,通过分别计算行列梯度图片可知。目前我主要想要实现的是通过梯度确定的行去精确化霍夫园检测。
###模板匹配
模板匹配是将人眼图片分成左右眼两张图片,分别对两张图片进行模板匹配,首先要求的就是你要有各种各样眼睛不同姿态的模板,用户匹配。没有尝试过,只做过了解。

轮廓

求轮廓是初步学习opencv里的套路了,就是二值化图片,对图片进行找轮廓,对找到的轮廓进行简单的筛选,在求取轮廓的中心即可。这种方法也可行但是需要需要进行滤波处理。

总结

了解以及尝试的方法大概这么几种把,首先每种方法都不是孤立的,应该结合多种方法利用各种特征去做人眼定位。其次在不断探索的过程种,发现自己没有快速建立原型的思维,总是想要寻找一种方法简单而又适应于所有情况,这一点要引起警戒,因为这样浪费时间又消耗自己的心力。不应该纠结于完美的方法,而是快速的实现尽管有缺陷,但是首先到达问题的核心和深度才是最重要的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

人眼定位算法简单概述 的相关文章

  • Flask之methods、url_for进行反解析、request的使用、上传文件、abort函数与自定义异常处理、元组、使用jsonify返回json数据、设置和读取cookie

    Flask利用methods限制访问方式 在flask中 可以使用在路由装饰器中使用methods 访问方式 同一视图中可以同时存在多种访问方式 通过methods限定访问方式 app route post only methods POS
  • docker-py(Docker SDK for Python)使用指南

    文章目录 前言 1 docker客户端 2 docker镜像 3 docker容器 4 使用示例 结束语 前言 本篇博客围绕官方提供的python版的docker Engine API Docker SDK for Python 结合具体示
  • 敏感数据明文传输(密码)

    1 加密过程 加密分为单向和双向 拿登录功能来说 密码的加密发送 双向加密就是可逆的 这边加密 那边解密后跟数据库里的密码比对 单向是不可逆的 这边加密 那边无法解密 比对的方式是从数据库里拿出该用户的密码 进行同样的加密 比对加密后的值是
  • Python 下opencv 应用: 物体数数

    物体数数 物体个数计算 就是计算一个图形中有多少物体 python 下用opencv 打开一个图形文件 图形处理 计算图中物体的个数 除了opencv 要安装好外 还要装好 imutils imutils 的下载和安装在 Python 下应
  • 【深入理解C++】给表达式赋值

    在 C 语言中表达式是不可以被赋值的 但是在 C 中可以 include
  • linux设备驱动之USB主机控制器驱动分析

    inux设备驱动之USB主机控制器驱动分析 本文系本站原创 欢迎转载 转载请注明出处 http ericxiao cublog cn 一 前言 Usb是一个很复杂的系统 在usb2 0规范中 将其定义成了一个分层模型 linux中的代码也是
  • npm安装指定版本的npm、typescript、yarn、lerna并查看版本号+nvm安装切换不同版本node

    nvm安装后 nvm ls列出所有node已安装版本 nvm install 版本号 安装node指定版本 nvm use 版本号 使用 切换 node版本 要使用nvm才能安装npm 先全局卸载 npm uninstall g types
  • 数据库判断

    正确 索引可以加快数据的查找速度 但是会给数据更新带来额外性能消耗 数据库管理系统软件都是基于某种数据模型而设计的 逻辑模型和物理模型都是按照计算机系统的观点对数据建模的 所有教师抽象为一类实体 使用 教师 工号 姓名 性别 表达起来的概念
  • 全连接层

    1 将前一层输出的二维特征图综合起来转化为一维向量 它的每一个节点都与上一层的每个节点连接 2 全连接层的主要作用是将输入图像在经过卷积和池化操作后提取的特征进行压缩 并且根据压缩的特征完成模型的分类功能 在整个卷积神经网络中起到 分类器
  • __attribute__((weak))的使用

    一 背景 我们不确定外部模块是否提供一个函数func 但是我们不得不用这个函数 举个例子 A B两个模块 A模块调用了B模块的函数 但是不确定B模块是否提供了该函数 但是又不得不调用 这个时候在A模块中再申明一个弱符号函数 即用weak 如
  • 浮点精度 加减乘除 原生方法

    关于JavaScript 二进制精度问题 浮点数的计算精度会存在缺失问题 专门去百度了一下解决方案 发现有的不是很全 再不就是在项目里面使用会报错 不支持with用法 等等问题 所以针对这四个方法 自己 写了一下 一般我们是放在utils或
  • Linux 分区扩容

    虚拟机磁盘空间250G 克隆后系统分区空间只有200G 通过resize2fs扩容分区 suer pro 22 244 sudo fdisk l 磁盘 dev sda 268 4 GB 268435456000 字节 524288000 个
  • 【C++】C语言基础部分知识点总结 (指针,函数,内存,关键字,预处理等)(秋招篇)

    文章目录 前言 讲一下32位系统常用数据类型的字节大小 stm32f103为例 讲一些C C 中常见的库 什么是易变变量 代码的转化和构建通常会经历哪几个步骤 预处理 编译 汇编 链接 介绍一下C C 常用的关键字 介绍一些const的使用
  • python 基础绘图(关于随时间序列变动的图的画法)

    画这种图要考虑两点 1 如何生成连续的时间轴 2 如何在图中适当的显示轴标签的样式和数量 import matplotlib pyplot as plt import matplotlib as mpl import numpy as np
  • Collection排序

    使用Collection的sort方法可以对List对象进行排序 其中Record为自己定义的类 包含value index count三个成员变量 ArrayList
  • 记录获取蓝鲸智云token的过程

    一 使用python脚本获取蓝鲸智云token python版本环境 3 11 coding utf 8 import requests def get user token domain user password 模拟用户登录 并返回
  • 判断IP是否能够ping成功

    public bool IsCondtion object condtion CondtionPing vData condtion as CondtionPing int m pingNum 3 if vData null return

随机推荐

  • 操作系统 --- 多线程 Multithreading

    操作系统 多线程 Multi Threading 什么是线程和多线程 进程的缺点 线程 Thread 线程的优点 线程和进程的区别 关于线程的资源 线程独有的资源 线程共享的资源 同步线程和异步线程 Asynchronous thread
  • 物联网采集数据存储到MySQL_物联网中的数据分类、存储与应用

    本文主要介绍物联网的数据从传感器采集 存储到分析处理的过程 数据分类 物联网数据可以分为静态数据和动态数据 静态数据 被测设备地址类 地点 GIS信息 设备名称编号 资产属性相关 设备相关的标签类 设备的规格 静态数据多以结构性 关系型数据
  • 【计算机视觉

    文章目录 一 Mask R CNN 二 Hybrid Task Cascade 三 Cascade Mask R CNN 四 Contour Proposal Network 五 GCNet 六 PANet 七 K Net 八 Center
  • Ubuntu安装“启动引导器”的设备选哪一项,选默认还是选/boot分区?

    如果你要用Ubuntu的引导器代替Windows的引导器 就选 dev sda 如果你要保留Windows的引导器 就选 boot分区 但这样一来 装完Ubuntu重启后 只能启动Windows 还必须在Windows上面安装Easybcd
  • 多元函数的泰勒展开公式

    泰勒定理 泰勒展开是一个很有趣的方法 应该大部分人都看过下面这么一条定理 泰勒定理 若函数f x 在闭区间 a b 上存在直至n阶的连续导函数 在开区间 a b 内存在 n 1 阶导函数 则对任意给定的 x x0 a b x x 0 a
  • CentOS 7系统安装配置图解教程

    操作系统 CentOS 7 3 备注 CentOS 7 x系列只有64位系统 没有32位 生产服务器建议安装CentOS 7 x86 64 Minimal 1611 iso版本 一 安装CentOS 7 3 成功引导系统后 会出现下面的界面
  • Zookeeper安装(服务注册与发现)

    第一步 先准备安装包 这里我推荐在Apache官网下载 Zookeeper下载地址 https archive apache org dist zookeeper zookeeper 3 6 1 https archive apache o
  • c++以空格分开的输入数组_C++处理输入字符串并转为数组的操作

    最近在做题的时候在处理输入时遇到一个令人头疼的问题 今天解决了和大家分享一下 比如题目要求的输入为一行数 数与数之间用空格间隔开 数的个数未知 数也有正有负 11 2 65 7 那么如何把这个输入保存到数组a中 且数组a中的值为a 0 11
  • 4G DTU

    4G DTU是一种可以将RS232 485采集的数据通过3G 4G发送到云端服务器进行数据交互的传输设备 实现串口设备的无线长距离数据传输 进而实现远程数据通信管理 主要应用在远程数据采集和远程控制项目 卓岚的4G DTU分为2种类型 1
  • vue中tree-transfer树形穿梭框的使用

    首先安装插件 npm install el tree transfer save 或者 npm i el tree transfer S 安装 效果图 代码
  • vue点击导航菜单,展示选中样式,菜单路由存在嵌套路由时也可以判断为当前路由

    采用计算属性监听跳转页面后url拼接的路由路径来判断是否在当前页面 包括解决嵌套路由带来的判断干扰 效果图 定义路由 router js import Vue from vue import VueRouter from vue route
  • 睿智的智能优化算法2——遗传算法的python实现

    睿智的智能优化算法2 遗传算法的python实现 什么是遗传算法 求解过程 整体代码分解 1 编码解码部分 2 求取适应度部分 3 自然选择部分 4 组合交叉 5 基因突变 实现代码 GITHUB下载连接 睿智的智能优化算法小课堂再次开课啦
  • LSM6DS3,SO, SPI

    一 LSM6DS3是ST的一款6轴力学传感器 3轴加速度 3轴陀螺仪 特别注意 后缀不一样 功能有很大不一样 有的有OIS功能 有的没有 LSB的意思是最小有效位 为数字输出方式 一般我们可以用mdps LSB来表示灵敏度 8 75 mdp
  • iOS开发Google Protocol Buffer 的解析封装(二)

    为此我封装了一个Google Protocol Buffer的网络解析方法 由于项目时间比较急 我没有写出更好的封装方法 我会继续创作 希望大家的鼓励与支持 PBHttpMethod h 的文件 import
  • Junit mockito 测试Controller层方法有Pageable异常

    1 问题 在使用MockMVC Mockito模拟Service层返回的时候 当我们在Controller层中参数方法调用有Pageable对象的时候 我们会发现 我们没办法生成一个Pageable的对象 会报一个Pageable是一个接口
  • C语言中宏的预编译控制语句#ifndefine、#define和#endif(总结)

    例如 ifndefine 这是 if not defined 的简写 是宏定义的一种 它是可以根据是否已经定义了一个变量来进行分支选择 一般用于调试等等 实际上确切的说这应该是预处理功能中三种 宏定义 文件包含和条件编译 中的第三种 条件编
  • smartGit安装和过期解决

    一 下载安装包 去百度下载 二 安装英文 第三点是中文版本的 2 1 exe安装 解压smartgit win 18 1 5 zip 点击smartgit64 exe安装 2 2 配置 2 3 用户配置 core autocrlf fals
  • python极简循环输出+break和continue

    目录 一 python极简输出 二 break和continue 一 python极简输出 如上图所示 上面只有一个错误答案 我们用排除法知道 错误的是答案B 但这里面有个有趣的答案C 就是 print languages i years
  • 【华为OD机试】查字典 (C++ Python Java)2023 B卷

    时间限制 C C 1秒 其他语言 2秒 空间限制 C C 262144K 其他语言524288K 64bit IO Format lld 语言限定 C clang11 C clang 11 Pascal fpc 3 0 2 Java jav
  • 人眼定位算法简单概述

    这篇博客只是总结一下人眼定位的方法 首先人眼定位效果是得到人眼的坐标 即瞳孔的坐标 大体来说人眼定位的方法有两种 第一种是利用人眼的几何特征 灰度特征等通过算法来实现定位 第二种要通过机器学习 其实opencv自带了瞳孔分类器 但我应用起来