三维人脸模型的纹理贴图
今天实现了一个从kinect得到的三维人脸模型赋上彩色纹理的工作。实现该功能的思路如下:
首先我们拥有两个资源:1,去噪后的三维人脸模型
2, 同样是从kinect得到的人脸彩色图片
现在要做的是为三维人脸模型中的每个顶点找到他们在彩色纹理图片上的对应像素点及rgb色彩信息。这样我们在用opengl绘制模型的时候只要在指定顶点的三维坐标时同时制定顶点的纹理坐标即可。
那么怎么样才能找到模型上的每个顶点在彩色图片上的像素呢?我们可以用固定鼻尖点的方法来实现。
首先,我们标记下彩色图片上鼻尖上点在图像上的坐标,图像以左上角为原点,本例子中是(358.157,291.093),即为下图中的圆圈的点:
同时,我们也标记出在三维模型中鼻尖的那个顶点,本例子中是第39285号顶点(顶点从1开始编号),如下图:
然后,我们分别手动在3dmax和图片查看器中找出三维人脸和彩色图片中人脸区域的宽度Model_FaceWidth,Model_FaceHeight,Image_FaceWidth,Image_FaceHeight;
这样我们就能够通过下面这个公式计算出所有模型中的点对应的纹理坐标了,公式如下:
model->texcoords[v*2] = (Texture_Centre_x + (mtx-mx)*(Image_FaceWidth/Model_FaceWidth) / FimageWidth;
model->texcoords[v*2+1] = (Texture_Centre_y + -1.0 * (mty-my)*(Image_FaceHeight/Model_FaceHeight)) / FimageHeight;
上述公式中,model->texcoords[v*2]为第v号顶点的纹理坐标的x分量,model->texcoords[v*2+1]为第v号顶点的纹理坐标的y分量;Texture_Centre_x 为纹理图片中鼻尖像素点的x坐标,即 358.157,Texture_Centre_y为纹理图片中鼻尖像素点的y坐标,即
291.093; mtx为第v号顶点的x坐标,mty为第v号顶点的y坐标,mx为模型中鼻尖那个顶点的x坐标,my为模型中鼻尖那个顶点的y坐标。 FimageWidth为纹理图片的宽度,FimageHeight为纹理图片的高度。
上述公式的思想是,分别计算模型中的顶点距离鼻尖顶点在x,y方向上的距离,然后将这个距离按比例(即Image_FaceWidth/Model_FaceWidth和Image_FaceHeight/Model_FaceHeight)放大缩小到纹理图片的坐标空间中,接着将这个距离加上纹理图片中鼻尖像素点的x,y方向上的坐标。这样就得到了模型中的顶点在纹理图片上对应的像素的坐标了。
这里有一点要强调的是:opengl中的纹理坐标范围是在(0,1)之间的,所以我们计算出模型中的顶点在纹理图片上的像素的坐标之后还需要将他们的x,y分量分别除以纹理图片的宽度和高度,以使他们的值处在(0,1)之间。这个问题使我调了好久的代码!
三维人脸模型的纹理贴图相关推荐
- 基于CEM算法的三维人脸模型贴图matlab仿真
目录 1.算法描述 2.仿真效果预览 3.MATLAB部分代码预览 4.完整MATLAB程序 1.算法描述 采用三维人脸贴图算法conformal energy minimization,将二维图片贴 ...
- 【Unity3D】纹理贴图 ( 纹理 Texture 简介 | 为 3D 模型设置纹理贴图 )
文章目录 一.纹理 Texture 简介 二.为 3D 模型设置纹理贴图 一.纹理 Texture 简介 上一篇博客 [Unity3D]材质 Material ( 材质简介 | 创建材质 | 设置材质 ...
- 手把手制作太阳系运行模型,纹理贴图、模型变换、动画、计算机图形学(OpenGL、C++实现、超级详细)
这里写目录标题 一.基本原理 二.代码(完整版本) 2.1 头文件 2.2 mian函数 2.3 OnReshape防止变形函数 2.4 Init初始化函数 2.5 OnTimer函数 2.6 Dra ...
- 图形处理(十三)基于可变形模板的三维人脸重建-学习笔记
基于可变形模板的三维人脸重建-学习笔记 原文地址:http://blog.csdn.net/hjimce/article/details/50331423 作者:hjimce 一.数据库处理: 我们通 ...
- 【蜂口 | AI人工智能】三维人脸重建——龙鹏 深度学习与人脸图像应用连载(十)
本次我们的分享是三维人脸重建问题,我们将从以下几个方面给大家进行分享: 首先,我们对三维人脸重建做一个通用的介绍,并对它的常见的方进行比较详细的介绍. 其次,我们对当前的三维人脸重建中最常用的一个模型 ...
- 【蜂口 | AI人工智能】三维人脸重建——龙鹏 深度学习与人脸图像应用连载(十)...
本次我们的分享是三维人脸重建问题, 我们将从以下几个方面给大家进行分享: 首先,我们对三维人脸重建做一个通用的介绍,并 对它的常见的方进行 比较详细的介绍. 其次,我们对当前的三维人脸重建中最常用的一 ...
- 深度学习教你重建赵丽颖的三维人脸
作者 | 李秋键 出品 | AI科技大本营(ID:rgznai100) 近年来,三维人脸重建成为计算机视觉.图像识别等研究领域中的热点问题.三维人脸重建技术分为基于不同视角的多幅图像的重建和基于单幅图 ...
- 基于VC++的3D地形绘制与纹理贴图
前言 随着地理信息系统产业的发展,三维产品也在生活中处处吸引着我们的眼球.作为数字城市的核心内容,城市模型的构建成为了目前研究的热点.OpenGL是独立于操作系统和硬件环境的三维图形库,其为实现逼真的 ...
- 微软三维人脸重建论文总结——《Accurate 3D Face Reconstruction with Weakly-Supervised Learning》
原作:https://arxiv.org/abs/1903.08527 研究机构:微软研究院 写在前面 想象一下,通过二维的人脸图片,生成高度还原的三维人脸模型.真是异想天开,可是人工智能要做的不就是 ...
最新文章
- Linux shell条件判断if中的-a到-z的意思
- 东莞新能源——业务流程管理实践
- MySQL 深潜 - MDL 锁的实现与获取机制
- 满足StrataFlash嵌入式存储器要求的LDO应用电路
- 10以内逆向运算题_Z3在逆向中运用
- CVPR 2022 论文和开源项目合集
- 此声明没有存储类或类型说明符
- 【图论】最优乘车(最短路变形)
- 信道模型时延和路径增益:cost207,cost2100,cost259,cost273,SCM,I-METRA,WINNER II
- Java实战之管家婆记账系统(24)——项目总结
- Wireshark安装Npcap组件失败的解决方法
- 12,verilog移位操作
- 高颜值免费在线绘图BIC/ImageGP视频介绍
- 2014年中国行地产排行
- python语言中的冒号_「冒号」编程语言中的冒号(:) - seo实验室
- python中flush什么意思_python flush()定义及作用详解(实例分析)
- 【Nessus安装、使用】
- 【okhttp3.OkHttpClient】ClassNotFoundException: okhttp3.OkHttpClient
- “打开方式”中找不到打开某一类型文件想使用的软件
- HTML/CSS常见的几种水平居中、垂直居中、水平垂直居中方法