【计算机视觉基础】如何通过BFM模型得到人脸关键特征点的信息 BFM使用 - 获取平均脸模型的68个特征点坐标

前言

本文介绍BFM模型,从中提取68个关键特征点对应的立体信息以及可视化。

code

BFMpath = '01_MorphableModel.mat';
BFM = load(BFMpath);

landmarkpath = 'Landmarks68_BFM.anl';
%landmarkpath = 'Landmarks21_BFM.anl';
idx = readLandmarks(landmarkpath);

vertices = double(reshape(BFM.shapeMU,3,length(BFM.shapeMU)/3)');
faces = BFM.tl;

showLandmarks(vertices,faces,idx);
%
shapeMU = BFM.shapeMU;
shape = reshape(shapeMU, 3, 53490);
shape = shape.';
x = shape(:, 1);
y = shape(:, 2);
z = shape(:, 3);
figure
scatter3(x, y, z, 1, 'filled');
hold on
landmarks3d = zeros(68, 3);
for i =1 : 68
  scatter3(x(idx(i), y(idx(i)), z(idx(i)), 10, 'r');
  text(double(x(idx(i))), double(y(idx(i))), double(z(idx(i))), int2str(i));
  landmarks3d(i, :) = [x(idx(i), y(idx(i), z(idx(i))]; 
end
save landmarks3d landmarks3d
ld3d = landmarks3d/100.0;

在matlab中通过三维旋转可以查看三维图像各个角度的立体信息。

参考

1. BFM使用 - 获取平均脸模型的68个特征点坐标

2. github_BFMLandmarks

3. BFM模型介绍及可视化实现(C++)

猜你喜欢

转载自www.cnblogs.com/happyamyhope/p/12411206.html