Git Product home page Git Product logo

3d_face_dense_registration's Introduction

Towards Fine-Grained Optimal 3D Face Dense Registration: An Iterative Dividing and Diffusing Method (IJCV2023)

by Zhenfeng Fan, Silong Peng, and Shihong Xia

Introduction

This repository is built for the official implementation of the paper "Towards Fine-Grained Optimal 3D Face Dense Registration: An Iterative Dividing and Diffusing Method" published at International Journal of Computer Vision in June, 2023. To view the full version of this paper, please visit the website https://doi.org/10.1007/s11263-023-01825-7, which provides the online version.

Abstract

Dense vertex-to-vertex correspondence (i.e. registration) between 3D faces is a fundamental and challenging issue for 3D &2D face analysis. While the sparse landmarks are definite with anatomically ground-truth correspondence, the dense vertex correspondences on most facial regions are unknown. In this view, the current methods commonly result in reasonable but diverse solutions, which deviate from the optimum to the dense registration problem. In this paper, we revisit dense registration by a dimension-degraded problem, i.e. proportional segmentation of a line, and employ an iterative dividing and diffusing method to reach an optimum solution that is robust to different initializations. We formulate a local registration problem for dividing and a linear least-square problem for diffusing, with constraints on fixed features on a 3D facial surface. We further propose a multi-resolution algorithm to accelerate the computational process. The proposed method is linked to a novel local scaling metric, where we illustrate the physical significance as smooth adaptions for local cells of 3D facial shapes. Extensive experiments on public datasets demonstrate the effectiveness of the proposed method in various aspects. Generally, the proposed method leads to not only significantly better representations of 3D facial data, but also coherent local deformations with elegant grid architecture for fine-grained registrations.

Some significant advantages over the existing methods are:

1)The gridded cells of the registered target are divided as similarly as possible referring to a certain template.

2)The landmarks of the deformed template and the target are matched exactly.

3)The surfaces of the deformed template and the target are also adhered to each other tightly to any desired extent.

4)The implementation of the algorithm is very fast, and robust to large expressions and partial target data.

Usage

C++ Single Resolution Version from Scratch (Recommended)

We provide the original C/C++ codes which cover the implementations of the proposed method in its single-resolution version from scratch. The inputs are the template and the raw scanning target data. I suggest that these codes can be compiled with the newest C/C++ environments.

An executable demo of registration process is achieved by running the code:

.\VC++(from scratch)\demo\faceDenseRegistration.exe

A challenging example with large expressions and partial data is shown as follows:

registration_example

C++ Single-and-Multiple-Resolution Version with initializations by the NICP Method

We provide the original verison with C/C++ code, which was compiled with Visual Studio 2015 in our experiments. These codes cover the implementations of the proposed method in both its single-resolution and MR versions. The input targets are initialized by the NICP method (Amberg et al. 2007). I suggest that these codes can be compiled with the newest C/C++ environments.

An executable demo of registration process is achieved by running the code:

.\VC++(with initializations by NICP)\demo\faceDenseRegistration.exe .\plyInput\ .\plyOutput\ 

Dependencies for C++ Versions

the libigl Library

the Intel Math Kernal Library

the Eigen Library (a copy already pasted here)

Matlab Version

We also provide a simple and stand-alone implementation with matlab for a fast understanding of the methods in this paper. The code is tested to be compatible with matlab versions after matlab2016b. Note that the matlab version is less efficient than the original version.

An example of registration process is achieved by running the code:

.\matlab\demo_dense_registration.m

The registration process is shown as follows:

registration_process

It generally leads to coherent local deformations with elegant grid architecture for fine-grained registrations, as

grid_structures

We suggest that it can also be applied to other data that are not limited to faces.

hand_example

Sponsorships

This work is supported in part by the National Key Research and Development Program of China (No. 2022YFF0902302), the National Science Foundation of China (No. 62106250), and China Postdoctoral Science Foundation (No. 2021M703272).

Bibtex

If you find this project helpful to your research, please consider citing:

@article{fan2023towards,
  title={Towards Fine-Grained Optimal 3D Face Dense Registration: An Iterative Dividing and Diffusing Method},
  author={Fan, Zhenfeng and Peng, Silong and Xia, Shihong},
  journal={International Journal of Computer Vision},
  pages={1--21},
  month = {June},
  year={2023},
  publisher={Springer}
}

3d_face_dense_registration's People

Contributors

naughtyzz avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

3d_face_dense_registration's Issues

Question about mkl_pardiso.h

I'm wondering if the mkl_pardiso.h is from the Intel MKL library or is it from Panua Technologies? BTW, if it is from Panua Tech, does it mean that the code can only be supported in Linux?

Having trouble running code in Visual Studio

I just started learning how to code and I'm sorry if these questions are dumb :(
I was running the code in VS and this happened:
image
This is the code where the error occurred (I added std::cout << "correct" << std::endl;: to detect error):
image
Can you hint me on what went wrong?
And for clarification, should I put template.ply here:
image
and put file path here:
image

About run *.exe

Hi, now my computer can use VS2019 to compile and execute the tutorial file in libigl, the simple Eigan3 program (for testing), and the simple MKL program (for testing), respectively.
But I still can't use the *.exe directly. Does it need to be executed in any special way? Or do I need to add certain paths to the system environment variables?

Thanks for your help.

Dose it applicable to arbitrary facial mesh?

I scanned a facial mesh and tried to perform non-rigid registration using your method, but the program throws an exception. I want to know if your method is applicable to arbitrary facial point cloud (or mesh) data or if it requires the vertex count to be the same?

Cannot compile facedenseregister.cpp

Hi, I have some problem with using VS2019 to compile facedenseregister.cpp in VC++(with initializations by NICP).
And my dependencies are all latest version.
Here is the error output:
image
And it also show some warnings about:
image

Would you mind to provide your libigl source code for me?
I can't thank you enough.

How is the weights.txt generated? (For c++ "from scratch" version)

Hello! I just succeeded in running the [VC++(from scratch)], now I want to try my own scanning face mesh data with your excellent work. But I'm confused about how the weights.txt is generated. Could you please tell me how to get this weithts txt file? It seems that there is some kind of operation on geodesic distance to generate the weights.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.