diff --git a/docs/slides.md b/docs/slides.md index b6461fa..0baf925 100644 --- a/docs/slides.md +++ b/docs/slides.md @@ -20,81 +20,116 @@ title: Bureau d'étude de PI3D --- -## Exemple Level sets 2D +## Plan du BE + +
+ +- Définitions +- L'idée générale +- Hyposthèses +- L'algorithme +- Résultats + +
+ + + +--- + +## Définition +### Level sets + + + +$\mathcal{V} = \{ \textbf{Q} = (X, Y) \in \mathbb{R}^2, u(\textbf{Q}) > s \}, \quad s\in [0,1], \quad u \colon \mathbb{R}^2 \to [0, 1]$ - - ---- - -## Définition du Level sets (2D) - - - - - - -$\mathcal{V}_t = \{ \textbf{Q} = (X, Y) \in \mathbb{R}^2, u(\textbf{Q}) > t \}, \quad t\in [0,1], \quad u \colon \mathbb{R}^2 \to [0, 1]$ - -Wikipedia - - --- -## Exemple Level sets 3D +### Exemple Level sets 3D - +
+ +
+ +
Marching cubes
+
+
--- -## Évolution de $u_t$ +## Définition +### Multi-view Stereo - + + +Concurrent Stereo Reconstruction, Martin R. Oswald, 2007 + + + +--- + +## L'idée générale +### Évolution de $u$ + + Variational principles, surface evolution, PDEs, level set methods, and the stereo problem - Olivier Faugeras, Renaud Keriven, 1998 --- -## Évolution de $u_t$ +## L'idée générale +### Évolution de $u$ - + Variational principles, surface evolution, PDEs, level set methods, and the stereo problem - Olivier Faugeras, Renaud Keriven, 1998 @@ -104,35 +139,10 @@ changement de topologie du level set --- -## Évolution de $u_t$ +## Hypothèses +### Discrétisation de l'espace - - -Variational principles, surface evolution, PDEs, level set methods, and the stereo problem - Olivier Faugeras, Renaud Keriven, 1998 - ---- - -## Plan du BE - -
- -- Discrétisation de l'espace -- Initialisation du volume -- Mise à jour du volume -- Résultats - -
- - - ---- - -## Discrétisation de l'espace
Simplification du problème - - + -$\mathbb{R}^3 \to \mathbb{V} \newline \implies \mathcal{V} = \{ \textbf{v} = (x, y, z) \in \mathbb{V}, u(\textbf{v}) > 0 \}, \quad u \colon \mathbb{V} \to \{0, 1\}$ +### Binarisation du levelset +$\mathbb{R}^3 \to \mathbb{V} \newline \implies \mathcal{V} = \{ \textbf{v} = (x, y, z) \in \mathbb{V}, u(\textbf{v}) > 0 \}, \quad u \colon \mathbb{V} \to \{0, 1\}$ Wikipedia @@ -155,7 +166,8 @@ Et donc t on va aussi le définir égal à 0. --- -## Initialisation du volume +## L'algorithme +### Initialisation du volume - Définition des bornes de notre grille de voxels: - $x \in \llbracket x_{\min}, x_{\max} \rrbracket$ @@ -175,6 +187,57 @@ Comme on l'a vu dans les exemple de Faugeras, il nous faut un u_0 initial (le co --- +## L'algorithme +### Principe du Shape from Silhouette + + + +Implementation of a Shadow Carving System for Shape Capture, doi: 10.1109/TDPVT.2002.1024034 + + + +--- + +### Shape from Silhouette 3D + +
+ + +
+ + + +--- + +## L'algorithme +### Lancer de rayon (Fast Voxel Intersect) + +
+ + + + +
+ +--- + +### Shape from Silhouette 2D + + + + +--- + ## Mise à jour du volume @@ -191,91 +254,42 @@ Comme on l'a vu dans les exemple de Faugeras, il nous faut un u_0 initial (le co --- -## Principe du Shape from Silhouette - - - -Implementation of a Shadow Carving System for Shape Capture, doi: 10.1109/TDPVT.2002.1024034 - - - ---- - -## Shape from Silhouette 3D - - - - - ---- - -## Résultat Shape from Silhouette 3D - - - - - ---- - -## Shape from Silhouette 2D - - - - ---- - -## Résultat Shape from Silhouette 2D - - - ---- - -## Lancer
de rayon - - - ---- - -## Lancer
de rayon - - - ---- - -## Lancer
de rayon - - - ---- - -## Lancer
de rayon - - - ---- - ## Itération du Level Set
- - + +
--- -## Résultats (TODO) +## Résultats +### L'environnement - + + + + +--- + +## Résultats +### Les données + + + + + + + + + + +--- + +## Résultats +### L'initialisation (Shape from Silhouette) + + --- @@ -286,5 +300,6 @@ nuage de voxel. si nuage de points -> conversion en mesh possible grace aux marc - Réalisation du SfS en 2D/3D - Réalisation du MVS par level sets en 2D avec utilisation du SfS - Résultat en 3D ? +- Passer en continu au lieu de binaire diff --git a/src/draw.py b/src/draw.py index 261ba38..10d51fe 100644 --- a/src/draw.py +++ b/src/draw.py @@ -58,7 +58,8 @@ for i in range(nb_cams): plt.xlim(-7, 7) plt.ylim(-7, 7) plt.axis("equal") -plt.savefig("data/peanut/peanut.png", dpi=300, +plt.axis("off") +plt.savefig("data/peanut/peanut_cams.png", dpi=300, bbox_inches="tight", pad_inches=0, transparent=True) plt.close() diff --git a/src/sfs2d.py b/src/sfs2d.py index a954d2f..aaeeb47 100644 --- a/src/sfs2d.py +++ b/src/sfs2d.py @@ -112,6 +112,7 @@ Z = Z.T plt.figure() plt.axis("equal") +plt.axis("off") plot_voxels(Z, "#fff", 1.0, True) plot_voxels(voxel, "#00f", 0.5, False) for i in range(nb_frame): @@ -233,7 +234,7 @@ for p in range(11): occurences = [[x, values.count(x)] for x in set(values)] occurences = sorted(occurences, key=lambda x: x[1], reverse=True) - if occurences[0][1] >= len(values) * 0.68: + if occurences[0][1] >= len(values) * 0.7: voxel_[i, j] = 1 color = "#0f0" else: @@ -258,13 +259,13 @@ for p in range(11): voxel = voxel_ - plt.savefig(f"evol{p}.png", dpi=300, bbox_inches="tight", pad_inches=0, transparent=True) + plt.savefig(f"evol{p:02}.png", dpi=300, bbox_inches="tight", pad_inches=0, transparent=True) plt.figure() plt.axis("equal") plot_voxels(Z, "#fff", 1.0, True) plot_voxels(voxel, "#00f", 0.5, False) - plt.savefig(f"shape{p}.png", dpi=300, bbox_inches="tight", pad_inches=0, transparent=True) + plt.savefig(f"shape{p:02}.png", dpi=300, bbox_inches="tight", pad_inches=0, transparent=True) plt.close("all") # plt.show()