首页 技术 正文
技术 2022年11月9日
0 收藏 375 点赞 4,111 浏览 1793 个字

使用版本:2009

数据说明网址:https://faces.dmi.unibas.ch/bfm/index.php?nav=1-1-0&id=details

数据下载网址:https://faces.dmi.unibas.ch/bfm/index.php?nav=1-2&id=downloads

使用Matlab导入01_MorphableModel.mat

load('解压目录\01_MorphableModel.mat')

160470=53490*3,即形状(Shape)\(S=(x_1, y_1, z_1, …, x_n, y_n, z_n)\)

包含内容:

  • segbin:猜是segment binary,用热点法标注属于面部哪一部分。

  • shapeEV:形状方差;
  • shapeMU(160470*1):平均形状;
  • shapePC:形状的主成分;
  • texEV:纹理方差;
  • texMU:平均纹理
  • texPC:纹理的主成分;

新建一个Matlab脚本,输入如下代码:

shape = reshape(shapeMU, 3, 53490)
shape = shape.'
x = shape(:, 1)
y = shape(:, 2)
z = shape(:, 3)
scatter3(x,y,z, 1, 'filled');

该代码将原本一行的形状向量转换为n*3的矩阵,然后将其在三维坐标系下画出来,我们可以看到显示如图人脸。

官方提供的landmark对应关系格式如下(Farkas_face05.fp):

# Feature Points
# Filename: /net/faces/projects/model200/fps/new_farkas/face05_farkas.fp
# Format: (vertex_nr) (x y z) (x y) (name)
19963 -88262.2 36394.8 -4947.64 0 0 sa
20205 -71257.4 -20598.4 13258.3 0 0 sba
21629 -77516 30127.9 12058.9 0 0 pra
...

因此我们通过一个python脚本读取其中的三维点信息并保存到mat矩阵当中:

import scipy.io as scio
file = open("Farkas_face05.fp")
landmarks = []
while True:
line = file.readline()
if not line:
break
if line[0] < '0' or line[0] > '9':
continue
args = line.split()
coord = [float(args[1]), float(args[2]), float(args[3])]   
landmarks.append(coord)
scio.savemat('landmarks.mat', {'landmarks': landmarks})

随后从Matlab中读取这个mat文件,并进行打印:

scatter3(x,y,z,2, 'filled');
hold on;
for i = 1:70
    scatter3(landmarks(i,1), landmarks(i,2), landmarks(i,3),10, 'r');
end

显示效果图如下

因为我们最终想通过与dlib提供的68个点进行拟合,因此不能使用这种方法得到的特征点。

这边找到了Github上有人提供的68个特征点在BFM上的对应关系:https://github.com/anilbas/BFMLandmarks

我们将其中的Landmarks68_BFM.anl文件内的68个下标导入Matlab然后更新代码:

% tmp存储了Landmarks68_BFM.anl中的68个下标
scatter3(x,y,z,2, 'filled');
hold on;
for i = 1:68
    scatter3(x(tmp(i)), y(tmp(i)), z(tmp(i)),10, 'r');
end

显示结果如下:

这便是我们想要得到的68个点,最后我们把这68个点的坐标导出到本地:

landmarks = zeros(68,3);
for i = 1:68
    landmarks(i, :) = [x(tmp(i)), y(tmp(i)), z(tmp(i))];
end
save landmarks landmarks

这样我们就可以在后续的代码中通过导入landmarks.mat来获取标准脸的68位特征点坐标了。

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,129
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,601
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,444
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,218
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,852
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,940