\documentclass[12pt,a4paper]{article}

\usepackage{commandes2}
\usepackage[left=1cm,right=1cm,top=1cm,bottom=2cm]{geometry}
%\pagestyle{empty}
\usepackage{pstricks-add}
\usepackage{enumitem}
\usepackage{hyperref}
																	
																	
\title{}
\date{}
\author{}

\begin{document}

\begin{center} \begin{LARGE} \textbf{La photographie numérique} \end{LARGE}\\[5pt]
				\begin{Large}
			-Fiche 4-Compression JPEG	\end{Large}				 
\end{center}


L'objectif de ce TP est de comprendre les grandes lignes de la compression JPEG. 

\section*{Activité 1} 

Nous allons compresser étape par étape l'image \og gradient.bmp\fg{}. Cette image est de dimensions $8\times 8$ pixels (ce qui est tout petit).  Pour la visualiser, ouvrir l'image \og gradient\_agrandi.bmp \fg{} qui est un agrandissement de l'image \og gradient.bmp\fg{}. Ouvrir le programme \og compression.py \fg{} et l'exécuter. 
	
	\subsection*{\'Etape 1 :}
		 La première étape consiste à fabriquer la matrice contenant les niveaux de gris de l'image. Pour cela, le programme importe l'image \og gradient.bmp \fg{} dans la variable gradient et définie une fonction nommée matrice qui réalisera la transformation de l'image en matrice. Dans l'interpréteur, taper les instructions  
		 \begin{center}
		 matrice\_gradient=matrice(gradient)\\
		 print(matrice\_gradient)
		 \end{center} 
	et compléter la matrice ci-dessous renvoyée par le programme :
		
		
		$$		
		\text{matrice\_gradient}=		
		\begin{pmatrix}
					...	&	...	&	...	&...&...	&...	&... &...	\\
					...	&	...	&	...	&...&...	&...	&... &...	\\
					...	&	...	&	...	&...&...	&...	&... &...	\\
					...	&	...	&	...	&...&...	&...	&... &...	\\
					...	&	...	&	...	&...&...	&...	&... &...	\\
					...	&	...	&	...	&...&...	&...	&... &...	\\
					...	&	...	&	...	&...&...	&...	&... &...	\\
					...	&	...	&	...	&...&...	&...	&... &...	\\
			\end{pmatrix}$$

		Ajouter une question définissant la position dans une matrice.

	\subsection*{\'Etape 2 :}
		L'étape suivante consiste à appliquer une transformation appelée la transformée en cosinus discrète à la matrice précédente. Cette transformation est définie dans le programme par la fonction \og matrice\_dct\fg{}. Taper les instructions 
		\begin{center}		
		matrice\_gradient\_dct=matrice\_dct(matrice\_gradient)\\
		print(matrice\_gradient\_dct)
		\end{center} 
	dans l'interpréteur et compléter la matrice ci-dessous renvoyée par le programme : 
		
		$$\text{matrice\_gradient\_dct}=\begin{pmatrix}
					...	&	...	&	...	&...&...	&...	&... &...	\\
					...	&	...	&	...	&...&...	&...	&... &...	\\
					...	&	...	&	...	&...&...	&...	&... &...	\\
					...	&	...	&	...	&...&...	&...	&... &...	\\
					...	&	...	&	...	&...&...	&...	&... &...	\\
					...	&	...	&	...	&...&...	&...	&... &...	\\
					...	&	...	&	...	&...&...	&...	&... &...	\\
					...	&	...	&	...	&...&...	&...	&... &...	\\
			\end{pmatrix}$$
			
	En observant les lignes ... du programme, pouvez-vous dire quels sont les coefficients de la matrice de départ utilisés pour calculer le coefficient en ligne 1 et colonne 1 de la matrice matrice\_gradient\_dct ?\\
	.\dotfill\\			
			
			
			Cette transformation est réversible, c'est-à-dire que l'on peut appliquer à cette dernière matrice une transformation qui renvoie la matrice de départ. Cette transformation est appelée \og transformation en cosinus discrète inverse\fg{}. Taper l' instruction
				\begin{center}
					print(matrice\_idct(matrice\_gradient\_dct))
				\end{center}
	dans l'interpréteur et comparer le résultat avec la matrice de départ.
	Que constatez-vous ? \\
	.\dotfill
	
	
	\subsection*{\'Etape 3 :}
	On peut constater que la matrice renvoyée par la transformée en cosinus discrète comporte beaucoup de nombres nuls ou proche de 0. Les coefficients   prépondérants étant regroupés en haut à gauche de la matrice. L'objectif de cette étape, appelée quantification, est de ramener à 0 tous les coefficients de la matrice qui en sont proches. La quantification est l'étape de l'algorithme de compression JPEG au cours de laquelle se produit la majeure partie de la perte d'information (et donc de la qualité visuelle), mais c'est aussi celle qui permet de gagner le plus de place (contrairement à la transformée en cosinus discrète qui ne compresse pas).
	Taper les instructions
		\begin{center}
			matrice\_gradient\_quantifiee=quantification(matrice\_gradient\_dct)\\
			print(matrice\_gradient\_quantifiee)
		\end{center}
		
	dans l'interpréteur et compléter la matrice ci-dessous renvoyée par le programme :
	
	
	$$\text{matrice\_gradient\_quantifiee}=\begin{pmatrix}
					...	&	...	&	...	&...&...	&...	&... &...	\\
					...	&	...	&	...	&...&...	&...	&... &...	\\
					...	&	...	&	...	&...&...	&...	&... &...	\\
					...	&	...	&	...	&...&...	&...	&... &...	\\
					...	&	...	&	...	&...&...	&...	&... &...	\\
					...	&	...	&	...	&...&...	&...	&... &...	\\
					...	&	...	&	...	&...&...	&...	&... &...	\\
					...	&	...	&	...	&...&...	&...	&... &...	\\
			\end{pmatrix}$$
			
	\`A la fin de cette étape, l'information obtenue est appelée l'image compressée selon le format JPEG.
	

	\subsection*{\'Etape 4 :}
	 Il s'agit désormais de réaliser toutes les étapes dans le sens inverse pour obtenir l'image après compression/décompression JPEG. On commence par déquantifier la matrice obtenue à l'étape 3. Taper les instructions
		\begin{center}
			matrice\_gradient\_dequantifiee=dequantification(matrice\_gradient\_quantifiee)\\
			print(matrice\_gradient\_dequantifiee)
		\end{center}
		
	dans l'interpréteur et compléter la matrice ci-dessous renvoyée par le programme :
	
	
	$$\text{matrice\_gradient\_dequantifiee}=\begin{pmatrix}
					...	&	...	&	...	&...&...	&...	&... &...	\\
					...	&	...	&	...	&...&...	&...	&... &...	\\
					...	&	...	&	...	&...&...	&...	&... &...	\\
					...	&	...	&	...	&...&...	&...	&... &...	\\
					...	&	...	&	...	&...&...	&...	&... &...	\\
					...	&	...	&	...	&...&...	&...	&... &...	\\
					...	&	...	&	...	&...&...	&...	&... &...	\\
					...	&	...	&	...	&...&...	&...	&... &...	\\
			\end{pmatrix}$$
			
	\subsection*{\'Etape 5 :}
	Comme expliqué dans l'étape 2, la transformée en cosinus discrète est réversible. Appliquons la transformée en cosinus discrète inverse à la matrice précédente. Taper les instructions
	Taper les instructions
		\begin{center}
			matrice\_gradient\_idct=matrice\_idct(matrice\_gradient\_dequantifiee)\\
			print(matrice\_gradient\_idct)
		\end{center}
		
	dans l'interpréteur et compléter la matrice ci-dessous renvoyée par le programme :
	
	
	$$\text{matrice\_gradient\_idct}=\begin{pmatrix}
					...	&	...	&	...	&...&...	&...	&... &...	\\
					...	&	...	&	...	&...&...	&...	&... &...	\\
					...	&	...	&	...	&...&...	&...	&... &...	\\
					...	&	...	&	...	&...&...	&...	&... &...	\\
					...	&	...	&	...	&...&...	&...	&... &...	\\
					...	&	...	&	...	&...&...	&...	&... &...	\\
					...	&	...	&	...	&...&...	&...	&... &...	\\
					...	&	...	&	...	&...&...	&...	&... &...	\\
			\end{pmatrix}$$
			
	\subsection*{\'Etape 6 :}
	Il reste enfin à reconstruire l'image à partir de la matrice précédente. Cette opération est réalisée par la fonction image. Taper les instructions 
	\begin{center}
		gradient\_compresse=image(matrice\_gradient\_idct)\\*
		gradient\_compresse.show()
	\end{center}
	
	On constate que les images gradient et gradient\_compresse semblent identiques, cependant elles sont trop petites pour que l'on puisse se faire une idée précise de la qualité de l'image compressée.
	
\section*{Activité 2}
	L'objectif de cette activité est d'appliquer les principes présentés dans l'activité 1 sur une image plus grande : \og joconde\_gris.png \fg{}. 
	Ouvrir le programme \og compression joconde.py \fg{} et l'exécuter. \textbf{ATTENTION, l'exécution de ce programme peut prendre plusieurs minutes !} Comparer alors la qualité des images de la Joconde obtenues. \\
	Dans l'interpréteur, taper l'instruction 
		\begin{center}	
	joconde\_compresse.save("joconde\_compresse.jpeg")
		\end{center}
	
	Comparons alors la taille des fichiers.
	\begin{enumerate}
		\item Quelle est la taille en ko de l'image \og joconde\_gris.png \fg{} ? \dotfill
		\item Quelle est la taille en ko de \og joconde\_compresse.jpeg \fg{} ? \dotfill
	\end{enumerate}
	
	
	
\end{document}