This repository provides a MATLAB implementation of the CVPR 2019 Paper - Combining 3D Morphable Models: A Large scale Face-and-Head Model. It is implemented only till the Regression Matrix Calculation part.
Combining 3D Morphable Models: A Large scale Face-and-Head Model
git clone https://github.com/nabeel3133/combining3Dmorphablemodels.git
- LYHM: Liverpool York Head Model
- After you have acquired LYHM, extract the
lyhmPublic.zip
and go tolyhmPublic/lyhmModels/
, copyLYHM_male.mat
and put it in theRegression Matrix Calculation
folder.
- After you have acquired LYHM, extract the
- BFM09: Basel Face Model 2009
- After you have acquired BFM, extract the BaselFaceModel.tgz and go to "PublicMM1" folder, copy
01_MorphableModel.mat
and put it in theRegression Matrix Calculation
folder.
- After you have acquired BFM, extract the BaselFaceModel.tgz and go to "PublicMM1" folder, copy
In order to run the code, launch MATLAB and follow the steps given below:
- Open the file
Steps1to3.m
located incombining3Dmorphablemodels/Regression Matrix Calculcation
and run it. (Keep in mind that there is a variable namedtotal_heads
on line #7, you can change it to as much head shape parameters you want the regression matrix to learn from). - After it is done executing, open the file
nricp_run.m
located incombining3Dmorphablemodels/Non Rigid Iterative Closest Point (NICP)/nricp-master/demos
and run it. It will saveRegression_Matrix.mat
in the directorycombining3Dmorphablemodels/Regression Matrix Calculcation
.
- In order to get a predicted head of a BFM face, you need to have the .obj file of the BFM face for which you want to predict the head. Make sure to have your .obj file named as
Input_Face.obj
. Locate to the directorycombining3Dmorphablemodels/Prediction
and run the following command:
python head_prediction.py
- In order to generate a random BFM face from BFM model and then predict the head for that randomly generated face, locate to the directory
combining3Dmorphablemodels/Prediction
and run the following command:
python head_prediction_rand_bfm.py
Both of the codes will output a file named Output_Head.obj
located in the same directory. python head_prediction_rand_bfm.py
will also save a file named Input_Face.obj
which will contain the randomly generated BFM face.
If this work is useful for your research or if you use this implementation in your academic projects, please cite the following papers:
@InProceedings{ploumpis2019combining,
author = {Stylianos Ploumpis and Haoyang Wang and Nick Pears and William A. P. Smith and Stefanos Zafeiriou},
title = {Combining 3D Morphable Models: A Large Scale Face-And-Head Model},
booktitle = {The IEEE Conference on Computer Vision and Pattern Recognition (CVPR)},
month = {June},
year = {2019}
}
@InProceedings{amberg2007optimal,
title={Optimal Step Nonrigid ICP Algorithms for Surface Registration},
author={Amberg, Brian and Romdhani, Sami and Vetter, Thomas},
booktitle={Computer Vision and Pattern Recognition, 2007. CVPR'07. IEEE Conference on},
pages={1--8},
year={2007},
organization={IEEE}
}