3D人脸识别预处理,3D face recognition preprocess
本文由兔崩溃公布http://blog.csdn.net/smartempire/article/details/31373817。
转载请注明出处。howdeshui#163.com
近期在做三维人脸识别相关的东西,在已获取三维数据的情况下进行人脸的识别分割是第一步。本文将介绍预处理内的几个操作,终于给出分割后的三维人脸数据以及经过变换的灰度图像。
作者之前申请了国内的三维人脸数据库都没申请到,FRGC v2库也没有回复,仅仅申请到了一个很小众的库。此库重点是研究有遮挡情况下的三维人脸识别,所以不太符合后面要做表情变化研究。
1、填洞插值操作
扫描得到的数据可能会有一些洞。例如以下图的眼睛眉毛等部分,所以须要採用cubic等方式进行插值,并且脸部会有称为spike的凸起。这个在后面切割出人脸后会进行消除。
须要注意的是,原始数据的x,y轴上的坐标并非等间距的。所以在插值后须要进行重採样,使得x,y轴上为等间距。
原始三维数据
2、图像插值重採样
之所以会有这一步,是由于三维数据经过插值重採样之后与二维图像的像素点已经不是一一相应的关系了,所以为了接下来的人脸区域检測等操作须要类似的重採样。原始图像与插值重採样后的图分别例如以下:
原始RGB图像重採样图像
你可能会问原始图像是彩色的,重採样后为毛变成灰度的了,没办法,RGB图像有三个分量,插值与採样我实在不知道该怎么在三个分量上进行。假设在每一个分量上进行得到的图像简直才不忍赌。
3、鼻尖点检測
这是关键的一步,由于以鼻尖点为中心做80mm的圆球就能将人脸分割出来,所以这一步的准确性非常关键。
在一些论文里是这么做的,将三维数据做横向的切片称为slice,在鼻尖点处的slice基本例如以下图。假设以每一点为圆心做圆。假设圆的半径合适(比方30mm),那么圆心与交点会形成一个三角形并且这个三角形的高(altitude)是最大的。通过这种方式基本能够确定鼻尖点。可是假设仅仅是这么做会发现有些衣服如衣领等会形成误操作。所以能够先在灰度图像上检測人脸区域,在这个区域取slice能够基本消除误測。
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc21hcnRlbXBpcmU=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc21hcnRlbXBpcmU=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="" style="font-family:'Microsoft YaHei'">
鼻尖点检測示意图鼻尖点(图中黑点)
3、提取人脸部分
在第2步得到nose tip 后,以该点做圆球。以80mm(视情况而定)做半径,落在圆球内的三维点即为人脸点。
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc21hcnRlbXBpcmU=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">
4、降噪、去spike操作
Spike主要是一些毛刺。能够定义该点到8-neighbor的距离作为推断根据,假设距离超过某个阈值则能够把该点抹成0然后又一次採样,或者直接抹成8-neighbor的均值或者中值。降噪主要针对脸部凹凸不平的情况,作者測试了中值和均值滤波器,可是效果并不明显,也许是由于前期已经重採样的原因。下图是得到的人脸,貌似和第三部的结果没有差别。
5、姿态矫正
有些人脸可能会有旋转平移的情况。这一步将对姿态进行矫粗方便兴许的ICP等方法的对齐,矫正用到的方法是Hotelling transform。在之前的博文里介绍过了,不再赘述。结果例如以下图,因为博主本来选择的数据就是姿态不明显的,所以矫正的结果并不明显。
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc21hcnRlbXBpcmU=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">
以上就是预处理的几步。没有涉及到复杂的算法实现,仅仅是实现起来比較琐碎,像nose tip的检測要推断圆与slice的交点,要由粗到细的取slice的间隔以节省CPU时间。所以实现起来比較费时。之前上传的人脸识别的demo即使是免费的也还是有人发牢骚。所以本文的MATLAB代码就不再免费发布了。假设有须要能够联系我howdeshui#163.com。
版权声明:本文博客原创文章,博客,未经同意,不得转载。
3D人脸识别预处理,3D face recognition preprocess的更多相关文章
- 项目总结二:人脸识别项目(Face Recognition for the Happy House)
一.人脸验证问题(face verification)与人脸识别问题(face recognition) 1.人脸验证问题(face verification): 输入 ...
- face recognition[翻译][深度人脸识别:综述]
这里翻译下<Deep face recognition: a survey v4>. 1 引言 由于它的非侵入性和自然特征,人脸识别已经成为身份识别中重要的生物认证技术,也已经应用到许多领 ...
- 3D动态人脸识别技术分析——世纪晟人脸识别实现三维人脸建模
- 目录 - 国内3D动态人脸识别现状概况 - 新形势下人脸识别技术发展潜力 - 基于深度学习的3D动态人脸识别技术分析 1. 非线性数据建模方法 2. 基于3D变形模型的人脸建模 - 案例结合——世 ...
- Python的开源人脸识别库:离线识别率高达99.38%
Python的开源人脸识别库:离线识别率高达99.38% github源码:https://github.com/ageitgey/face_recognition#face-recognitio ...
- Python的开源人脸识别库:离线识别率高达99.38%(附源码)
Python的开源人脸识别库:离线识别率高达99.38%(附源码) 转https://cloud.tencent.com/developer/article/1359073 11.11 智慧上云 ...
- ng-深度学习-课程笔记-14: 人脸识别和风格迁移(Week4)
1 什么是人脸识别( what is face recognition ) 在相关文献中经常会提到人脸验证(verification)和人脸识别(recognition). verification就 ...
- paper 50 :人脸识别简史与近期进展
自动人脸识别的经典流程分为三个步骤:人脸检测.面部特征点定位(又称Face Alignment人脸对齐).特征提取与分类器设计.一般而言,狭义的人脸识别指的是"特征提取+分类器"两 ...
- 学习笔记TF058:人脸识别
人脸识别,基于人脸部特征信息识别身份的生物识别技术.摄像机.摄像头采集人脸图像或视频流,自动检测.跟踪图像中人脸,做脸部相关技术处理,人脸检测.人脸关键点检测.人脸验证等.<麻省理工科技评论&g ...
- 基于MTCNN多任务级联卷积神经网络进行的人脸识别 世纪晟人脸检测
神经网络和深度学习目前为处理图像识别的许多问题提供了最佳解决方案,而基于MTCNN(多任务级联卷积神经网络)的人脸检测算法也解决了传统算法对环境要求高.人脸要求高.检测耗时高的弊端. 基于MTCNN多 ...
随机推荐
- 第十九章——使用资源调控器管理资源(2)——使用T-SQL配置资源调控器
原文:第十九章--使用资源调控器管理资源(2)--使用T-SQL配置资源调控器 前言: 在前一章已经演示了如何使用SSMS来配置资源调控器.但是作为DBA,总有需要写脚本的时候,因为它可以重用及扩展. ...
- javascript变量,作用域和内存问题(一)
js对象的引用是很有意思的,引用型对象是不可以直接引用的,我猜测这是原型的来源之一,有大神请详解或斧正. “引用类型的值是保存在内存中的对象.与其他语言不同,JavaScript不允 ...
- Java绘制艺术图形
本例主要是通过使用坐标轴平移,图形旋转和获得随机数等技术来绘制艺术图案.通过重写JPanel类中的paint()方法,并在该方法中使用Graphics2D类中的translate(),setColor ...
- C++生产和使用的临时对象
所谓暂时对象就是一种无名对象. 它的出现假设不在程序猿的预期之下(比如不论什么pass by value操作都会引发copy操作,于是形成一个暂时对象),往往照成效率上的负担. 但有时候能够制造 ...
- Android CTS測试Fail项改动总结(四)
Android5.1上的測试 1.android.security.cts.SELinuxDomainTest# testInitDomain fail 打印的log junit.framework. ...
- 测试数据库sql声明效率
书写sql当被发现的声明.对于所期望的结果通常是更好地执行. 当面对这些实现的时候如何选择它的最好的,相对来说?这导致了这个博客的话题,如何测试sql效率 以下介绍几种sql语句測试效率的方法,大多数 ...
- 随着MapReduce job实现去加重,多种输出文件夹
总结以往的工作中遇到的一个问题. 背景: 操作和维护与scribe从apacheserver一再被推到日志记录,所以在这里ETL处理正在进行的重.有根据业务的输出类型是用于多文件夹一个需求.方便挂分区 ...
- ubuntu安装jdk eclipse mysql等
linux ubuntu下安装java web开发环境,需要安装包: jdk7 eclipse(选择java EE developer) apche-tomcat mysql(workbench可视化 ...
- Oracle数据表被drop后的恢复
对于被drop的表和索引,都会存放在回收站中(所以对于生产的数据库必须设置好回收站功能) 由于本次生成环境在drop掉已有的表后,又一次创建了很多的表,全部直接还原的话会提示原有对象存在,表名反复.当 ...
- 你如何破解后安装PS cs6
至于破解程序猿支持,资源共享是只有更好的,我相信有很多孩子还在用cs5看版本号.假设你想尝试新的版本号PS.但很长一段时间不能找到字的串行数.现在,你如何支付你的序列号和使用永久裂纹PS cs6. 好 ...