当前位置: 首页 > news >正文

3DMM模型

目录

    • BFM
      • BFM_2009
        • 01_MorphableModel.mat
        • exp_pca.bin
        • topology_info.npy
        • exp_info.npy

BFM

BFM_2009

01_MorphableModel.mat
from scipy.io import loadmat
original_BFM = loadmat("01_MorphableModel.mat")
# dict_keys: ['__header__', '__version__', '__globals__',
#			 'tl',
#			 'shapeMU', 'shapePC', 'shapeEV',
#			 'texMU', 'texPC', 'texEV',
# 			 'segbin', 'segMM', 'segMB']

这个mat文件是通过MATLAB创建的,所有的index都是从1开始,需要特别注意。这个文件里主要存了3DMM mesh的几何(shape)和纹理(tex)相关的PCA参数。
__header__ \text{\_\_header\_\_} __header__: MATLAB 5.0 MAT-file, Platform: GLNX86, Created on: Wed Jul 23 15:09:28 2008
__version__ \text{\_\_version\_\_} __version__: 1.0
__globals__ \text{\_\_globals\_\_} __globals__: []
tl \text{tl} tl: [106466, 3],106466个面片,每个面片的顶点序号。
shapeMU \text{shapeMU} shapeMU:这个字段存的是mean shape。维度 [160470, 1], 53490个3D顶点reshape成了[160470, 1]的维度,数值范围[-114062.2, 131943.88],实际使用时,一般会除以1e5,将单位统一到分米。
shapePC \text{shapePC} shapePC: 这个字段存的是 principle shape components,shape的主成分基。维度[160470, 199],基的维度为199维。数值范围[-0.041886166,0.046161193]。
shapeEV \text{shapeEV} shapeEV: 这个字段存的是shape eigen value,表征shape每个主成分分量的标准差。维度[199, 1], 数值范围[3750.5396, 884336.25]。
texMU \text{texMU} texMU: mean texture,维度[160470, 1],数值范围[14.414997, 239.3551]。
texPC \text{texPC} texPC: principle texture components,维度[160470, 199],数值范围[-0.050797794, 0.055871148]。
texEV \text{texEV} texEV: texture eigen value,维度[199, 1],数值范围[127.32297, 4103.179]。
segbin \text{segbin} segbin:维度[53490, 4],以one-hot的形式定义了每个3D点所属的语义类别,如下图所示总计分为4类。
segMM \text{segMM} segMM: 维度[53490, 53490],稀疏矩阵。
segMB \text{segMB} segMB: 维度[53490, 213960],稀疏矩阵。

shape或者texture的计算公式为:

obj = mu + pc * (coef * ev)

shape还会叠加上表情系数带来的顶点偏移量。因此更具化的计算过程如下:

texture = tex_mu + tex_pc * (tex_coef * tex_ev)
shape = shape_mu + shape_pc * (tex_coef * shape_ev) + exp_pc * (exp_coef * exp_ev)
shape /= 1e5

原生的BFM2009只有shape和texture,没有提供表情相关的PCA参数。表情相关的PCA参数用的是下述的exp_pca.bin

exp_pca.bin

原始的BFM2009模型包含53490个顶点。
CNN-based Real-time Dense Face Reconstruction with Inverse-rendered Photo-realistic Face Images中提供的表情基包含了53215个顶点。真的是说来话长,这里的53215个顶点是借鉴了Face Alignment Across Large Poses: A 3D Solution这篇论文的处理方式,删掉了inner mouth vertices,具体从原始的53490个顶点中取了哪53215个点构成新的mesh,可以看model_info[‘trimIndex’]字段。那又为什么要删掉口腔内部顶点呢?

D3DFaceRecon又在53215的基础上沿着face landmarks裁剪,新的mesh包含35709个顶点。

topology_info.npy
topology = np.load("topology_info.npy", allow_pickle=True).item()
# dict_keys: ['tris', 'vert_tris', 'sub_inds']

这个npy文件定义了顶点数为34650,面片数为68746的 mesh \text{mesh} mesh拓扑结构。
tris \text{tris} tris: [68746, 3],每个面片由3个顶点组成,这个字段存储了68746个面片的每个面片的顶点序号。
vert_tris \text{vert\_tris} vert_tris: [34650, 8], 每个顶点会连接8个三角面片,这字段存储了34650个顶点的每个顶点连接的面片序号,面片从0开始编号。
sub_inds \text{sub\_inds} sub_inds: [34650,], 顶点序号从0开始,排到了53423,但实际只使用了34650个顶点,这个字段存储了这34650个顶点的序号。

这里有个问题, sub_inds \text{sub\_inds} sub_inds最大序号是53423,合计53424个点,01_MorphableModel中定义的mesh是53490个点。少掉的具体是哪66个点?

exp_info.npy
exp_info = np.load("exp_info.npy", allow_pickle=True).item()
# dict_keys: ['mu_exp', 'base_exp', 'sig_exp']

mu_exp \text{mu\_exp} mu_exp:表情均值,维度[103950,],34650个3D点reshape成了[103950,]维度,数值范围[-607.75006, 725.0776]。
base_exp \text{base\_exp} base_exp:表情基,维度[79, 103950], 表情基维度为79维,数值范围[-0.028425552, 0.07618008]。
sig_exp \text{sig\_exp} sig_exp:表情基的方差,维度[79,],数值范围[1587.7286, 285403.94]。

相关文章:

3DMM模型

目录 BFMBFM_200901_MorphableModel.matexp_pca.bintopology_info.npyexp_info.npy BFM BFM_2009 01_MorphableModel.mat from scipy.io import loadmat original_BFM loadmat("01_MorphableModel.mat") # dict_keys: [__header__, __version__, __globals__, # …...

Python 3 使用 write()、writelines() 函数写入文件

1 使用 write() 函数,将字符串(或字节串,仅适用写入二进制文件中)写入文件中。 with open(example.txt,w,encodingutf-8) as f:f.write(春夜喜雨\n)f.write(杜甫 [唐代]\n)f.write(好雨知时节,当春乃发生。\n)f.write(…...

鸿蒙(HarmonyOS)应用开发——管理组件状态

状态管理 在应用中,界面通常都是动态的。 #mermaid-svg-DrPNsglFkyLqn7Lw {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-DrPNsglFkyLqn7Lw .error-icon{fill:#552222;}#mermaid-svg-DrPNsglFkyLqn7Lw …...

倚天屠龙:Github Copilot vs Cursor

武林至尊,宝刀屠龙。号令天下,莫敢不从。倚天不出,谁与争锋! 作为开发人员吃饭的家伙,一款好的开发工具对开发人员的帮助是无法估量的。还记得在学校读书的时候,当时流行CS架构的RAD,Delphi和V…...

【web安全】RCE漏洞原理

前言 菜某的笔记总结,如有错误请指正。 RCE漏洞介绍 简而言之,就是代码中使用了可以把字符串当做代码执行的函数,但是又没有对用户的输入内容做到充分的过滤,导致可以被远程执行一些命令。 RCE漏洞的分类 RCE漏洞分为代码执行…...

EI论文复现:基于组合双向拍卖的共享储能机制研究程序代码!

本程序参考EI期刊论文《基于组合双向拍卖的共享储能机制研究》,文中的组合双向拍卖交易机制较为新颖,本质上属于博弈范畴,共享储能是目前的研究热点,牵涉到共享储能参与者的投标策略和收益函数,文中所提模型可为电力市…...

ThinkPHP 5 中,你可以使用定时任务调度器(TaskScheduler)来执行其他定时任务

在 ThinkPHP 5 中,你可以使用定时任务调度器(TaskScheduler)来执行其他定时任务。以下是一个示例代码,演示如何在一个定时任务中执行另一个定时任务: 首先,你需要创建一个继承自 think\console\Command 的…...

mysql:免费的GUI客户端工具推荐并介绍常用的操作

给大家推荐几个常用的 mysql 数据库客户端 sequel-pro sequel-ace 官网下载地址 免费 sequel-ace 可以理解为 Sequel Pro 的升级版,由于Sequel Pro官方不维护了,特别是对 MySQL 8.0 支持不好,所以现在由社区维护了新分支 sequel-ace&#x…...

[Unity数据管理]自定义菜单创建Unity内部数据表(ScriptableObject)

Unity 在开发的时候如果数据量比较大&#xff0c;或者一部分数据需要存在云端&#xff0c;那么就需要一些数据库 轻量型到大型的包括&#xff1a; 数组-内存存储读取 列表-内存存储读取 List<T> tList new List<T>(); XML-硬盘存储读取 JSON-硬盘存储读取 …...

使用JAVA语言写一个排队叫号的小程序

以下是一个简单的排队叫号的小程序&#xff0c;使用JAVA语言实现。 import java.util.LinkedList; import java.util.Queue; import java.util.Scanner;public class NumberingSystem {public static void main(String[] args) {Queue<String> queue new LinkedList<…...

openGauss学习笔记-140 openGauss 数据库运维-例行维护-例行维护表

文章目录 openGauss学习笔记-140 openGauss 数据库运维-例行维护-例行维护表140.1 相关概念140.2 操作步骤140.3 维护建议 openGauss学习笔记-140 openGauss 数据库运维-例行维护-例行维护表 为了保证数据库的有效运行&#xff0c;数据库必须在插入/删除操作后&#xff0c;基于…...

ubuntu20.04使用LIO-SAM对热室空间进行重建

一、安装LIO-SAM 1.环境配置 默认已经安装过ros sudo apt-get install -y ros-Noetic-navigation sudo apt-get install -y ros-Noetic-robot-localization sudo apt-get install -y ros-Noetic-robot-state-publisher 安装 gtsam(如果是18.04的ubuntu直接按照官网配置&…...

如何选学生用的台灯?眼科专家都说好的学生台灯分享!

根据中国眼健康白皮书显示&#xff0c;我国儿童青少年近视总体发生率为53.6%&#xff0c;由此可见如今青少年学生近视的发病率非常高的&#xff0c;且越来越向低龄化发展&#xff0c;不少还在小学阶段的孩子也存在近视的现象。 而造成这个现象的主要原因就是长时间的用眼导致的…...

Linux4.8、环境变量续

个人主页&#xff1a;Lei宝啊 愿所有美好如期而遇 前言 如果对环境变量没有基本的理解&#xff0c;那么建议先看完这篇文章&#xff1a;环境变量https://blog.csdn.net/m0_74824254/article/details/134661113?spm1001.2014.3001.5501 环境变量与本地变量区别 使用export设…...

PTA 7-231 买文具

某小学要购置文具。批发市场中 A 牌的铅笔卖 5 元一支&#xff0c;C 牌的铅笔卖 2 元一支&#xff0c;D 牌的简易铅笔卖1元2只&#xff08;捆绑销售&#xff0c;只能买偶数只&#xff09;。 如果想用n元买n支笔&#xff0c;问有多少种买法&#xff1f;&#xff08;题目保证 n …...

GPTs每日推荐--生化危机【典藏版】

今天给大家推荐一个游戏性质的GPTs&#xff0c;叫做生化危机典藏版&#xff0c;国内点击可玩。 开篇&#xff1a;玩家从末日中醒来。 选择&#xff1a;玩家会遇到各种资源、任务、剧情&#xff0c;需要自行选择相关的分支剧情&#xff0c;一旦选错&#xff0c;无法重选。 结局…...

jenkins-cicd基础操作

1.先决条件 1.首先我个人势在k8s集群中创建的jenkins,部署方法搭建 k8s部署jenkins-CSDN博客 2.安装指定插件. 1.Gitlab plugin 用于调用gitlab-api的插件 2.Kubernetes plugin jenkins与k8s进行交互的插件,可以用来自动化的构建和部署 3.Build Authorizatio…...

ctfhub技能树_web_信息泄露

目录 二、信息泄露 2.1、目录遍历 2.2、Phpinfo 2.3、备份文件下载 2.3.1、网站源码 2.3.2、bak文件 2.3.3、vim缓存 2.3.4、.DS_Store 2.4、Git泄露 2.4.1、log 2.4.2、stash 2.4.3、index 2.5、SVN泄露 2.6、HG泄露 二、信息泄露 2.1、目录遍历 注&#xff1…...

使用Docker本地部署chatgpt

GitHub上有一个开源的工程ChatGPT-Next-Web&#xff0c;这个工程已经封装好了UI以及和OpenAI的API之间的交互&#xff0c;你要做的事情就是把他部署到本地&#xff0c;并配置好你的OpenAI的sk&#xff0c;然后就可以使用了。那么接下来的文章里&#xff0c;我会手把手教你如何C…...

SpringBoot 集成Netty、WebSocket,5分钟搭建聊天通信系统

文章目录 前言Netty简介使用Netty开发WebSocket应用程序开始项目一、添加依赖二、自定义处理器三、初始化通道加载器四、配置启动器五、添加启动监听器六、启动项目七、演示效果1. 客户端1看到其他客户端上线2. 客户端3收到客户端1发送的消息3. 客户端1收到客户端2下线前言 在…...

Chapter03-Authentication vulnerabilities

文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...

【Python】 -- 趣味代码 - 小恐龙游戏

文章目录 文章目录 00 小恐龙游戏程序设计框架代码结构和功能游戏流程总结01 小恐龙游戏程序设计02 百度网盘地址00 小恐龙游戏程序设计框架 这段代码是一个基于 Pygame 的简易跑酷游戏的完整实现,玩家控制一个角色(龙)躲避障碍物(仙人掌和乌鸦)。以下是代码的详细介绍:…...

synchronized 学习

学习源&#xff1a; https://www.bilibili.com/video/BV1aJ411V763?spm_id_from333.788.videopod.episodes&vd_source32e1c41a9370911ab06d12fbc36c4ebc 1.应用场景 不超卖&#xff0c;也要考虑性能问题&#xff08;场景&#xff09; 2.常见面试问题&#xff1a; sync出…...

docker详细操作--未完待续

docker介绍 docker官网: Docker&#xff1a;加速容器应用程序开发 harbor官网&#xff1a;Harbor - Harbor 中文 使用docker加速器: Docker镜像极速下载服务 - 毫秒镜像 是什么 Docker 是一种开源的容器化平台&#xff0c;用于将应用程序及其依赖项&#xff08;如库、运行时环…...

Redis相关知识总结(缓存雪崩,缓存穿透,缓存击穿,Redis实现分布式锁,如何保持数据库和缓存一致)

文章目录 1.什么是Redis&#xff1f;2.为什么要使用redis作为mysql的缓存&#xff1f;3.什么是缓存雪崩、缓存穿透、缓存击穿&#xff1f;3.1缓存雪崩3.1.1 大量缓存同时过期3.1.2 Redis宕机 3.2 缓存击穿3.3 缓存穿透3.4 总结 4. 数据库和缓存如何保持一致性5. Redis实现分布式…...

多场景 OkHttpClient 管理器 - Android 网络通信解决方案

下面是一个完整的 Android 实现&#xff0c;展示如何创建和管理多个 OkHttpClient 实例&#xff0c;分别用于长连接、普通 HTTP 请求和文件下载场景。 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas…...

智能在线客服平台:数字化时代企业连接用户的 AI 中枢

随着互联网技术的飞速发展&#xff0c;消费者期望能够随时随地与企业进行交流。在线客服平台作为连接企业与客户的重要桥梁&#xff0c;不仅优化了客户体验&#xff0c;还提升了企业的服务效率和市场竞争力。本文将探讨在线客服平台的重要性、技术进展、实际应用&#xff0c;并…...

【算法训练营Day07】字符串part1

文章目录 反转字符串反转字符串II替换数字 反转字符串 题目链接&#xff1a;344. 反转字符串 双指针法&#xff0c;两个指针的元素直接调转即可 class Solution {public void reverseString(char[] s) {int head 0;int end s.length - 1;while(head < end) {char temp …...

Spring Boot+Neo4j知识图谱实战:3步搭建智能关系网络!

一、引言 在数据驱动的背景下&#xff0c;知识图谱凭借其高效的信息组织能力&#xff0c;正逐步成为各行业应用的关键技术。本文聚焦 Spring Boot与Neo4j图数据库的技术结合&#xff0c;探讨知识图谱开发的实现细节&#xff0c;帮助读者掌握该技术栈在实际项目中的落地方法。 …...

【开发技术】.Net使用FFmpeg视频特定帧上绘制内容

目录 一、目的 二、解决方案 2.1 什么是FFmpeg 2.2 FFmpeg主要功能 2.3 使用Xabe.FFmpeg调用FFmpeg功能 2.4 使用 FFmpeg 的 drawbox 滤镜来绘制 ROI 三、总结 一、目的 当前市场上有很多目标检测智能识别的相关算法&#xff0c;当前调用一个医疗行业的AI识别算法后返回…...