diff --git a/453-Traitement_Image/Cours/chap1.tex b/453-Traitement_Image/Cours/chap1.tex index be5485a..2f656e3 100644 --- a/453-Traitement_Image/Cours/chap1.tex +++ b/453-Traitement_Image/Cours/chap1.tex @@ -2,10 +2,16 @@ \begin{document} \section{Introduction} \subsection{Domaines d'applications} -Refaire le graphe stylé en TikZ +% Refaire le graphe stylé en TikZ % \begin{figure}[H] % \centering +% \definecolor{phy}{RGB}{153,132,30} +% \definecolor{algo}{RGB}{143,139,72} +% \definecolor{appstat}{RGB}{128,0,0} +% \definecolor{opti}{RGB}{30,132,153} +% \definecolor{vrob}{RGB}{102,102,255} + % \begin{tikzpicture} % \tikzset{every node/.append style={scale=0.5}} % \path[mindmap,concept color=green!50!black, text=white, @@ -13,7 +19,7 @@ Refaire le graphe stylé en TikZ % level 2/.append style={level distance=1.5cm}] % node[concept](TI) at (0,0){Traitement D'image} -% child[grow = 90, concept color = green!75!black]{ +% child[grow = 90, concept color = green!75!red]{ % node[concept](ImMed){Imagerie Médicale}[clockwise from = -60] % child{node[concept](seg) {Segmentation}} % child{node[concept](therapie){Therapie}} @@ -22,7 +28,7 @@ Refaire le graphe stylé en TikZ % child{node[concept](Recal){Recalage}} % child{node[concept](Rec3D){Reconstruction 3D}} % } -% child[grow = 0,level distance=5cm, concept color = violet]{ +% child[grow = 0,level distance=5cm, concept color=vrob]{ % node[concept](VRob){Vision Robotique} % child[grow=90]{node[concept](Carto) {Cartographie}} % child[grow=0]{node[concept](Ass){Assistance}} @@ -39,39 +45,38 @@ Refaire le graphe stylé en TikZ % child[grow=180]{node[concept](prev) {Prévisions}} % child[grow=90]{node[concept](Surv){Surveillance}} % }; -% \path[mindmap,concept color=brown!80!white!60!green, text=white] -% node[concept](Phy) at (-6,4){Physique}; -% \path[mindmap,concept color=blue!80!white!60!green, text=white] -% node[concept](Algo) at (-6,-4){Algorithmique}; -% \path[mindmap,concept color=brown!80!black, text=white] -% node[concept](AppStat) at (6,-4){Apprentissage Statistique}; -% \path[mindmap,concept color=blue!80!white!60!green, text=white] -% node[concept](Opti) at (6,4){Optimisation}; +% \path[mindmap,concept color=phy, text=white] +% node[concept](Phy) at (-8,4){Physique}; +% \path[mindmap,concept color=algo, text=white] +% node[concept](Algo) at (-8,-4){Algorithmique}; +% \path[mindmap,concept color=appstat, text=white] +% node[concept](AppStat) at (8,-4){Apprentissage Statistique}; +% \path[mindmap,concept color=opti, text=white] +% node[concept](Opti) at (8,4){Optimisation}; % \begin{pgfonlayer}{background} -% \draw (Phy) to[circle connection bar] (ImSat); -% \draw (Algo) to[circle connection bar] (ImMed); -% \draw (Algo) to[circle connection bar] (Index); -% \draw (Phy) to[circle connection bar] (ImMed); -% \draw (Opti) to[circle connection bar] (ImMed); -% \draw (Opti) to[circle connection bar] (VRob); -% \draw (AppStat) to[circle connection bar] (VRob); -% \draw (AppStat) to[circle connection bar] (Index); +% \draw (Phy) to[circle connection bar switch color=from (algo) to (violet)] (ImSat); +% \draw (Algo) to[circle connection bar switch color=from (algo) to (green!75!red)] (ImMed); +% \draw (Algo) to[circle connection bar switch color=from (algo) to (orange)] (Index); +% \draw (Phy) to[circle connection bar switch color=from (phy) to (green!75!red)] (ImMed); +% \draw (Opti) to[circle connection bar switch color=from (opti) to (green!75!red)] (ImMed); +% \draw (Opti) to[circle connection bar switch color=from (opti) to (vrob)] (VRob); +% \draw (AppStat) to[circle connection bar switch color=from (appstat) to (vrob)] (VRob); +% \draw (AppStat) to[circle connection bar switch color=from (appstat) to (orange)] (Index); -% \draw (seg) to[circle connection bar] (ImSat); -% \draw (Surv) to[circle connection bar] (VRob); -% \draw (ImSat) to[circle connection bar] (Carto); -% \draw (ImSat) to[circle connection bar] (reco); -% \draw (reco) to[circle connection bar] (ImMed); -% \draw (reco) to[circle connection bar] (ImSat); +% \draw (seg) to[circle connection bar switch color=from (green!75!red) to (violet)] (ImSat); +% \draw (Surv) to[circle connection bar switch color=from (violet) to (vrob)] (VRob); +% \draw (ImSat) to[circle connection bar switch color=from (violet) to (vrob)] (Carto); +% \draw (ImSat) to[circle connection bar switch color=from (orange) to (violet)] (reco); +% \draw (reco) to[circle connection bar switch color=from (orange) to (green!75!red)] (ImMed); +% \draw (reco) to[circle connection bar switch color=from (orange) to (violet)] (ImSat); % \end{pgfonlayer} % \end{tikzpicture} % \caption{Domaines et interface du Traitement d'image} % \end{figure} - +% \newpage \subsection{Définion} - \begin{defin} \begin{itemize} \item Une \emph{image} est une répresentaiton continue d'une fonction $f(x,y)$ qui relie $f$ à l'intensité lumineuse du point $(x,y)$. @@ -85,12 +90,12 @@ Refaire le graphe stylé en TikZ \includegraphics[width=0.7\textwidth]{img/mona_lisa_echantillon.png} \caption{Echantillonage spatial} \end{figure} +\newpage \begin{figure}[H] \centering \includegraphics[width=0.7\textwidth]{img/mona_lisa_quantif.png} \caption{Quantification} \end{figure} - \subsection{Notation et structure} Pour accéder aux pixel d'une image: @@ -666,13 +671,13 @@ la méthode d'Otsu est utilisée pour effectuer un seuillage automatique à part \begin{prop} On cherche le seuil $t$ tel que : \[ - \arg\max \omega_1(t)\omega_2(t)[\mu_1(t)-\mu_2(t)]^2 + t = \arg\max_{t} \omega_1(t)\omega_2(t)[\mu_1(t)-\mu_2(t)]^2 \] Avec: \begin{itemize} - \item $\omega_1(t) = \sum_{i=0}^{t}H_n(i)$ - \item $\mu_1(t) = \frac{1}{\omega_1(t)}\sum_{i=0}^{t} i \cdot H_n(i)$. - \item idem pour $\omega_2$ et $\mu_2$. + \item $\omega_1(t) = \sum_{i=0}^{t}H_n(i)$ et $\omega_2(t)= \sum_{i=t+1}^{N-1}H_n(i)$ + \item $\mu_1(t) = \frac{1}{\omega_1(t)}\sum_{i=0}^{t} i \cdot H_n(i)$. et $\mu_2 = \frac{1}{\omega_2(t)}\sum_{i=t+1}^{N-1} i \cdot H_n(i)$ + \item . \end{itemize} \end{prop} \section{Estimation} @@ -775,7 +780,6 @@ retourne meilleur_modèle, meilleur_ensemble_points, meilleure_erreur La segmentation consiste à regrouper les différents pixels de l'image en un nombre (donné) de région (peut aussi consister a une taille de région maximale, les deux, etc...). En pratique on réalise une partition de l'image - \subsection{Segmentation par découpage} \begin{defin} L'idée des algorithmes de type « Split \& Merge » est de produire @@ -789,6 +793,149 @@ La segmentation consiste à regrouper les différents pixels de l'image en un no \end{itemize} \end{defin} +\paragraph{Phase de découpage} + +Lors de la phase de découpage on forme le quadtree et le graphe d'adjacence: + +\begin{figure}[H] + \centering + \begin{tikzpicture} + \begin{scope} + \draw (0,0) rectangle ++ (4,4); + \draw (2,0) -- ++ (0,4) (0,2) -- ++(4,0); + \draw (3,0) -- ++(0,2) (2,1) -- ++ (2,0); + \draw (1,1) node{$R_3$} + (1,3) node{$R_1$} + (3,3) node{$R_2$} + (2.5,1.5) node{$R_{41}$} + (3.5,1.5) node{$R_{42}$} + (2.5,0.5) node{$R_{43}$} + (3.5,0.5) node{$R_{44}$}; + \end{scope} + \begin{scope}[shift={(8,4)}, + every node/.style = {shape=circle, draw}] + \node{$R_0$} + child{ node {$R_1$}} + child{ node {$R_2$}} + child{ node {$R_3$}} + child{ node {$R_4$} + child{ node {$R_{41}$}} + child{ node {$R_{42}$}} + child{ node {$R_{43}$}} + child{ node {$R_{44}$}}}; + \end{scope} + \end{tikzpicture} + \caption{Quadtree et graphe d'adjacence} +\end{figure} +\begin{rem} + L'algorithme de découpage est implantable très facilement de manière récursive +\end{rem} + + +\subsection{Segmentation par optimisation} +\begin{prop} +Cette fois ci on cherche à déterminier la fonction $f$ bidimensionnelle, constante par morceaux (une valeur , une région) proche +de l’image I , avec une partition simple du point de vue géométrique. Pour cela on utilise la fonctionnelle de cout : +\[ + K = \sum_{i}^{} \iint_{R_i}(I(x,y)-f_i)\d x \d y + \mu \sum_{j}^{}\int_{\Gamma_j}^{}dl +\] +où $\Gamma_j$ sont les portions de contour entourant la région de la région +\end{prop} + +\begin{rem} + Il n'existe pas de solution directe au problème de minimisation. Il y a deux techniques pour approcher la solution: + \begin{itemize} + \item méthodes variationnelles sur des courbes fermées + \item méthodes markoviennes par itération à partir d’une segmentation initiale + \end{itemize} +\end{rem} +\paragraph{méthode variationnelles} +On utilise une fonction de cout $E = E_i+E_e$ tel que +\begin{itemize} +\item $ E_i = \int_{0}^{1}\alpha (C'(s))^2ds$ pénalise la longueur du contour (``snake'') +\item $E_e = \int_{0}^{1}-\nabla I(x(s),y(s))ds$ favorise l'alignement sur les forts gradients. +\end{itemize} + +\paragraph{Technique markoviennes} + +On teste les changements de pixel/sous-région d'une région à une autre, et on prend le meilleur (ie qui minimise la fonctionnelle). Pour cela on part souvent d'une sur-segmentation. + + +\section{La classification} +\paragraph{Objectif}: +\begin{itemize} +\item Obtenir une représentation simplifiée mais pertinente des données originales +\item Mettre en évidence les similiratité entre les objets. +\end{itemize} + +\paragraph{Problématique de la visualisation des données} + +Il est difficile de se représenter la classification de manière ``brute'' au dela de 5 paramètres on peux utiliser l'analyse en composante principale (par réduction de la dimension) ou l'analyse linéaire discriminante. + + +\subsection{Analyse en composantes principales} +\begin{itemize} +\item indispensable quand le nombre de variables est très grand +\item analyse de la variabilité / dispersion des données +\item objectif : décrire à partir de q < d dimensions cette variabilité +\item réduction des données a q nouveaux descripteurs +\item visualisation si q = 2 ou q = 3 +\item interprétation des données : liaisons inter-variables +\end{itemize} + +\paragraph{Algorithme} + +\begin{enumerate} +\item recentrage des données $\vec{X} = (\vec{x}-\mu)^T$. +\item Calcul de la matrice de covariance $\Sigma$. +\item diagonalisation de $\Sigma$ et classement par valeur propres croissantes. +\item sélection des $q$ premiers vecteurs propres $C_k$ +\item Calcul des valeur réduites $a_i$ qui remplacent $x_i$ par $a_{ik}= $ +\end{enumerate} + +\begin{rem} + Le PCA ne prend pas en compte la notion de classe. on peux aussi utiliser l'analyse linéaire discriminante. +\end{rem} +\subsection{Analyse linéaire discriminante} + +\paragraph{Algorithme} +\begin{enumerate} +\item recentrage des données $\vec{X}=(\vec{x}-\mu)^T$ +\item Calcul de la matrice de covariance $\Sigma$. +\item Calcul de la matrice de covariance interclasse $\vec{B}$. + \[ + \vec{B} = \sum_{k=1}^{c}n_k\frac{(\mu_k-\mu)(\mu_k-\mu\rangle)^T}{n} + \] + où $k$ représente la classe +\item diagonalisation de $\Sigma^{-1}\vec{B}$ et classement par valeur propres croissantes +\item sélection des $q$ premiers vecteurs propres $C_k$. +\item Calcul des valeurs réduites $\vec{a_i}$ qui remplacent $x_i$ par $a_{ik}=$ +\item classification d'une nouvelle observation par la distatnce au centroïde le plus proche. +\item classification linéaire : médiane entre les centroïdes. +\end{enumerate} + + +\subsection{Intégration de la connaissance} +\subsection{Classification non supervisée - K-means} + +on cherche à déterminer des ``clusters'' dans les observations. En minimisant +\[ + \min_{\mu_1....\mu_k} \sum_{i=1}^{k}\sum_{x_j\in C_i}^{} (x_j-\mu_i)^2 +\] + +\paragraph{Fonctionnement} +\begin{verbatim} +choose mu_i , i in [1 k] // initialisation +while (any mu_i changes){ + assign all x_j to closest mu + update mu_i , i in [1 k] +} +\end{verbatim} +À chaque itération la fonction objectif diminue. c'est rapide et parallèlisable. + + + + \end{document}