diff --git a/code/BMPFile.py b/code/BMPFile.py
index d1cbac1..a050f55 100644
--- a/code/BMPFile.py
+++ b/code/BMPFile.py
@@ -449,8 +449,8 @@ class BMPFile:
# définition des palettes par défaut
tmp = [[x,x,x,0] for x in range(0,256)]
- palette[8] = []; palette[8] += [x for l in tmp for x in l]
-
+ palette[8] = []; palette[8] += [x for l in tmp for x in l
+]
palette[24] = [ord("B"), ord("G"), ord("R"), ord("s")] + [0]*48 + [2] + [0]*15
diff --git a/code/images/biche.bmp b/code/images/biche.bmp
new file mode 100644
index 0000000..0a4b5ee
Binary files /dev/null and b/code/images/biche.bmp differ
diff --git a/code/tests.py b/code/tests.py
index 41da0b3..80131ca 100644
--- a/code/tests.py
+++ b/code/tests.py
@@ -1185,7 +1185,7 @@ def testConvolution():
print "| Application du filtre |",; t.reset();
- FX.Filter.Convolution(img.content.map);
+ img.content.map = FX.Filter.Convolution(img.content.map);
print "%s |" % (t.get())
# Unparsing
diff --git a/code/utility/Filter.py b/code/utility/Filter.py
index 71e9bfc..d825fd6 100644
--- a/code/utility/Filter.py
+++ b/code/utility/Filter.py
@@ -304,36 +304,52 @@ class Filter:
width = len( pixelMap[0] )
height = len( pixelMap )
- # map de résultat
+ # map de résultat (filtrée)
convolvedMap = [ ]
convolvedMap.append( [] );
# on parcourt tout les pixels
for y in range(0, height):
- convolvedMap.append( [ [] ] )
+ # on rajoute une ligne à la map filtrée
+ convolvedMap.append( [] )
for x in range(0, width):
pixel = pixelMap[y][x];
kernel = [
- [ 0, 0, 0],
- [ 0, 1, 0],
- [ 0, 0, 0]
+ [ 4, 3, 2, 3, 4],
+ [ 3, 2, 1, 2, 3],
+ [ 2, 1, 0, 1, 2],
+ [ 3, 2, 1, 2, 3],
+ [ 4, 3, 2, 3, 4]
]
- # nb total résultant du kernel
- kernelFactor = sum( [a for b in kernel for a in b] )
- if kernelFactor == 0:
- kernelFactor = 1
- pixelM = [ pixelMap[(y+1)%height][(x-1)%width:(x+2)%width], pixelMap[y][(x-1)%width:(x+2)%width], pixelMap[(y-1)%height][(x-1)%width:(x+2)%width] ]
+ # nb total résultant du kernel des valeurs positives
+ kernelFactor = 0;
+ for b in kernel:
+ for a in b:
+ if a > 0:
+ kernelFactor += a;
+
+ # on définit la matrice de même taille que le kernel mais correspondant aux pixels superposés
+ pixelM = [];
+ print "(%s, %s)" % (-len(kernel)/2, 1+len(kernel)/2)
+
+ for b in range(1-len(kernel)/2, 1+len(kernel)/2):
+ pixelM.append( [] );
+ for a in range(1-len(kernel[b])/2, 1+len(kernel[b])/2):
+
+ print "(%s, %s)" % (b, a)
+
+
+ # pixelM[len(pixelM)-1].append( pixelMap[(y+b)%height][(x+a)%width] );
+ exit()
r,g,b = 0,0,0
- # print
-
for j in range( 0, len(pixelM) ):
for i in range( 0, len(pixelM[j]) ):
# pour chacun des filtres
@@ -341,21 +357,19 @@ class Filter:
g += pixelM[j][i].g * kernel[j][i]
b += pixelM[j][i].b * kernel[j][i]
- r = r/kernelFactor % 256
- g = g/kernelFactor % 256
- b = b/kernelFactor % 256
+ r = int(r/kernelFactor) % 256
+ g = int(g/kernelFactor) % 256
+ b = int(b/kernelFactor) % 256
- # print "\n(%s, %s, %s)" % (r, g, b)
- # exit()
- # définition des couleurs
+ # définition des couleurs sur la map filtrée
convolvedMap[y].append( RGBPixel(
- r = int( r ),
- g = int( g ),
- b = int( b ),
+ r = r,
+ g = g,
+ b = b,
x = x,
y = y,
bpp = pixel.bpp
) )
- pixelMap = convolvedMap
\ No newline at end of file
+ return convolvedMap
\ No newline at end of file
diff --git a/code/utility/Shape.py b/code/utility/Shape.py
index 75a4272..ab22b47 100644
--- a/code/utility/Shape.py
+++ b/code/utility/Shape.py
@@ -74,8 +74,8 @@ class Shape:
# @param pixelMap matrice de pixels
# @param seuil Ecart entre le pixel et ses alentours à partir duquel on considère un contour ou une continuité de la forme
#
- # Blanc = fond
- # Noir = forme
+ # couleur de originalPixel = forme
+ # + de seuil par rapport à originalPixel = fond
#
# @return retourne la liste des pixels composant le contour
#
diff --git a/docs/draws.svg b/docs/draws.svg
deleted file mode 100644
index 4ea6b4e..0000000
--- a/docs/draws.svg
+++ /dev/null
@@ -1,346 +0,0 @@
-
-
-
-
diff --git a/dossier b/dossier
deleted file mode 100644
index df33f90..0000000
--- a/dossier
+++ /dev/null
@@ -1,25 +0,0 @@
-\documentclass{article}
-\usepackage[utf8]{inputenc}
-\usepackage[usenames,dvipsnames,svgnames,table]{xcolor}
-
-\title{TRAITEMENT D'IMAGE\\Débruitage}
-\author{Adrien MARQUÈS - Alexis HELSON }
-\date{Septembre 2015}
-
-\begin{document}
-
-\maketitle
-
-
-
-
-
-
-% Introduction
-\section{Introduction}
-Cette étude vise à améliorer les méthodes de débruitage d'images, et donc de développer un programme universel de débruitage, c'est-à-dire qu'il réduirait convenablement tout type de bruit. Le programma est développé en Python2 pour la simplicité et efficacité du langage. Le code sur Github à l'adresse suivante:\\
-\begin{center} \textcolor{blue}{https://github.com/xdrm-brackets/bmp\_python} \end{center}
-
-
-
-\end{document}
diff --git a/dossier.tex b/dossier.tex
deleted file mode 100644
index e7418b3..0000000
--- a/dossier.tex
+++ /dev/null
@@ -1,109 +0,0 @@
-\documentclass{article}
-\usepackage[utf8]{inputenc}
-\usepackage[usenames,dvipsnames,svgnames,table]{xcolor}
-\usepackage{amsmath,amsfonts}
-\usepackage{lmodern}
-
-
-% Définition des symboles
-\newcommand{\N}{\mathbb{N}} % \N pour les entiers naturels
-\newcommand{\R}{\mathbb{R}} % \R pour les réels
-
-\title{TRAITEMENT D'IMAGE\\Débruitage}
-\author{Adrien MARQUÈS - Alexis HELSON }
-\date{Septembre 2015}
-
-\begin{document}
-
- \maketitle
-
- % Introduction
- \section{Introduction}
- Cette étude vise à améliorer les méthodes de \emph{nettoyage d'image}, et donc de développer un programme universel de débruitage, c'est-à-dire qu'il réduirait convenablement tout type de bruit, dépendant toutefois de paramètres adaptés à chacun.
- \begin{center} \emph{Avant d'essayer d'améliorer quelque chose, il faut le comprendre.} \end{center}
-
- Pour cela, nous avont donc étudié:
- \begin{description}
- \item Le débruitage standard
- \item Le filtrage par convolution
- \item La détection de formes
- \item La détection de contours
- \end{description}
- Le programme a été développé en Python2 pour la simplicité et efficacité du langage. Le code est sur Github à l'adresse suivante:
- \begin{center} \textcolor{blue}{https://github.com/xdrm-brackets/bmp\_python} \end{center}
-
-
-
-
- % Structure du programme
- \section{Architecture et structure du programme}
-
- \begin{description}
- \item \textbf{racine}
- \begin{description}
- \item \textbf{main.py} \hfill \\
- Programme principal, il affiche une interface (en console) permettant d'éxécuter une des opérations disponibles.
- \item \textbf{tests.py} \hfill \\
- Contient les corps de toutes le opérations pouvant être choisies dans le programme principal.
- \item \textbf{BMPFile.py} \hfill \\
- Contient les structures \emph{BMPFile}, \emph{BMPContent}, \emph{BMPHeader}, permettant d'encoder et de décoder un fichier BMP. Ainsi que la strucure \emph{RGBPixel} permettant de coder un pixel.
- \item \textbf{Noise.py} \hfill \\
- Contient tout les traitements tels que les bruitages et débruitages, les filtres, et les détections de formes et contours. (il importe tout le dossier \emph{utility})
-
- \begin{description}
- \item \textbf{SaltAndPepper\_Noise.py} \hfill \\
- Contient les méthodes de bruitage et débruitage du bruit de type \emph{Poivre \& Sel}.
- \item \textbf{Additive\_Noise.py} \hfill \\
- Contient les méthodes de bruitage et débruitage du bruit de type \emph{additif}.
- \item \textbf{Gaussian\_Noise.py} \hfill \\
- Contient les méthodes de bruitage et débruitage du bruit de type \emph{gaussien}.
- \item \textbf{Multiplicative\_Noise.py} \hfill \\
- Contient les méthodes de bruitage et débruitage du bruit de type \emph{multiplicatif}.
- \item \textbf{Color\_Noise.py} \hfill \\
- Contient les méthodes de bruitage et débruitage du bruit de type \emph{multicolore}.
- \item \textbf{Filter.py} \hfill \\
- Contient les méthodes de filtrage (standard ou par convolution).
- \item \textbf{Shape.py} \hfill \\
- Contient les méthodes de détection de formes et de contours
-
- \end{description}
- \end{description}
- \end{description}
-
- Le fichier \textbf{tests.py} utilise la structure \emph{BMPFile} afin de lire/écrire les fichiers ainsi que la structure \emph{Noise} qui contient toutes les méthodes de bruitage et de débruitage, les filtres et les détections de formes et de contours. Le fichier \emph{\textbf{Noise.py}} (qui contient la structure de même nom) appelle les différents fichiers contenus dans le dossier \textbf{utility}. Les fichiers contenus dans \textbf{utility} peuvent être:\\
- - Un fichier qui contient toutes les méthodes pour un type de bruit (bruitage et débruitage)\\
- - Le fichier \emph{Filters.py} qui contient toutes les méthodes de filtrage\\
- - Le fichier \emph{Shapes.py} qui contient toutes les méthodes de détection de formes et contours
-
-
-
- % Fichiers
- \section{Fichiers}
- La lecture et l'écriture des fichiers se fait octet par octet, la structure \emph{BMPFile} permet de transformer les octets d'un fichier BMP en matrice de pixels, et inversement, de transformer une matrice de pixels en fichier BMP. Les types d'encodage des couleurs pris en charge sont 8 (nuance de gris) bits par pixel, et 24 (rouge, vert, bleu) bits par pixels. Les pixels sont du type \emph{RGBPixel} qui contient les coordonnées du pixel (x, y), ainsi que la couleur du pixel au format RGB (rouge, vert, bleu) chaque nuance prend sa valeur entre 0 et 255.
- \\\par Le seul format pris en charge est le format BMP, pour accepter d'autres formats (jpeg, png, gif, etc), il suffirait de récupérer une matrice de pixels (\emph{RGBPixel}), car toutes les méthodes agissent uniquement sur la matrice. Il serait ainsi possible de convertir une image vers un autre format.
-
-
-
-
- % Débruitage standard
- \section{Le bruit Poivre \& Sel}
- \textbf{Définition graphique}\par
- L'image est parsemée de pixels ayant une teinte extrême (blancs ou noirs) sans rapport avec leur contexte (voisinage).
- \-
- \\*
- \textbf{Bruitage}\par
- Soit \emph{width} et \emph{height}, respectivement la largeur et la hauteur de l'image en nombre de pixels.
- L'image est bruitée par rapport à \emph{seuil} le seuil de bruitage.
- \begin{align*}
- &\text{Soit:}\\
- &\text{ - }width\in\N\text{, la largeur de l'image}\\
- &\text{ - }height\in\N\text{, la hauteur de l'image}\\
- &\text{ - }seuil\in\R\text{, le seuil de bruitage, tel que }seuil\in[0;1]\\
- &\text{ - }n = seuil \times width \times height\text{, le nombre de pixels à traiter}\\
- &\text{ - }(x, y) \text{, tel que} (x, y)\in\N^2\text{, et }x\in[0,width[, y\in[0,height[
- \end{align*}
- \emph{n} couples \emph{(x, y)}
-
-
-
-\end{document}
\ No newline at end of file
diff --git a/dossier/.dossier.tex.swp b/dossier/.dossier.tex.swp
new file mode 100644
index 0000000..9ba3df2
--- /dev/null
+++ b/dossier/.dossier.tex.swp
@@ -0,0 +1,290 @@
+\documentclass{article}
+\usepackage[utf8]{inputenc}
+\usepackage[usenames,dvipsnames,svgnames,table]{xcolor}
+\usepackage{amsmath,amsfonts}
+\usepackage{lmodern}
+\usepackage{graphicx} % permet l'insertion d'images
+\usepackage[left=2cm,right=2cm,top=2cm,bottom=2cm]{geometry}
+
+% Définition des symboles
+\newcommand{\N}{\mathbb{N}} % \N pour les entiers naturels
+\newcommand{\R}{\mathbb{R}} % \R pour les réels
+\newcommand\V[1]{\overrightarrow{#1}} % $\V{AB}$ pour les vecteurs
+
+\title{TRAITEMENT D'IMAGE\\Débruitage}
+\author{Adrien MARQUÈS - Alexis HELSON }
+\date{Septembre 2015}
+
+\begin{document}
+
+ \maketitle
+
+ % ======================== %
+ % === PART 1 - PRELUDE === %
+ % ======================== %
+ \part*{Prélude}
+
+ % ====================== %
+ % === SECT 1 - INTRO === %
+ % ====================== %
+ \section{Introduction}
+ Cette étude vise à améliorer les méthodes de \emph{nettoyage d'image}, et donc de développer un programme universel de débruitage, c'est-à-dire qu'il réduirait convenablement tout type de bruit, dépendant toutefois de paramètres adaptés à chacun.
+ \begin{center} \emph{Avant d'essayer d'améliorer quelque chose, il faut d'abord le comprendre.} \end{center}
+ Nous avons donc commencé par lire des études sur débruitage, la détection de contours, de formes, et la vectorisation d'images.
+ \noindent Pour cela, nous avont étudié:
+ \begin{description}
+ \item[ - Le débruitage standard,]c'est à dire les méthodes déjà existantes.
+ \item[ - Le filtrage par convolution,]afin de mettre en valeur les contours et formes.
+ \item[ - La détection de formes,]afin d'effectuer un débruitage sans <>.
+ \item[ - La détection de contours,]afin d'optimiser la détection de formes.
+ \end{description}
+ Le programme a été développé en Python2 pour la simplicité et efficacité du langage. Le code est disponible sur Github à l'adresse suivante:
+ \begin{center} \textcolor{blue}{https://github.com/xdrm-brackets/bmp\_python} \end{center}
+
+
+
+
+
+ % =========================== %
+ % === SECT 2 - ARCHI PROG === %
+ % =========================== %
+ \section{Architecture et structure du programme}
+
+ \begin{description}
+ \item \textbf{racine/}
+ \begin{description}
+ \item \textbf{main.py} \hfill \\
+ Programme principal, il affiche une interface (en console) permettant d'éxécuter une des opérations disponibles.
+ \item \textbf{tests.py} \hfill \\
+ Contient les corps de toutes le opérations pouvant être choisies dans le programme principal.
+ \item \textbf{BMPFile.py} \hfill \\
+ Contient les structures \emph{BMPFile}, \emph{BMPContent}, \emph{BMPHeader}, permettant d'encoder et de décoder un fichier BMP. Ainsi que la strucure \emph{RGBPixel} permettant de coder un pixel.
+ \item \textbf{Noise.py} \hfill \\
+ Contient tout les traitements tels que les bruitages et débruitages, les filtres, et les détections de formes et contours. (il importe tout le dossier \emph{utility})
+ \item \textbf{utility/}
+ \begin{description}
+ \item \textbf{SaltAndPepper\_Noise.py} \hfill \\
+ Contient les méthodes de bruitage et débruitage du bruit de type \emph{Poivre \& Sel}.
+ \item \textbf{Additive\_Noise.py} \hfill \\
+ Contient les méthodes de bruitage et débruitage du bruit de type \emph{additif}.
+ \item \textbf{Gaussian\_Noise.py} \hfill \\
+ Contient les méthodes de bruitage et débruitage du bruit de type \emph{gaussien}.
+ \item \textbf{Multiplicative\_Noise.py} \hfill \\
+ Contient les méthodes de bruitage et débruitage du bruit de type \emph{multiplicatif}.
+ \item \textbf{Color\_Noise.py} \hfill \\
+ Contient les méthodes de bruitage et débruitage du bruit de type \emph{multicolore}.
+ \item \textbf{Filter.py} \hfill \\
+ Contient les méthodes de filtrage (standard et par convolution).
+ \item \textbf{Shape.py} \hfill \\
+ Contient les méthodes de détection de formes et de contours
+
+ \end{description}
+ \end{description}
+ \end{description}
+
+ Le fichier \textbf{tests.py} utilise la structure \emph{BMPFile} afin de lire/écrire les fichiers ainsi que la structure \emph{Noise} qui contient toutes les méthodes de bruitage et de débruitage, les filtres et les détections de formes et de contours. Le fichier \emph{\textbf{Noise.py}} (qui contient la structure de même nom) appelle les différents fichiers contenus dans le dossier \textbf{utility}. Les fichiers contenus dans \textbf{utility} peuvent être:\\
+ - Un fichier qui contient toutes les méthodes pour un type de bruit (bruitage et débruitage)\\
+ - Le fichier \emph{Filters.py} qui contient toutes les méthodes de filtrage\\
+ - Le fichier \emph{Shapes.py} qui contient toutes les méthodes de détection de formes et contours
+
+ % ========================= %
+ % === SECT 2 - VARIABLE === %
+ % ========================= %
+ \section{Variables globales}
+ Ces valeurs seront utilisées pour la majeure partie des calculs et correspondent à des notations générales à l'image ou aux autres notations utilisées.\\
+ Soit \begin{math}(width, height)\in\N^2\end{math}, respectivement la largeur et la hauteur de l'image en pixels.\\
+ Soit la matrice \begin{math}I_{height, width}\end{math} correspondant à la répartition des pixels dans l'image. Il est à noter qu'en accord avec le langage de programmation, les indices de la matrices prendront leurs valeurs dans [0;width-1] et [0;height-1] et non dans [1;width] et [1;height].\\
+ Soit le couple \begin{math}(x,y)\in\N^2\end{math}, les coordonnés d'un pixel dans I, tel que \begin{math}x\in[0;width[,\ et\ y\in[0;height[\end{math}.\\
+ Soit \begin{math}\vec{u}\end{math} le vecteur associé à une unité de contour, tel que \begin{math}||\vec{u}|| = 1,\ et\ sa\ direction\ d =\frac{n\pi}{2}[2\pi]\ rad,\ avec\ n\in\N\end{math}.\\
+ Soit \begin{math}K_n\end{math}, la matrice carré d'ordre \emph{n}. Par exemple \begin{math}K_3 = \begin{pmatrix}k_1&k_2&k_3\\k_4&k_5&k_6\\k_7&k_8&k_9\\\end{pmatrix}\end{math}\\\\
+
+
+
+ \newpage
+
+
+
+ % ========================= %
+ % === PART 2 - ENCODAGE === %
+ % ========================= %
+ \part*{Encodage et décodage de fichiers}
+
+ % =============================== %
+ % === SECT 1 - FONCTIONNEMENT === %
+ % =============================== %
+ \section{Fonctionnement global}
+ La lecture et l'écriture des fichiers se fait octet par octet, la structure \emph{BMPFile} permet de transformer les octets d'un fichier BMP en matrice de pixels, et inversement, de transformer une matrice de pixels en fichier BMP. Les types d'encodage des couleurs pris en charge sont 8 (nuance de gris), et 24 (rouge, vert, bleu) bits par pixels. Les pixels sont du type \emph{RGBPixel}, ce type contient les coordonnées du pixel (x, y), ainsi que sa couleur au format RGB (rouge, vert, bleu) chaque nuance prend sa valeur entre 0 et 255.
+ \\\par Le seul format pris en charge est le format BMP. Pour que le programme fonctionne avec d'autres formats (jpeg, png, gif, etc), il suffirait de récupérer une matrice de \emph{RGBPixel} à partir d'une image. Toutes les méthodes de traitement d'image du programme agissent uniquement sur cette matrice. Il serait ainsi possible de convertir une image vers un autre format. Le fichier BMP peut se décomposer en 3 parties:
+ \begin{description}
+ \item - Le \emph{header} donne des informations sur le fichier et son contenu. \hfill\\
+ Sa taille est de 54 octets.
+ \item - La \emph{palette} donne des informations sur l'encodage des couleurs. \hfill\\
+ Sa taille est variable, elle est donnée dans le header.
+ \item - Le \emph{bitmap} est la matrice de pixels, c'est le <> du fichier. \hfill\\
+ Sa taille est variable, elle est donnée dans le header.
+ \end{description}
+
+
+ % ====================== %
+ % === SUBS 1 - HEADE === %
+ % ====================== %
+ \subsection{Le header}
+ Le header fournit des informations sur le fichier, sur l'image, sur la palette et sur les tailles et positions des différentes parties. Il est
+ \begin{center}\begin{tabular}{|c|c|l|}
+ \hline \textbf{Position (octets)} & \textbf{Taille} & \textbf{Libellé}\\
+ \hline 0 & 2 octets & signature, toujours 4D42\\
+ \hline 2 & 4 octets & taille du fichier (octets)\\
+ \hline 6 & 2 octets & réservé (défaut: 0)\\
+ \hline 8 & 2 octets & réservé (défaut: 0)\\
+ \hline 10 & 4 octets & offset de la bitmap (octets)\\
+ \hline 10 & 4 octets & taille du BITMAPINFOHEADER (octets)\\
+ \hline 14 & 4 octets & largeur de l'image (pixels)\\
+ \hline 18 & 4 octets & hauteur de l'image (pixels)\\
+ \hline 22 & 2 octets & nombre de plans (défaut: 0001)\\
+ \hline 26 & 2 octets & nombre de bits par pixels (1, 4, 8, ou 24)\\
+ \hline 30 & 4 octets & type de compression (0=rien, 1=RLE-8, 2=RLE-4)\\
+ \hline 34 & 4 octets & taille de l'image padding inclus (octets)\\
+ \hline 38 & 4 octets & résolution horizontale (pixels)\\
+ \hline 42 & 4 octets & résolution verticale (pixels)\\
+ \hline 46 & 4 octets & nombre de couleurs ou 0\\
+ \hline 50 & 4 octets & nombre de couleurs importantes ou 0\\
+
+ \hline
+ \end{tabular}\newline\newline Figure 1 - BMP Header\end{center}
+
+ % ====================== %
+ % === SUBS 2 - PALET === %
+ % ====================== %
+ \subsection{La palette}
+ La palette permet de définir les différentes couleurs d'une image. Elle correspond à une liste de couleurs ou bien à un <> associé à un encodage spécifique. Elle dépend en premier lieu du nombre de bits par pixels. Cette valeur nous informe sur combien de bits est codée chaque couleur, les valeurs possibles sont 1, 4, 8, et 24. Le nombre de couleurs possibles dépend directement du \emph{bpp} (bits par pixels), plus il est grand, plus il y a de nuances. \begin{math}nbcouleurs = 2^{bpp}\end{math}. Les différents types de palette correspondant à un \emph{bpp} sont décrites ci-dessous.
+
+ % ======================== %
+ % === S2SECT 1 - 8 BPP === %
+ % ======================== %
+ \subsubsection{Encodage en 8 bits par pixels}
+ Pour une image encodée en 8 bits par pixels, chaque pixel est codé sur 1 octet. Il y a donc une possibilité de \begin{math}2^8 = 256\end{math} couleurs. Ces 256 couleurs sont définies dans la \emph{palette} sur 4 octets chacunes. Les 3 premiers octets contiennent les couleurs au format RGB, et le dernier octet est à "0", c'est un octet de bourrage car la taille du fichier doit être multiple de 4. Par exemple si l'on veut que la couleur "0" corresponde à du rouge (R=255,G=0,B=0), et la couleur 1 à du rose (R=255,G=0,B=255), la palette commencera par: \\\\
+ \begin{tabular}{|c|c|c|c|c|c|}
+ \hline
+ \textbf{rang}&\textbf{couleur}&\textbf{octet1}&\textbf{octet2}&\textbf{octet3}&\textbf{octet4}\\\hline
+ 0 & rouge & 255 & 0 & 0 & 0\\\hline
+ 1 & rose & 255 & 0 & 255 & 0\\\hline
+ .. & .. & .. & .. & .. & ..\\\hline
+ 255 & .. & .. & .. & .. & 0\\\hline
+ \end{tabular}\\\\
+ Par défaut, nous utilisons uniquement le codage en 8 bits par pixels pour des nuances de gris, notre palette a donc comme valeurs:\\\\
+ \begin{tabular}{|c|c|c|c|c|c|}
+ \hline
+ \textbf{rang}&\textbf{couleur}&\textbf{octetS}&\textbf{octet2}&\textbf{octet3}&\textbf{octet4}\\\hline
+ 0 & noir & 0 & 0 & 0 & 0\\\hline
+ 1 & noir & 1 & 1 & 1 & 0\\\hline
+ 2 & noir & 2 & 2 & 2 & 0\\\hline
+ .. & .. & .. & .. & .. & ..\\\hline
+ 254 & blanc & 254 & 254 & 254 & 0\\\hline
+ 255 & blanc & 255 & 255 & 255 & 0\\\hline
+ \end{tabular} * \begin{math}4\times256 = 1024\ octets\end{math} au total
+
+
+ % ========================= %
+ % === S2SECT 2 - 24 BPP === %
+ % ========================= %
+ \subsubsection{Encodage en 24 bits par pixels}
+ Pour une image encodée en 24 bits par pixels, chaque pixel est codé sur 3 octets au format BGR, ce format est équivalent au format RGB, mis à part l'ordre des octets qui est inversé, celà correspond à \begin{math}2^24 = 16.777.216\end{math} couleurs par pixels. La \emph{palette} associée est définie par défaut comme suit:\\\\
+ \begin{tabular}{|c|c|c|c|}
+ \hline
+ \textbf{Position (octets)}&\textbf{Taille (octets)}&\textbf{Valeur entière}&\textbf{Valeur ASCII}\\\hline
+ 0 & 1 & 66 & "B" \\\hline
+ 1 & 1 & 71 & "G" \\\hline
+ 2 & 1 & 82 & "R" \\\hline
+ 3 & 1 & 115 & "s" \\\hline
+ 4 & 48 & 0 & inconnu\\\hline
+ 52 & 1 & 2 & inconnu\\\hline
+ 53 & 15 & 0 & inconnu \\\hline
+ \end{tabular} * 68 octets au total
+
+
+ % ====================== %
+ % === SUBS 3 - BITMA === %
+ % ====================== %
+ \subsection{Le bitmap}
+
+ Le \emph{bitmap} du fichier (matrice de pixels) peut avoir plusieurs formats qui sont propres au nombre de bits par pixels et dépendent de la \emph{palette}. De plus la matrice est dans l'ordre inverse, c'est à dire que le premier pixel est en fait le dernier, il convient donc d'inverser les lignes et les colonnes. De manière générale les pixels sont enregistrés en une succession de lignes. Le nombre d'octets de chaque ligne doit être un multiple de 4, est donc ajouté en fin de ligne un <> composé de 0 à 3 octets ayant pour valeur zéro.
+
+
+
+
+
+
+ \newpage
+
+
+
+
+
+ % ====================== %
+ % === PART 3 - BRUIT === %
+ % ====================== %
+ \part*{Bruits}
+
+
+
+
+ % =================== %
+ % === SECT1 - P&S === %
+ % =================== %
+ \section{Le bruit de type <>}
+ \textbf{Définition graphique: }L'image est parsemée de pixels ayant une teinte extrême (blancs ou noirs) sans rapport avec leur contexte (voisinage).\\
+ \textbf{Bruitage: }Le bruitage se fait en fonction du paramètre réel \begin{math}seuil\in[0;1]\end{math}. Il y a donc \begin{math}n = seuil\times width\times height\end{math} couples \emph{(x, y)} aléatoires qui sont en noir ou blanc (choix aléatoire), ce qui correspond à \begin{math}(100\times seuil)\end{math} \% de la totalité des pixels.\\
+ \textbf{Débruitage: }L'image est débruitée en fonction de deux paramètres \emph{seuil} et \emph{borne}, tout deux compris dans \begin{math}[0;255]\end{math}. Chaque pixel est traité si et seulement si il est proche du noir ou du blanc, c'est-à-dire compris dans \begin{math}[0;borne]\end{math} pour le noir et dans \begin{math}[255-borne;255]\end{math} pour le blanc. Chaque pixel traité est comparé à la couleur moyenne de ses 8 voisins, si la différence avec sa couleur est supérieure à \emph{seuil}, le pixel se voit attribuer la couleur moyenne de ses voisins. Il est à noter que si borne vaut 255, tout les pixels seront traités, de même que si seuil vaut 255, tout les pixels traités se verront affecter la couleur moyenne de leurs voisins.\\\\
+ % effet 50%
+ \begin{figure}[!ht]
+ \centering
+ \begin{minipage}[t]{3cm}
+ \centering
+ \includegraphics[width=3cm,height=3cm]{lena.jpg}
+ Image originale
+ \end{minipage}
+ \begin{minipage}[t]{3cm}
+ \centering
+ \includegraphics[width=3cm,height=3cm]{SaltAndPepper_50.jpg}
+ Bruitée, seuil de 0.5
+ \end{minipage}
+ \begin{minipage}[t]{3cm}
+ \centering
+ \includegraphics[width=3cm,height=3cm]{UnSaltAndPepper_50.jpg}
+ Débruitée sans lissage
+ \end{minipage}
+ \begin{minipage}[t]{3cm}
+ \centering
+ \includegraphics[width=3cm,height=3cm]{UnSaltAndPepperLiss_50.jpg}
+ Débruitée avec lissage
+ \end{minipage}
+ \end{figure}
+
+ % effet 50% (zoom)
+ \begin{figure}[!ht]
+ \centering
+ \begin{minipage}[t]{3cm}
+ \centering
+ \includegraphics[width=3cm,height=3cm]{lenaZOOM.jpg}
+ Image originale (zoom)
+ \end{minipage}
+ \begin{minipage}[t]{3cm}
+ \centering
+ \includegraphics[width=3cm,height=3cm]{SaltAndPepper_50ZOOM.jpg}
+ Bruitée, seuil de 0.5 (zoom)
+ \end{minipage}
+ \begin{minipage}[t]{3cm}
+ \centering
+ \includegraphics[width=3cm,height=3cm]{UnSaltAndPepper_50ZOOM.jpg}
+ Débruitée sans lissage (zoom)
+ \end{minipage}
+ \begin{minipage}[t]{3cm}
+ \centering
+ \includegraphics[width=3cm,height=3cm]{UnSaltAndPepperLiss_50ZOOM.jpg}
+ Débruitée avec lissage (zoom)
+ \end{minipage}
+ \end{figure}
+ On remarque bien ici que les contours subissent un <> ce qui dégrade en majeure partie le rendu. Par contre, les couleurs sont convenablement restituées, de même pour les teintes et contrastes. Il suffirait de traiter l'image en prenant en compte les contours, ce qui permettrait de gagner en qualité.
+
+
+\end{document}
\ No newline at end of file
diff --git a/dossier/SaltAndPepper_50.jpg b/dossier/SaltAndPepper_50.jpg
new file mode 100644
index 0000000..dabf8dd
Binary files /dev/null and b/dossier/SaltAndPepper_50.jpg differ
diff --git a/dossier/SaltAndPepper_50ZOOM.jpg b/dossier/SaltAndPepper_50ZOOM.jpg
new file mode 100644
index 0000000..44404f2
Binary files /dev/null and b/dossier/SaltAndPepper_50ZOOM.jpg differ
diff --git a/dossier/UnSaltAndPepperLiss_50.jpg b/dossier/UnSaltAndPepperLiss_50.jpg
new file mode 100644
index 0000000..5fab904
Binary files /dev/null and b/dossier/UnSaltAndPepperLiss_50.jpg differ
diff --git a/dossier/UnSaltAndPepperLiss_50ZOOM.jpg b/dossier/UnSaltAndPepperLiss_50ZOOM.jpg
new file mode 100644
index 0000000..f00b682
Binary files /dev/null and b/dossier/UnSaltAndPepperLiss_50ZOOM.jpg differ
diff --git a/dossier/UnSaltAndPepper_50.jpg b/dossier/UnSaltAndPepper_50.jpg
new file mode 100644
index 0000000..7b4bbaa
Binary files /dev/null and b/dossier/UnSaltAndPepper_50.jpg differ
diff --git a/dossier/UnSaltAndPepper_50ZOOM.jpg b/dossier/UnSaltAndPepper_50ZOOM.jpg
new file mode 100644
index 0000000..e4f08b8
Binary files /dev/null and b/dossier/UnSaltAndPepper_50ZOOM.jpg differ
diff --git a/dossier/dossier.pdf b/dossier/dossier.pdf
new file mode 100644
index 0000000..93abc5e
Binary files /dev/null and b/dossier/dossier.pdf differ
diff --git a/dossier/dossier.tex b/dossier/dossier.tex
new file mode 100644
index 0000000..9ba3df2
--- /dev/null
+++ b/dossier/dossier.tex
@@ -0,0 +1,290 @@
+\documentclass{article}
+\usepackage[utf8]{inputenc}
+\usepackage[usenames,dvipsnames,svgnames,table]{xcolor}
+\usepackage{amsmath,amsfonts}
+\usepackage{lmodern}
+\usepackage{graphicx} % permet l'insertion d'images
+\usepackage[left=2cm,right=2cm,top=2cm,bottom=2cm]{geometry}
+
+% Définition des symboles
+\newcommand{\N}{\mathbb{N}} % \N pour les entiers naturels
+\newcommand{\R}{\mathbb{R}} % \R pour les réels
+\newcommand\V[1]{\overrightarrow{#1}} % $\V{AB}$ pour les vecteurs
+
+\title{TRAITEMENT D'IMAGE\\Débruitage}
+\author{Adrien MARQUÈS - Alexis HELSON }
+\date{Septembre 2015}
+
+\begin{document}
+
+ \maketitle
+
+ % ======================== %
+ % === PART 1 - PRELUDE === %
+ % ======================== %
+ \part*{Prélude}
+
+ % ====================== %
+ % === SECT 1 - INTRO === %
+ % ====================== %
+ \section{Introduction}
+ Cette étude vise à améliorer les méthodes de \emph{nettoyage d'image}, et donc de développer un programme universel de débruitage, c'est-à-dire qu'il réduirait convenablement tout type de bruit, dépendant toutefois de paramètres adaptés à chacun.
+ \begin{center} \emph{Avant d'essayer d'améliorer quelque chose, il faut d'abord le comprendre.} \end{center}
+ Nous avons donc commencé par lire des études sur débruitage, la détection de contours, de formes, et la vectorisation d'images.
+ \noindent Pour cela, nous avont étudié:
+ \begin{description}
+ \item[ - Le débruitage standard,]c'est à dire les méthodes déjà existantes.
+ \item[ - Le filtrage par convolution,]afin de mettre en valeur les contours et formes.
+ \item[ - La détection de formes,]afin d'effectuer un débruitage sans <>.
+ \item[ - La détection de contours,]afin d'optimiser la détection de formes.
+ \end{description}
+ Le programme a été développé en Python2 pour la simplicité et efficacité du langage. Le code est disponible sur Github à l'adresse suivante:
+ \begin{center} \textcolor{blue}{https://github.com/xdrm-brackets/bmp\_python} \end{center}
+
+
+
+
+
+ % =========================== %
+ % === SECT 2 - ARCHI PROG === %
+ % =========================== %
+ \section{Architecture et structure du programme}
+
+ \begin{description}
+ \item \textbf{racine/}
+ \begin{description}
+ \item \textbf{main.py} \hfill \\
+ Programme principal, il affiche une interface (en console) permettant d'éxécuter une des opérations disponibles.
+ \item \textbf{tests.py} \hfill \\
+ Contient les corps de toutes le opérations pouvant être choisies dans le programme principal.
+ \item \textbf{BMPFile.py} \hfill \\
+ Contient les structures \emph{BMPFile}, \emph{BMPContent}, \emph{BMPHeader}, permettant d'encoder et de décoder un fichier BMP. Ainsi que la strucure \emph{RGBPixel} permettant de coder un pixel.
+ \item \textbf{Noise.py} \hfill \\
+ Contient tout les traitements tels que les bruitages et débruitages, les filtres, et les détections de formes et contours. (il importe tout le dossier \emph{utility})
+ \item \textbf{utility/}
+ \begin{description}
+ \item \textbf{SaltAndPepper\_Noise.py} \hfill \\
+ Contient les méthodes de bruitage et débruitage du bruit de type \emph{Poivre \& Sel}.
+ \item \textbf{Additive\_Noise.py} \hfill \\
+ Contient les méthodes de bruitage et débruitage du bruit de type \emph{additif}.
+ \item \textbf{Gaussian\_Noise.py} \hfill \\
+ Contient les méthodes de bruitage et débruitage du bruit de type \emph{gaussien}.
+ \item \textbf{Multiplicative\_Noise.py} \hfill \\
+ Contient les méthodes de bruitage et débruitage du bruit de type \emph{multiplicatif}.
+ \item \textbf{Color\_Noise.py} \hfill \\
+ Contient les méthodes de bruitage et débruitage du bruit de type \emph{multicolore}.
+ \item \textbf{Filter.py} \hfill \\
+ Contient les méthodes de filtrage (standard et par convolution).
+ \item \textbf{Shape.py} \hfill \\
+ Contient les méthodes de détection de formes et de contours
+
+ \end{description}
+ \end{description}
+ \end{description}
+
+ Le fichier \textbf{tests.py} utilise la structure \emph{BMPFile} afin de lire/écrire les fichiers ainsi que la structure \emph{Noise} qui contient toutes les méthodes de bruitage et de débruitage, les filtres et les détections de formes et de contours. Le fichier \emph{\textbf{Noise.py}} (qui contient la structure de même nom) appelle les différents fichiers contenus dans le dossier \textbf{utility}. Les fichiers contenus dans \textbf{utility} peuvent être:\\
+ - Un fichier qui contient toutes les méthodes pour un type de bruit (bruitage et débruitage)\\
+ - Le fichier \emph{Filters.py} qui contient toutes les méthodes de filtrage\\
+ - Le fichier \emph{Shapes.py} qui contient toutes les méthodes de détection de formes et contours
+
+ % ========================= %
+ % === SECT 2 - VARIABLE === %
+ % ========================= %
+ \section{Variables globales}
+ Ces valeurs seront utilisées pour la majeure partie des calculs et correspondent à des notations générales à l'image ou aux autres notations utilisées.\\
+ Soit \begin{math}(width, height)\in\N^2\end{math}, respectivement la largeur et la hauteur de l'image en pixels.\\
+ Soit la matrice \begin{math}I_{height, width}\end{math} correspondant à la répartition des pixels dans l'image. Il est à noter qu'en accord avec le langage de programmation, les indices de la matrices prendront leurs valeurs dans [0;width-1] et [0;height-1] et non dans [1;width] et [1;height].\\
+ Soit le couple \begin{math}(x,y)\in\N^2\end{math}, les coordonnés d'un pixel dans I, tel que \begin{math}x\in[0;width[,\ et\ y\in[0;height[\end{math}.\\
+ Soit \begin{math}\vec{u}\end{math} le vecteur associé à une unité de contour, tel que \begin{math}||\vec{u}|| = 1,\ et\ sa\ direction\ d =\frac{n\pi}{2}[2\pi]\ rad,\ avec\ n\in\N\end{math}.\\
+ Soit \begin{math}K_n\end{math}, la matrice carré d'ordre \emph{n}. Par exemple \begin{math}K_3 = \begin{pmatrix}k_1&k_2&k_3\\k_4&k_5&k_6\\k_7&k_8&k_9\\\end{pmatrix}\end{math}\\\\
+
+
+
+ \newpage
+
+
+
+ % ========================= %
+ % === PART 2 - ENCODAGE === %
+ % ========================= %
+ \part*{Encodage et décodage de fichiers}
+
+ % =============================== %
+ % === SECT 1 - FONCTIONNEMENT === %
+ % =============================== %
+ \section{Fonctionnement global}
+ La lecture et l'écriture des fichiers se fait octet par octet, la structure \emph{BMPFile} permet de transformer les octets d'un fichier BMP en matrice de pixels, et inversement, de transformer une matrice de pixels en fichier BMP. Les types d'encodage des couleurs pris en charge sont 8 (nuance de gris), et 24 (rouge, vert, bleu) bits par pixels. Les pixels sont du type \emph{RGBPixel}, ce type contient les coordonnées du pixel (x, y), ainsi que sa couleur au format RGB (rouge, vert, bleu) chaque nuance prend sa valeur entre 0 et 255.
+ \\\par Le seul format pris en charge est le format BMP. Pour que le programme fonctionne avec d'autres formats (jpeg, png, gif, etc), il suffirait de récupérer une matrice de \emph{RGBPixel} à partir d'une image. Toutes les méthodes de traitement d'image du programme agissent uniquement sur cette matrice. Il serait ainsi possible de convertir une image vers un autre format. Le fichier BMP peut se décomposer en 3 parties:
+ \begin{description}
+ \item - Le \emph{header} donne des informations sur le fichier et son contenu. \hfill\\
+ Sa taille est de 54 octets.
+ \item - La \emph{palette} donne des informations sur l'encodage des couleurs. \hfill\\
+ Sa taille est variable, elle est donnée dans le header.
+ \item - Le \emph{bitmap} est la matrice de pixels, c'est le <> du fichier. \hfill\\
+ Sa taille est variable, elle est donnée dans le header.
+ \end{description}
+
+
+ % ====================== %
+ % === SUBS 1 - HEADE === %
+ % ====================== %
+ \subsection{Le header}
+ Le header fournit des informations sur le fichier, sur l'image, sur la palette et sur les tailles et positions des différentes parties. Il est
+ \begin{center}\begin{tabular}{|c|c|l|}
+ \hline \textbf{Position (octets)} & \textbf{Taille} & \textbf{Libellé}\\
+ \hline 0 & 2 octets & signature, toujours 4D42\\
+ \hline 2 & 4 octets & taille du fichier (octets)\\
+ \hline 6 & 2 octets & réservé (défaut: 0)\\
+ \hline 8 & 2 octets & réservé (défaut: 0)\\
+ \hline 10 & 4 octets & offset de la bitmap (octets)\\
+ \hline 10 & 4 octets & taille du BITMAPINFOHEADER (octets)\\
+ \hline 14 & 4 octets & largeur de l'image (pixels)\\
+ \hline 18 & 4 octets & hauteur de l'image (pixels)\\
+ \hline 22 & 2 octets & nombre de plans (défaut: 0001)\\
+ \hline 26 & 2 octets & nombre de bits par pixels (1, 4, 8, ou 24)\\
+ \hline 30 & 4 octets & type de compression (0=rien, 1=RLE-8, 2=RLE-4)\\
+ \hline 34 & 4 octets & taille de l'image padding inclus (octets)\\
+ \hline 38 & 4 octets & résolution horizontale (pixels)\\
+ \hline 42 & 4 octets & résolution verticale (pixels)\\
+ \hline 46 & 4 octets & nombre de couleurs ou 0\\
+ \hline 50 & 4 octets & nombre de couleurs importantes ou 0\\
+
+ \hline
+ \end{tabular}\newline\newline Figure 1 - BMP Header\end{center}
+
+ % ====================== %
+ % === SUBS 2 - PALET === %
+ % ====================== %
+ \subsection{La palette}
+ La palette permet de définir les différentes couleurs d'une image. Elle correspond à une liste de couleurs ou bien à un <> associé à un encodage spécifique. Elle dépend en premier lieu du nombre de bits par pixels. Cette valeur nous informe sur combien de bits est codée chaque couleur, les valeurs possibles sont 1, 4, 8, et 24. Le nombre de couleurs possibles dépend directement du \emph{bpp} (bits par pixels), plus il est grand, plus il y a de nuances. \begin{math}nbcouleurs = 2^{bpp}\end{math}. Les différents types de palette correspondant à un \emph{bpp} sont décrites ci-dessous.
+
+ % ======================== %
+ % === S2SECT 1 - 8 BPP === %
+ % ======================== %
+ \subsubsection{Encodage en 8 bits par pixels}
+ Pour une image encodée en 8 bits par pixels, chaque pixel est codé sur 1 octet. Il y a donc une possibilité de \begin{math}2^8 = 256\end{math} couleurs. Ces 256 couleurs sont définies dans la \emph{palette} sur 4 octets chacunes. Les 3 premiers octets contiennent les couleurs au format RGB, et le dernier octet est à "0", c'est un octet de bourrage car la taille du fichier doit être multiple de 4. Par exemple si l'on veut que la couleur "0" corresponde à du rouge (R=255,G=0,B=0), et la couleur 1 à du rose (R=255,G=0,B=255), la palette commencera par: \\\\
+ \begin{tabular}{|c|c|c|c|c|c|}
+ \hline
+ \textbf{rang}&\textbf{couleur}&\textbf{octet1}&\textbf{octet2}&\textbf{octet3}&\textbf{octet4}\\\hline
+ 0 & rouge & 255 & 0 & 0 & 0\\\hline
+ 1 & rose & 255 & 0 & 255 & 0\\\hline
+ .. & .. & .. & .. & .. & ..\\\hline
+ 255 & .. & .. & .. & .. & 0\\\hline
+ \end{tabular}\\\\
+ Par défaut, nous utilisons uniquement le codage en 8 bits par pixels pour des nuances de gris, notre palette a donc comme valeurs:\\\\
+ \begin{tabular}{|c|c|c|c|c|c|}
+ \hline
+ \textbf{rang}&\textbf{couleur}&\textbf{octetS}&\textbf{octet2}&\textbf{octet3}&\textbf{octet4}\\\hline
+ 0 & noir & 0 & 0 & 0 & 0\\\hline
+ 1 & noir & 1 & 1 & 1 & 0\\\hline
+ 2 & noir & 2 & 2 & 2 & 0\\\hline
+ .. & .. & .. & .. & .. & ..\\\hline
+ 254 & blanc & 254 & 254 & 254 & 0\\\hline
+ 255 & blanc & 255 & 255 & 255 & 0\\\hline
+ \end{tabular} * \begin{math}4\times256 = 1024\ octets\end{math} au total
+
+
+ % ========================= %
+ % === S2SECT 2 - 24 BPP === %
+ % ========================= %
+ \subsubsection{Encodage en 24 bits par pixels}
+ Pour une image encodée en 24 bits par pixels, chaque pixel est codé sur 3 octets au format BGR, ce format est équivalent au format RGB, mis à part l'ordre des octets qui est inversé, celà correspond à \begin{math}2^24 = 16.777.216\end{math} couleurs par pixels. La \emph{palette} associée est définie par défaut comme suit:\\\\
+ \begin{tabular}{|c|c|c|c|}
+ \hline
+ \textbf{Position (octets)}&\textbf{Taille (octets)}&\textbf{Valeur entière}&\textbf{Valeur ASCII}\\\hline
+ 0 & 1 & 66 & "B" \\\hline
+ 1 & 1 & 71 & "G" \\\hline
+ 2 & 1 & 82 & "R" \\\hline
+ 3 & 1 & 115 & "s" \\\hline
+ 4 & 48 & 0 & inconnu\\\hline
+ 52 & 1 & 2 & inconnu\\\hline
+ 53 & 15 & 0 & inconnu \\\hline
+ \end{tabular} * 68 octets au total
+
+
+ % ====================== %
+ % === SUBS 3 - BITMA === %
+ % ====================== %
+ \subsection{Le bitmap}
+
+ Le \emph{bitmap} du fichier (matrice de pixels) peut avoir plusieurs formats qui sont propres au nombre de bits par pixels et dépendent de la \emph{palette}. De plus la matrice est dans l'ordre inverse, c'est à dire que le premier pixel est en fait le dernier, il convient donc d'inverser les lignes et les colonnes. De manière générale les pixels sont enregistrés en une succession de lignes. Le nombre d'octets de chaque ligne doit être un multiple de 4, est donc ajouté en fin de ligne un <> composé de 0 à 3 octets ayant pour valeur zéro.
+
+
+
+
+
+
+ \newpage
+
+
+
+
+
+ % ====================== %
+ % === PART 3 - BRUIT === %
+ % ====================== %
+ \part*{Bruits}
+
+
+
+
+ % =================== %
+ % === SECT1 - P&S === %
+ % =================== %
+ \section{Le bruit de type <>}
+ \textbf{Définition graphique: }L'image est parsemée de pixels ayant une teinte extrême (blancs ou noirs) sans rapport avec leur contexte (voisinage).\\
+ \textbf{Bruitage: }Le bruitage se fait en fonction du paramètre réel \begin{math}seuil\in[0;1]\end{math}. Il y a donc \begin{math}n = seuil\times width\times height\end{math} couples \emph{(x, y)} aléatoires qui sont en noir ou blanc (choix aléatoire), ce qui correspond à \begin{math}(100\times seuil)\end{math} \% de la totalité des pixels.\\
+ \textbf{Débruitage: }L'image est débruitée en fonction de deux paramètres \emph{seuil} et \emph{borne}, tout deux compris dans \begin{math}[0;255]\end{math}. Chaque pixel est traité si et seulement si il est proche du noir ou du blanc, c'est-à-dire compris dans \begin{math}[0;borne]\end{math} pour le noir et dans \begin{math}[255-borne;255]\end{math} pour le blanc. Chaque pixel traité est comparé à la couleur moyenne de ses 8 voisins, si la différence avec sa couleur est supérieure à \emph{seuil}, le pixel se voit attribuer la couleur moyenne de ses voisins. Il est à noter que si borne vaut 255, tout les pixels seront traités, de même que si seuil vaut 255, tout les pixels traités se verront affecter la couleur moyenne de leurs voisins.\\\\
+ % effet 50%
+ \begin{figure}[!ht]
+ \centering
+ \begin{minipage}[t]{3cm}
+ \centering
+ \includegraphics[width=3cm,height=3cm]{lena.jpg}
+ Image originale
+ \end{minipage}
+ \begin{minipage}[t]{3cm}
+ \centering
+ \includegraphics[width=3cm,height=3cm]{SaltAndPepper_50.jpg}
+ Bruitée, seuil de 0.5
+ \end{minipage}
+ \begin{minipage}[t]{3cm}
+ \centering
+ \includegraphics[width=3cm,height=3cm]{UnSaltAndPepper_50.jpg}
+ Débruitée sans lissage
+ \end{minipage}
+ \begin{minipage}[t]{3cm}
+ \centering
+ \includegraphics[width=3cm,height=3cm]{UnSaltAndPepperLiss_50.jpg}
+ Débruitée avec lissage
+ \end{minipage}
+ \end{figure}
+
+ % effet 50% (zoom)
+ \begin{figure}[!ht]
+ \centering
+ \begin{minipage}[t]{3cm}
+ \centering
+ \includegraphics[width=3cm,height=3cm]{lenaZOOM.jpg}
+ Image originale (zoom)
+ \end{minipage}
+ \begin{minipage}[t]{3cm}
+ \centering
+ \includegraphics[width=3cm,height=3cm]{SaltAndPepper_50ZOOM.jpg}
+ Bruitée, seuil de 0.5 (zoom)
+ \end{minipage}
+ \begin{minipage}[t]{3cm}
+ \centering
+ \includegraphics[width=3cm,height=3cm]{UnSaltAndPepper_50ZOOM.jpg}
+ Débruitée sans lissage (zoom)
+ \end{minipage}
+ \begin{minipage}[t]{3cm}
+ \centering
+ \includegraphics[width=3cm,height=3cm]{UnSaltAndPepperLiss_50ZOOM.jpg}
+ Débruitée avec lissage (zoom)
+ \end{minipage}
+ \end{figure}
+ On remarque bien ici que les contours subissent un <> ce qui dégrade en majeure partie le rendu. Par contre, les couleurs sont convenablement restituées, de même pour les teintes et contrastes. Il suffirait de traiter l'image en prenant en compte les contours, ce qui permettrait de gagner en qualité.
+
+
+\end{document}
\ No newline at end of file
diff --git a/dossier/lena.jpg b/dossier/lena.jpg
new file mode 100644
index 0000000..ee49a9a
Binary files /dev/null and b/dossier/lena.jpg differ
diff --git a/dossier/lenaZOOM.jpg b/dossier/lenaZOOM.jpg
new file mode 100644
index 0000000..821a5e8
Binary files /dev/null and b/dossier/lenaZOOM.jpg differ