\documentclass{article}
\usepackage{amssymb, amsmath, geometry, multicol, stmaryrd, cancel, centernot}
\usepackage[table, svgnames, dvipsnames]{xcolor}
\usepackage{makecell, cellspace, caption}
\usepackage[europeanresistors]{circuitikz}
\usepackage[a]{esvect} % voir la doc pour les différents styles
\usepackage{tikz-3dplot}
\usepackage{dsfont}

\let\overrightarrow\vv


\usetikzlibrary{arrows}
\usetikzlibrary{shapes.geometric}

\newcommand{\independant}{\perp\!\!\!\perp}
\newcommand{\parspace}{\vspace{0.1cm}}
\linespread{1.25}
\geometry{tmargin=.7in, bmargin=.75in, lmargin=.75in, rmargin = .75in}

\begin{document}
\setlength{\parindent}{0mm}

\title{Traitement d'Image - Détection De Contours}
\author{Aubin SIONVILLE}
\date{Télécom St Etienne 2024-2025}

\maketitle

\center

\section*{Détection de contours 1D}

On cherche à détecter un point d'inflexion 

\begin{multicols}{2}
    Maximum local de $\displaystyle \frac{df}{dx}$

    Zéro avec changement de signe de $\displaystyle \frac{d^2f}{dx^2}$
\end{multicols}

\section*{Détection de contours 2D}

\subsection*{Avec les dérivées directionnelles}

On peut utiliser les dérivées selon certaines directions (souvent $x$ et $y$).

On détecte les maximums de module dans la direction, on fait un seuillage sur le module et on ferme les contours.

\subsection*{Avec le laplacien}

\begin{multicols}{2}
    \begin{minipage}{0.8\textwidth}
        On peut utiliser le laplacien pour détecter les contours.
        
        On détecte les points tels que le laplacien s'annule en changeant de signe.
        
        On détecte ensuite les frontières en faisant $f - \epsilon(f)$ ou $\delta(f) - f$
        
        On détecte enfin les passages par zéro en prenant le dilaté ou l'érodé.
    \end{minipage}
    \begin{minipage}{0.3\textwidth}
        \[
        \begin{pmatrix}
            0 & 1 & 0 \\
            1 & -4 & 1 \\
            0 & 1 & 0
        \end{pmatrix}
        \]
    \end{minipage}
\end{multicols}

\section*{Opérateurs simples de détection de contours}

\subsection*{Opérateur de Sobel}

\begin{multicols}{2}
    \textbf{Gradient en $x$}
    \[
        \begin{pmatrix}
            1 & 0 & -1 \\
            2 & 0 & -2 \\
            1 & 0 & -1
        \end{pmatrix}
    \]

    \textbf{Gradient en $y$}
    \[
        \begin{pmatrix}
            1 & 2 & 1 \\
            0 & 0 & 0 \\
            -1 & -2 & -1
        \end{pmatrix}
    \]
\end{multicols}

\subsection*{Opérateur de Prewitt}

\begin{multicols}{2}
    \textbf{Gradient en $x$}
    \[
        \begin{pmatrix}
            -1 & 0 & 1 \\
            -1 & 0 & 1 \\
            -1 & 0 & 1
        \end{pmatrix}
    \]

    \textbf{Gradient en $y$}
    \[
        \begin{pmatrix}
            1 & 1 & 1 \\
            0 & 0 & 0 \\
            -1 & -1 & -1
        \end{pmatrix}
    \]
\end{multicols}

\section*{Opérateur dérivée de gaussiennes}

\begin{multicols}{2}
    \subsection*{Gaussienne}
    \[g_{\sigma}(x) = \frac{1}{\sqrt{2\pi}\sigma}e^{-\frac{x^2}{2\sigma^2}}\]

    \subsection*{Lissage}
    \[f_l(x) = f * g_{\sigma}\]
\end{multicols}

\subsection*{Lissage + dérivée = filtre dérivée de gaussienne}
\[f_l'(x) = \frac{d}{dx}\left(f * g_{\sigma}\right) = f * g_{\sigma}'(x)\]

\vspace{0.2cm}

\subsection*{Influence de $\sigma$}

\begin{multicols}{2}
    \subsubsection*{Petit $\sigma$}
    Contours nets

    Lignes localisées

    \subsubsection*{Grand $\sigma$}
    Contours flous et bruités

    Délocalisation
\end{multicols}

\vspace{0.2cm}

\subsection*{Méthode 1 : Par FFT}

Cette méthode est plus rapide que la méthode 2.

- Calcul de la FFT de $f$

- Multiplication complexe par la FFT de $g_{\sigma}'$

- Calcul de la FFT inverse

\vspace{0.5cm}

\subsection*{Méthode 2 : Par séparabilité de la convolution}

- Convolution selon les colonnes par une gaussienne

- Convolution selon les lignes par une dérivée

\vspace{0.5cm}

\subsection*{Exploitation des résultats}

\begin{multicols}{2}
    \subsubsection*{Partie réelle}
    Dérivée en x

    \subsubsection*{Partie imaginaire}
    Dérivée en y

\end{multicols}
\begin{multicols}{2}
    \subsubsection*{Module}
    Module du gradient

    \subsubsection*{Phase}
    Direction du gradient    
\end{multicols}

\newpage

\section*{Ligne de partage des eaux}

\subsection*{Principe}

On prend $f$ comme une surface.

On la perce à ses minima locaux et on fait monter le niveau de l'eau.

Différents bassins se remplissent, on les sépare par des barrages pour éviter qu'ils se mélangent.

A la fin, les barrages sont les lignes de partage des eaux.

\subsection*{Segmentation par LPE}

On calcule le module du gradient de $f$.

La LPE du gradient donne la segmentation.

\subsection*{Avantages}

\begin{multicols}{2}
    Unicité de la LPE

    Calculable sur niveaux de gris, gradients...
\end{multicols}

\begin{multicols}{2}
    Détection de la ligne de crête :\\Meilleur que les max locaux du gradient

    Algorithmes efficaces :\\Voir cours de morphologie mathématique
\end{multicols}

\subsection*{Problème : Sélection des minima locaux}

On a tendance à sur-segmenter l'image et à créer beaucoup de bassins (1 par min local).

Il faut enlever les minima locaux non pertinents (de faible amplitude).

\subsection*{Solution 1 : Seuillage}
On peut supprimer les minima locaux de faible amplitude en amont.

Pour cela on utilise des opérations géodésiques :

\begin{multicols}{2}
    \subsubsection*{Suppression des minima de hauteur $<h$}
    \[\mathrm{HMin}_h(f) = R_f^{\epsilon}(f+h)\]
    $f$ est le masque, $f+h$ est le marqueur.

    \subsubsection*{Détection des maxima régionaux}
    \[\mathrm{RMax}_h(f) = f - R_f^\delta(f-1) = f - \mathrm{HMax}_1(f)\]
    \[\mathrm{EMax}_h(f) = \mathrm{RMax}(\mathrm{HMax}_h(f))\]
\end{multicols}

\subsection*{Solution 2 : Marquage}
On peut marquer les minima locaux pertinents et ne garder que ceux-là.

\begin{multicols}{2}
    \subsubsection*{Marqueurs internes}
    À partir de l'image originale\\
    Min ou max régionaux étendus\\
    Pré-segmentation\\
    = Les creux

    \subsubsection*{Marqueurs externes}
    Déduits à partir des marqueurs internes\\
    LPE sur l'image originale avec les marqueurs internes\\
    Le bord compte comme marqueur externe\\
    = Les crêtes et le bord
\end{multicols}

\subsubsection*{LPE sur le gradient}
On fait enfin la LPE sur le gradient avec les marqueurs internes et externes + le bord de l'image.

\end{document}