C++, Python あたりで顔メッシュ処理のメモ

## 背景

顔形状のリトポや fitting や non-rigid ICP とかを C++ or Python(numpy) でしたい.

## ビューア

* meshlab http://www.meshlab.net/ .obj のビューア兼いくらかメッシュ処理(リダクションとか)ができます. Win, macOS, Linux で動いて, Ubuntu だと apt などで入るのでビューアとして便利ですが, 開発者が去ったのか 2016 年で開発は止まっている & 形状処理系のフィルタを走らせると高確率で落ちるという欠点があります.

## ツール

### Graphite 

http://alice.loria.fr/index.php?option=com_content&view=article&id=22

最新版(?) 1.x だと, imgui で書き直されています.
リメッシュ, UV atlas 生成などあります.

<blockquote class="twitter-tweet"><p lang="en" dir="ltr">graphite3-1.7.3 <a href="https://twitter.com/hashtag/3D?src=hash&amp;ref_src=twsrc%5Etfw">#3D</a> <a href="https://twitter.com/hashtag/graphics?src=hash&amp;ref_src=twsrc%5Etfw">#graphics</a> <a href="https://twitter.com/hashtag/programming?src=hash&amp;ref_src=twsrc%5Etfw">#programming</a> is out<br>Dowload: <a href="https://t.co/sWpQyphdDI">https://t.co/sWpQyphdDI</a><br>Documentation: <a href="https://t.co/XKNAFjOuTS">https://t.co/XKNAFjOuTS</a><br>New in this version: better integration of XATLAS, improved gui, many bugfixes, full Linux/Windows/Mac portability. <a href="https://t.co/AIUrEStS5F">pic.twitter.com/AIUrEStS5F</a></p>&mdash; Bruno Levy (@BrunoLevy01) <a href="https://twitter.com/BrunoLevy01/status/1205228282154758155?ref_src=twsrc%5Etfw">December 12, 2019</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script> 

### Maya 2020

https://area.autodesk.com/blogs/the-maya-blog/introducing-maya-2020/

remesh, retopo 機能がつきました.

### Blender 2.8x

2.81 あたりでリトポ機能付くっぽい?

https://docs.blender.org/manual/en/latest/modeling/meshes/editing/retopology.html

## ライブラリ

* libigl : https://libigl.github.io/ C++ ヘッダーオンリーで使えます. 形状処理研究者御用達.
* CGAL : https://www.cgal.org/ CAD/CAM 系の印象が強かったですが, 最近は顔メッシュ(softbody)に使える機能があるようですね. コンパイルがめんどいイメージです(Ubuntu だと apt で入ったような?)
* OpenMesh : https://www.openmesh.org/
* mempo : mempo.org 顔アルゴリズムライブラリ. 基本は 2D 系

### 形状復元とか

FLAME

http://flame.is.tue.mpg.de/

4D scan から形状復元. github に TensorFlow 実装あり.

https://github.com/TimoBolkart/TF_FLAME

RingNet

https://github.com/soubhiksanyal/RingNet

FLAME ベース?

## non-rigid ICP, non-rigid surface registration

顔形状処理で有名な Hao Li 先生の non-rigid surface registration の講義資料があります. ありがとうございます.

Introduction to Non-Rigid Registration
http://www.hao-li.com/teaching/geometricComputingSeminar/IntroductionToNonRigidRegistration.pdf

github でのコードとか...

* https://github.com/charlienash/nricp
* https://github.com/Tonsty/surfaceRegistration
* https://github.com/rishabh-battulwar/Global-Non-Rigid-ICP 

### 論文

Statistical non-rigid ICP algorithm and its application to 3D face alignment
https://ibug.doc.ic.ac.uk/media/uploads/documents/statistical_non_rigid_icp.pdf

Non-rigid 3D Shape Registration using an Adaptive Template
http://openaccess.thecvf.com/content_ECCVW_2018/papers/11132/Dai_Non-rigid_3D_Shape_Registration_using_an_Adaptive_Template_ECCVW_2018_paper.pdf

Non-iterative rigid 2D/3D point-set registration
using semidefinite programming
https://arxiv.org/pdf/1501.00630.pdf

Global Hybrid Registration for 3D Constructed Surfaces using
Ray-casting and Improved Self Adaptive Differential Evolution
Algorithm
https://pdfs.semanticscholar.org/1f09/94cd62bcedad89b637aa6ec99f23d9942d1a.pdf

The Menpo Benchmark for Multi-pose 2D and 3D Facial Landmark Localisation and Tracking
https://link.springer.com/article/10.1007%2Fs11263-018-1134-y
https://github.com/jiankangdeng/MenpoBenchmark

## アルゴリズム論文

顔フィッティング用

Extended coherent point drift algorithm with correspondence priors and optimal subsampling
https://www.semanticscholar.org/paper/Extended-coherent-point-drift-algorithm-with-priors-Golyanik-Taetz/b9600cb663b779735b5bb50a20ea5cce4c63c945

### 解説とか


https://allthingsphi.com/blog/2016/12/11/optimal-step-nonrigid-icp-algorithms-for-surface-registration.html


https://siavashk.github.io/2017/05/14/coherent-point-drift/