\documentclass[a4paper]{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{graphicx}
\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{amssymb}
\usepackage{color}
\usepackage{array}
\usepackage{caption}
\usepackage[french]{babel}
\usepackage[hidelinks=true]{hyperref}
\usepackage{mathtools}
\usepackage[nottoc, numbib]{tocbibind}
\usepackage{minted}

\renewcommand\thesection{}

\newcommand{\R}{\mathbb{R}}

\usepackage[
    top=1.5cm,
    bottom=1.5cm,
    left=1.5cm,
    right=1.5cm
]{geometry}

\graphicspath{
    {./img/}
}

\setlength{\parskip}{0.2cm}
\setlength{\parindent}{0pt}

\begin{document}

\begin{figure}[t]
\centering
\includegraphics[width=5cm]{inp_n7.png}
\end{figure}

\title{
    \vspace{4cm} 
    \textbf{Compte-rendu 3 de Projet} \\
    Reconnaissance et reconstruction de visages
}
\author{
    Laurent Fainsin \\
    Florian Guilloux \\
    Lisa Larger
}
\date{
    \vspace{7cm}
    Département Sciences du Numérique \\
    Première année \\
    2020 — 2021
}

\maketitle

\newpage

\tableofcontents

\newpage

\section{Question 1}

En utilisant le script matlab\ eigenfaces\_part3.m, on peut ainsi calculer les eigenfaces d'individus masqués et non masqués (en utilisant dans un premier temps la fonction eig):

\begin{figure}[ht!]
    \centering
    \includegraphics[width=16cm]{trim_indiv_nomask.png}
    \caption{Individus (non masqués) utilisés pour la création des eigenfaces \label{indiv_nomask}}
\end{figure}
\begin{figure}[ht!]
    \centering
    \includegraphics[width=16cm]{trim_eigenfaces_nomask.png}
    \caption{Eigenfaces (non masquées) \label{eig_nomask}}
\end{figure}

\newpage

\begin{figure}[ht!]
    \centering
    \includegraphics[width=16cm]{trim_indiv_mask.png}
    \caption{Individus (masqués) utilisés pour la création des eigenfaces \label{indiv_mask}}
\end{figure}
\begin{figure}[ht!]
    \centering
    \includegraphics[width=16cm]{trim_eigenfaces_mask.png}
    \caption{Eigenfaces (masquées) \label{eig_mask}}
\end{figure}

\newpage

On peut de même si l'on le souhaite utiliser les fonctions que nous avons créées lors de la partie 2 du projet à la place de eig. On retrouve ainsi les mêmes eigenfaces, à l'exception de certaines dont les niveaux de gris sont inversés.

\begin{figure}[ht!]
    \centering
    \includegraphics[width=16cm]{trim_eigenfaces_nomask_subspace.png}
    \caption{Eigenfaces (non masquées) générées par subspace iteration \label{eig_nomask_sub}}
\end{figure}
\begin{figure}[ht!]
    \centering
    \includegraphics[width=16cm]{trim_eigenfaces_mask_subspace.png}
    \caption{Eigenfaces (masquées) générées par subspace iteration \label{eig_mask_sub}}
\end{figure}

\newpage

\section{Question 2}

À partir de ces eigenfaces on peut tracer la représentation des images dans la base des composantes principales. Ici pour des raisons évidentes de visualisation, seules les deux premières composantes sont utilisées.

\begin{figure}[ht!]
    \centering
    \includegraphics[width=16cm]{trim_cluster_nomask.png}
    \caption{ACP 2D des individus (non masqués) \label{cluster_nomask}}
\end{figure}
\begin{figure}[ht!]
    \centering
    \includegraphics[width=16cm]{trim_cluster_mask.png}
    \caption{ACP 2D des individus (masqués) \label{cluster_mask}}
\end{figure}

\newpage

Cependant, on observe en traçant les contrastes de nos valeurs propres, que les deux premières dimensions regroupent 43\% de l'information dans nos images. Ainsi si l'on souhaite par exemple 95\% de l'information, il faudrait utiliser 12 composantes. Or un tracé en 12D est plutôt complexe à réaliser.

\begin{figure}[ht!]
    \centering
    \includegraphics[width=16cm]{trim_contrast_nomask.png}
    \caption{Contraste des eigenvalues (non masquées) \label{contrast_nomask}}
\end{figure}
\begin{figure}[ht!]
    \centering
    \includegraphics[width=16cm]{trim_contrast_mask.png}
    \caption{Contraste des eigenvalues (masquées) \label{contrast_mask}}
\end{figure}

\newpage

Voici tout de même deux figures représentant nos données dans les trois premières composantes principales. Nous invitons le lecteur à utiliser les scripts fournis pour tracer et explorer lui-même ces figures 3D.

\begin{figure}[ht!]
    \centering
    \includegraphics[width=19cm]{trim_cluster_nomask_3D.png}
    \caption{ACP 3D des individus (non masqués) \label{cluster_nomask_3D}}
\end{figure}
\begin{figure}[ht!]
    \centering
    \includegraphics[width=19cm]{trim_cluster_mask_3D.png}
    \caption{ACP 3D des individus (masqués) \label{cluster_mask_3D}}
\end{figure}

\newpage

\section{Question 3}

En utilisant la méthode du 1 plus proche voisin, il est ainsi facile de classifier une nouvelle image, il suffit de la centrer, de la projeter sur les axes principaux et de trouver le point (associé à une image projetée) le plus proche de la projection. L'image de test est représentée sur la figure \ref{cluster_nomask_reconst} par une croix verte et reliée à son plus proche voisin par une ligne bleue.

\begin{figure}[ht!]
    \centering
    \includegraphics[width=14.5cm]{trim_indiv_reco_nomask.png}
    \caption{Plus proche voisin (non masqué) \label{indiv_nomask_reconst}}
\end{figure}
\begin{figure}[ht!]
    \centering
    \hspace*{-1.8cm}
    \includegraphics[width=16cm]{trim_cluster_reco_nomask.png}
    \caption{ACP de l'individu de test (non masqué) \label{cluster_nomask_reconst}}
\end{figure}

\newpage

Pour reconnaitre un individu masqué, seuls les images et notre modèle (nos eigenfaces) changent dans la méthode précédente, on obtient donc:

\begin{figure}[ht!]
    \centering
    \includegraphics[width=16cm]{trim_indiv_reco_mask.png}
    \caption{Plus proche voisin (masqué) \label{indiv_mask_reconst}}
\end{figure}
\begin{figure}[ht!]
    \centering
    \hspace*{-1.8cm}
    \includegraphics[width=16cm]{trim_cluster_reco_mask.png}
    \caption{ACP de l'individu de test (masqué) \label{cluster_mask_reconst}}
\end{figure}

\newpage

\section{Question 4}

Finalement en utilisant l'image du plus proche voisin on peut ainsi essayer de reconstituer le visage de notre individu de test. On obtient généralement des résultats satisfaisant (et parfois très cursed).

\begin{figure}[ht!]
    \centering
    \includegraphics[width=18cm]{trim_indiv_reco_predi.png}
    \caption{Reconstitution de l'individu de test \label{indiv_reconst}}
\end{figure}
\begin{figure}[ht!]
    \centering
    \hspace*{-1.8cm}
    \includegraphics[width=16cm]{trim_cluster_reco_predi.png}
    \caption{ACP de l'individu de test (masqué) \label{cluster_reconst}}
\end{figure}

\newpage

\section{Question 5}

Pour s'assurer que nous avons une reconstruction correcte de notre individu, on peut projeter l'image reconstruite sur les composantes principales et observer si l'image reconstituée est proche (ou non) de l'image non masquée d'origine.

\begin{figure}[ht!]
    \centering
    \includegraphics[width=19cm]{trim_cluster_reco_eval.png}
    \caption{Évaluation de la reconstitution par ACP \label{eval_reconst}}
\end{figure}

Au vue de la figure \ref{eval_reconst} l'évalution semble mauvaise, mais n'est tracé ici que les deux premières composantes principales. En effet, dans une dimension supérieure à 2, les deux points sont plus proches, on peut l'observer légèrement en traçant le cluster en 3D.
Cette observation rejoint alors la question 3.3, puisque l'efficacité de cette évaluation dépend des paramètres que nous choisissons. Ici le paramètre le plus important est probablement le nombre de composantes à prendre en compte pour la sélection du plus proche voisin, ainsi que la norme choisie pour calculer la distance aux voisins.
\end{document}