Commit 41efb086 authored by Pierre-antoine Comby's avatar Pierre-antoine Comby

migrate 455 from drive

parent 641e245f
\documentclass[main.tex]{subfiles}
\begin{document}
\paragraph{Pourquoi a-t-on besoin du codage de source ?}
Un téléviseur HD affiche des images de 1920 x 1080 pixels. Chaque pixel est formé d'une combinaison de 3 couleurs RGB, chacune des couleurs étant codée par un nombre sur 8, 10 ou 12 bits. À raison de 25, 50 ou 60 images par seconde, le débit nécessaire est R= 1920 x 1080 x 3 x 8 x 25 = 1,22 Gbits par seconde. \\
En 4G, le débit maximal est de 100 Mbits par seconde (quand on est seul dans la zone) et en ADSL, il est de 20 Mbits par seconde.
Il faut compresser les données avec un facteur 100 au minimum.\\
\emph{"Le taux minimum c'est 25 images par seconde, pour pas avoir l'impression de regarder un dessin animé japonais."}
\emph{"Des émissions mettent volontairement moins pour qu'on ait l'impression d'avoir trop bu en regardant la télé."}\\
\paragraph{Comment faire de la compression?} Quelles propriétés du signal vidéo peut-on utiliser pour réaliser de la compression?
On utilise la redondance statistique. Par exemple, pour la vision (ou tech 3D) on utilise les petites différences pour obtenir la profondeur. De la même façon, en stéréo on a deux micros pour l'enregistrement. C'est la ressemblance entre les deux signaux qui nous intéresse ici pour effectuer la compression.\\
La compression est possible à cause de plusieurs propriétés:
\begin{itemize}
\item La corrélation temporelle (ressemblance entre deux image successives d'une vidéo ou échantillons audio successifs).
\item La corrélation spatiale (le fait que certaines zones présentes sont relativement uniforme, ressemblance entre deux pixels voisins).
\item La corrélation spectrale (ressemblance entre les composantes R, G et B d'une image).
\item Les propriétés statistiques du signal (un texte contient plus de "e" que de "z" en général).
\end{itemize}
\paragraph{Exemple d'une chaîne de compression vidéo}
On considère une vidéo mono-vue (pas en 3D) codée en niveaux de gris.\\
\underline{Transformation}: On applique une transformation à l'image, c'est à dire que l'on cherche à exprimer les blocs de l'image dans une base autre que la base canonique, pour permettre une compression plus facile.\\
Par exemple :
$\begin{pmatrix}1&1\\1&1\end{pmatrix}$ permet de décrire les zones constantes
$\begin{pmatrix}1&1\\-1&-1\end{pmatrix}$ pour décrire les variations verticales, et
$\begin{pmatrix}1&-1\\1&-1\end{pmatrix}$ pour une variation horizontale.\\
\underline{Quantification}: Elle permet de représenter les pixels transformés sur un nombre limité de bits (et d'en mettre plein à 0). Cette opération est irréversible.\\
\underline{Codeur entropique}: Il exploite la redondance statistique des coefficients quantifiés (il prend les successions et les compresse). On ne peut pas encore envoyer les données sur le réseaux, il faut appliquer un standard de compression.\\
\underline{Standard de compression}: Détermine la manière dont les bits en sortie sont organisés. (constitue les paquets, les numérote etc.)\\
On peut alors transmettre l'image. Une fois récupérée, on applique un décodage entropique, puis un désindexation et enfin une transformation inverse.\\
La désindexation permet d'obtenir à partir d'un coefficient quantifié, un nombre qui a la même dynamique qu'un coefficient transformé.(exemple: permet de retrouver un nombre à la bonne échelle, même si ce nombre n'est pas exactement le même).
\begin{figure}[H]
\centering
\begin{tikzpicture}
\sbEntree{E}
\sbBlocL{t}{Transformée}{E}
\sbBlocL{q}{Quantificateur}{t}
\sbBlocL{c}{Codeur entropique}{q}
\sbSortie{S}{c}
\end{tikzpicture}
\begin{figure}[H]
\centering
\caption{utilisation d'un décodeur local}
\end{figure}
\caption{Chaine de compression}
\end{figure}
\begin{figure}[H]
\centering
\begin{tikzpicture}
\sbEntree{E}
\sbBlocL{d}{decodeur entropique}{E}
\sbBlocL{D}{Désindexeur}{d}
\sbBlocL{t}{Transformée inverse}{D}
\sbSortie{S}{t}
\end{tikzpicture}
\caption{Chaine de décompression}
\end{figure}
\paragraph{Comment transmettre une vidéo?} appliquer ce shcéma (JPEG) à chaque image et transmettre? non, trop lourd.
On peut comparer l'image 2 à l'image précédente non pas 1 mais $\hat{1}$ l'estimée de l'image reçue par le récepteur, et l'on envoie la différence. Puis pour envoyer l'image 3, on estime la différence précédente, on y ajoute l'image estimée de la première image et on calcule la différence, que l'on envoie au travers des différentes transformations. Et ainsi de suite.\\
De ce fait, au niveau du récepteur on mémorise l'image précédente à laquelle on ajoute les différences.\\
Cette structure de codeur était celle des premiers codeurs vidéo (H261, MPEPZ). H265 encore utilisé a aussi cette structure.\\
\noindent Notations :\\
$I_n$: image numéro n\\
$\hat{I_n}$ : image numéro n au décodeur\\
$f(\hat{I_n}) = \tilde{I_{n+1}}$: image n+1 prédite\\
On va étudier deux cas :
\begin{enumerate}
\item pas de décodeur au niveau du codeur mais on a un prédicteur.
\begin{align*}
\tilde{I_{n+1}} &= T^{-1}(Q^{-1}(Q(T(I_{n+1} - f(I_n))))) + \tilde{I_{n+1}}\\
&= I_{n+1} - f(I_n) + E_{n+1} + \tilde{I_{n+1}} \text{ avec, E le bruit}
\end{align*}
$f(I_n)$ et $\tilde{I_{n+1}}$ ne se compensent pas totalement.
\bigbreak
\item On fait la prédiction a partir des images codées précédemment.
\begin{align*}
\tilde{I_{n+1}} &= T^{-1}(Q^{-1}(Q(T(I_{n+1} - f(\hat{I_n}))))) + f(\hat{I_n}\\
&= I_{n+1} - f(\hat{I_n}) + E_n +f(\hat{I_n})\\
&= I_{n+1} + E_n
\end{align*}
L'utilisation d'un décodeur au niveau du codeur (décodeur local) permet d'éviter une accumulation des erreurs au niveau des images décodées.
\end{enumerate}
\begin{figure}[H]
\centering
\begin{tikzpicture}[thick,scale=0.9, every node/.style={scale=0.9}]
\sbEntree{E}
\node[above] at (E) {...$I_2,I_1$};
\sbComp{a}{E}
\sbRelier{E}{a}
\sbBlocL[6]{c}{Transformée}{a}
\sbBlocL[6]{d}{Quantification}{c}
\sbBlocL[5]{e}{
\begin{tabular}{c}
Codeur\\ entropique
\end{tabular}}{d}
\sbSortie{s}{e}
\sbRelier{e}{s}
\sbDecaleNoeudy[10]{d-e}{Ret}
\sbBlocr{D}{Désindéxation}{Ret}
\sbBlocrL{T}{
\begin{tabular}{c}
Transformée\\inverse
\end{tabular}}{D}
\sbRelieryx{d-e}{D}
\sbCompSum[-6]{C1}{T}{+}{ }{ }{+}
\sbRelier{T}{C1}
\sbBlocrL{m}{Mémoire}{C1}
\sbRelierxy{m}{a}
\sbDecaleNoeudx[5]{m-a}{int}
\node[left] (is) at (m-a){};
\node[left=0.5em] at (m-a) {$\hat{I_1}$};
\node[right] (ie) at (int){};
\draw[-] (is) to[spst] (ie);
\sbRelierxy{int}{C1}
\end{tikzpicture}
\caption{Utilisation d'un décodeur local}
\end{figure}
\begin{figure}[H]
\centering
\begin{tikzpicture}
\sbEntree{E}
\sbBlocL{d}{\begin{tabular}{c}
decodeur \\entropique
\end{tabular}}{E}
\sbBlocL{D}{Désindexeur}{d}
\sbBlocL{t}{\begin{tabular}{c}
Transformée\\inverse
\end{tabular}}{D}
\sbCompSum[8]{c}{t}{ }{+}{+}{ }
\sbRelier{t}{c}
\node[below=4em,rectangle,draw](m) at (c) {Mémoire};
\sbRelier{m}{c}
\sbSortie{S}{c}
\sbRelier[$\hat{I_2}\hat{I_1}$]{c}{S}
\end{tikzpicture}
\caption{Décodeur à mémoire}
\end{figure}
\end{document}
\documentclass[main.tex]{subfile}
\lstset{language=Matlab}
\begin{document}
\section{Rappels mathématiques pour le codage de source}
\paragraph{Signaux et variables aléatoires}
Les signaux qu'on cherche à compresser (texte, échantillons de voix, musique, images, vidéo...) sont décrits comme des réalisations de suites de variables aléatoires.\\
Une variable aléatoire $X$ est décrite par son domaine $\X$, c'est-à-dire l'ensemble des valeurs que $X$ peut prendre (aussi appelé alphabet).
$\X$ peut être à valeurs discrètes (par exemple singletons $\in\{0,1\}, \quad \{0,\dots 255\}$, ou triplets $\{(0,0,0)...(255,255,255)\}$ dans le cas de couleurs), ou à valeurs continues ($\in \R$, un intervalle $[a,b]\subset\R$)
\section{Variables aléatoires discrètes}
$X$ est en plus caractérisée par sa \emph{probability mass function} (loi de probabilité) $p_i = Pr(X=i), \quad i \in \X$
Les $p_i$ sont tels que :
\begin{itemize}
\item $p_i \geq 0, \quad \forall i \in \X$
\item $\sum_{i \in \X}p_i = 1$
\end{itemize}
\medskip
\paragraph{Moyenne de $X$} (ou espérance) : $E(X)=\sum_{i \in \X} i p_i$
\begin{exemple}
$\X=\{1,2,3\}$ avec $p=1 = 0.5, p_2=0.25, p_3=0.25$.
On a $E(X) = 1\times0.5 + 2\times0.25 + 3\times0.25 = 1.75$
\end{exemple}
\paragraph{Variance de X} : $V(x)=E[(X-E(X))^2] = \sum_{i\in\X} (i-E(x))^2p_i$
\begin{exemple}[(suite)]
$\X=\{1,2,3\}$ avec $p=1 = 0.5, p_2=0.25, p_3=0.25$.
On a $V(x) = (1-1.75)^2\times0.5 + (2-1.75)^2\times0.25 + (3-1.75)^2\times0.25=0.69$
\end{exemple}
\paragraph{Écart-type de X} $ \sigma(X) = \sqrt{V(X)}$
\medskip
\begin{exemple}[Générer des réalisations de VA]
Génération d'une suite de réalisations d'une VA $X$ tel que $\X=\{0,1\}$ avec $p_0=0.9,\quad p_1=0.1$
\begin{lstlisting}
x=rand(1,10)>0.9
% rand : générateur de loi uniforme
% randn : générateur de loi gaussienne
\end{lstlisting}
\noindent Pour générer une suite de réalisations correspondant aux exemples précédents
\begin{lstlisting}
x=rand(1,10)
y= (x<0.5) + 2*(x<0.75 & x>0.5) + 3*(x>0.75)
\end{lstlisting}
\end{exemple}
\medskip
On considère deux variables aléatoires $X_1$ et $X_2$ d'alphabet $\X$.
\paragraph{Indépendance}
$X_1$ et $X_2$ sont indépendantes si et seulement si \[Pr(X_1=i,X_2=j)=Pr(X_1=i).Pr(X_2=j)\]
Ainsi $E(X_1X_2)=E(X_1).E(X_2)$\\
Dans le cas général,
\[Pr(X_1=i,X_2=j)=Pr(X_1=i / X_2=j).Pr(X_2=j)=Pr(X_2=j / X_1 =i).Pr(X_1=i)\]
Si $X_1$ et $X_2$ sont indépendants $Pr(X_1=i/X_2=j)=Pr(X_1=i)$ pour tous $i,j$
$\sum_{j\in\X}Pr(X_2=j/X_1=i)=1$ mais $\sum_{i\in\X} Pr(X_2=j/X_1=i)= ?$
\paragraph{Marginalisation}
On suppose connaître $Pr(X_2=j/X_1=i)$ et $Pr(X_1=i)$.
D'après la règle du produit,
\[Pr(X_2=j)=\sum_{i\in\X} Pr(X_2=j,X_1=i) = \sum_{i\in\X} Pr(X_2=j/X_i=i).Pr(X_1=i)\]
\end{document}
This diff is collapsed.
This diff is collapsed.
\documentclass[main.tex]{subfiles}
\begin{document}
L'idée du codage prédictif est d'utiliser les corrélations (ressemblances) temporelles ou spatiales du signal à compresser.
\section{Rappels sur la corrélation}
On considère une source $X$ qui émet un signal constitué de $x_1,\dots,x_N$ considérés comme une réalisation d'une suite de variables aléatoires $X_1,\dots,X_N$ de moyenne nulle.
%\img{0.5}{3/1/1}
La fonction de corrélation permet de mesurer la ressemblance entre échantillons voisins :
\[ \gamma_x(n,k) = E(X_nX_{n+k}) \]
Pour un signal stationnaire (dont les caractéristiques statistiques n'évoluent pas au cours du temps :
\[ \gamma_x(n,k) = \gamma_x(k) = E(X_nX_{n+k}), \forall n\]
En pratique, on estime la corrélation à partir des échantillons du signal à compresser.
Estimateur biaisé :
\[ \hat{\gamma_x}(k) = \frac{1}{N}\sum_{i=1}^{N-k} x_i x_{i+k}, \forall k \geq 0 \]
\[ \gamma_x(k) = \frac{1}{N} \sum_{i=-k}^N x_i x_{i+k}, \forall k \leq 0 \]
Avec Matlab, on l'obtient avec :
\begin{lstlisting}
[c,k] = xcorr(x,'biased');
plot(k,c); grid;
\end{lstlisting}
$\gamma_x(k)$ est maximale en 0 et est égale à l'énergie $\sigma^2$ du signal.
\newpage
\section{Prédicteur optimal à 1 pas}
On souhaite prédire la valeur de $X_n$ à partir de la valeur de $X_{n-1}$.
Le prédicteur sera linéaire :
\[\hat{X_n} = a_1 X_{n-1} \]
On cherche la valeur de $a_1$ qui minimise $e = E((X_n-\hat{X_n})^2)$
\begin{align*}
e & = E((X_n-a_1X_{n-1})^2) \\
& = E(X_n^2 -a_1^2 X_{n-1}^2 - 2a_1X_{n-1}X_n) \\
& = E(X_n^2) + a_1^2E(X_{n-1}^2) - 2a_1E(X_{n-1}X_n)\\
e & = \gamma_x(0) + a_1^2 \gamma_x(0) - 2a_1 \gamma_x(1) \text{ par stationnarité}\\
\derivp[e]{a_1}|_{\hat{a_1}} = 0 & \Leftrightarrow 2 \hat{a_1} \gamma_x(0) - 2 \gamma_x(1) = 0\\
& \Rightarrow \hat{a_1} = \frac{\gamma_x(1)}{\gamma_x(0)}
\end{align*}
\begin{rem}
Lorsque le signal sera très corrélé, $\gamma_x(1) \approx \gamma_x(0)$ et $\hat{a_1} \approx 1$. Pour un signal peu corrélé, $\gamma_x(1) \approx 0$ et $\hat{a_1} \approx 0$.
\end{rem}
Pour la valeur de $\hat{a_1}$ obtenue, on a
\begin{align*}
\hat{e} & = \gamma_x(0) + (\frac{\gamma_x(1)}{\gamma_x(0)})^2 \gamma_x(0) - 2 \frac{\gamma_x(1)^2}{\gamma_x(0)} \\
& = \frac{\gamma_x(0)^2-\gamma_x(1)^2}{\gamma_x(0)} \leq \gamma_x(0)
\end{align*}
$\hat{e}$ est l'énergie de la partie qui n'a pas pu être prédite de $x_1,\dots,x_N$.\\
Le résidu de prédiction a une variance plus faible. Si on le quantifie, il permettra de reconstituer le signal initial avec une distorsion plus faible.
\newpage
\section{Prédiction à $p$ pas}
On cherche à prédire $X_n$ à partir des échantillons précédents $X_{n-1},\dots,X_{n-p}$.
\newcommand{\ap}{\underline{a}}
\newcommand{\Xn}{\underline{X_n}}
\newcommand{\cp}{\underline{c}}
\newcommand{\Rp}{\underline{\underline{R}}}
\[ \hat{X_n} = a_1 X_{n-1} + \dots + a_pX_{n-p} = \ap^T \Xn \quad \text{ avec} \ap^T=(a_1\dots a_p) \text{ et } \Xn^T = (X_{n-1} \dots X_{n-p})\]
On cherche $\ap$ minimisant
\begin{align*}
e & = E((X_n-\hat{X_n})^2) \\
& = E((X_n-\ap^T\Xn)^2) \\
& = E(X_n^2) + \ap^T E(\Xn\Xn^T) \ap -2\ap^t E(X_n\Xn) \\
\text{Or, } E(X_n\Xn)& =(E(X_nX_{n-1}),\dots,E(X_nX_{n-p}))^T \\
& = (\gamma_x(1), \gamma_x(2),\dots,\gamma_x(p))^T = \cp \\
\text{De plus, } E(\Xn\Xn^T) & =
\left[
\begin{array}{cccc}
E(X_{n-1}X_{n-1}) &E(X_{n-1}X_{n-2}) & \dots & E(X_{n-1}X_{n-p}) \\
E(X_{n-2}X_{n-1}) & \ddots & & \vdots \\
\vdots & & \ddots & \vdots \\
E(X_{n-p}X_{n-1}) & \dots & \dots & E(X_{n-p}X_{n-p})
\end{array}
\right] \\
& =
\left[
\begin{array}{cccc}
\gamma_x(0) & \gamma_x(1) & \dots & \gamma_x(p-1) \\
\gamma_x(1) & \gamma_x(0) & & \vdots \\
\vdots & & \ddots & \gamma_x(1) \\
\gamma_x(p-1) & \dots & \gamma_x(1) & \gamma_x(0)
\end{array}
\right] = \Rp\\
\text{ donc } e & = \gamma_x(0) + \ap^T \Rp \ap - 2 \ap^T \cp
\end{align*}
\[ \left.\derivp[e]{\ap}\right|_{\hat{\ap}} = 0 \quad \Leftrightarrow \quad \underline{0} + 2 \Rp\hat{\ap} - 2\cp = 0 \quad \Rightarrow \quad \hat{\ap} = \Rp^{-1} \cp \]
Pour cette valeur de $\hat{\ap}$, on a
\begin{align*}
\hat{e} & = \gamma_x(0) + \cp^T \Rp^{-1} \Rp \Rp^{-1} \cp -2\cp^T\Rp^{-1}\cp \\
& = \gamma_x(0) - \cp^T \Rp^{-1} \cp \leq \gamma_x(0)
\end{align*}
Ce prédicteur à $p$ pas est en général plus efficace que le prédicteur à 1 pas mais il est plus complexe.
\newpage
\section{Mise en oeuvre du prédicteur}
On considère le codeur prédictif de structure suivante à l'émetteur :
%\img{0.4}{3/2/1}
et de structure suivante au décodeur de récepteur:
%\img{0.4}{3/2/2}
On met en œuvre un dispositif de prédiction exploitant les échantillons disponibles au récepteur, de manière à éviter l'accumulation des erreurs de quantification. Il n'y a pas d'accumulation d'erreur de prédiction car le prédicteur est le même à l'émetteur et au récepteur.\\
Pour le réglage du prédicteur, on distingue plusieurs méthodes :
\begin{enumerate}\setlength{\itemsep}{5mm}
\item On calcule $\hat{\gamma_x}$ sur tout le signal et on transmet $\underline{\hat{a}}_{opt}$.
Avantage :
\begin{itemize}
\item sa simplicité de mise ne œuvre
\end{itemize}
Inconvénients :
\begin{itemize}
\item il ne permet pas de tenir compte des non stationnarités
\item on règle le prédicteur à partir de $x_n$ et non de $\hat{x_n}$.
\end{itemize}
\item On découpe le signal en blocs et on recalcule le prédicteur sur chaque bloc.
Avantages :
\begin{itemize}
\item sa simplicité de mise ne œuvre
\item permet de s'adapter aux non-stationnarités
\end{itemize}
Inconvénient :
\begin{itemize}
\item débit nécessaire à la transmission des $\underline{\hat{a}}_{opt}$.
\end{itemize}
\item Mettre en place un prédicteur adaptatif. On travaille sur une fenêtre glissante contenant les N échantillons décalés : $\underline{\hat{X}}_n = (\hat{x}_{n-1}, ..., \hat{x}_{n-N})^T$.
On calcule $\underline{\hat{a}}_{opt}$ à partir de $\underline{\hat{X}}_n$ (au codeur et au décodeur). On applique $\underline{\hat{a}}_{opt}$ pour coder et décoder $x_n$ en $\hat{x}_n$. À l'itération suivante, on calcule $\underline{\hat{a}}_{opt}$ à partir de $\underline{\hat{X}}_{n+1} = (\hat{x}_{n}, ..., \hat{x}_{n-N+1})^T$.
Avantages :
\begin{itemize}
\item Il est très adaptatif.
\item On ne transmet plus $\underline{\hat{a}}_{opt}$
\end{itemize}
Inconvénient :
\begin{itemize}
\item et bien... c'est pas simple.
\end{itemize}
\end{enumerate}
\end{document}
\documentclass{../../cours.cls}
\input{../../preambule/preambule}
\newcommand{\nom}{Cours 0 : Introduction - Motivation}
\renewcommand{\nomentete}{UE455 - \nom}
\renewcommand{\thesection}{\Roman{section}}
\begin{document}
\titre{\nom}
\paragraph{Pourquoi a-t-on besoin du codage de source ?}
Un téléviseur HD affiche des images de 1920 x 1080 pixels. Chaque pixel est formé d'une combinaison de 3 couleurs RGB, chacune des couleurs étant codée par un nombre sur 8, 10 ou 12 bits. À raison de 25, 50 ou 60 images par seconde, le débit nécessaire est R= 1920 x 1080 x 3 x 8 x 25 = 1,22 Gbits par seconde. \\
En 4G, le débit maximal est de 100 Mbits par seconde (quand on est seul dans la zone) et en ADSL, il est de 20 Mbits par seconde.
Il faut compresser les données avec un facteur 100 au minimum.\\
\emph{"Le taux minimum c'est 25 images par seconde, pour pas avoir l'impression de regarder un dessin animé japonais."}
\emph{"Des émissions mettent volontairement moins pour qu'on ait l'impression d'avoir trop bu en regardant la télé."}\\
\paragraph{Comment faire de la compression?} Quelles propriétés du signal vidéo peut-on utiliser pour réaliser de la compression?
On utilise la redondance statistique. Par exemple, pour la vision (ou tech 3D) on utilise les petites différences pour obtenir la profondeur. De la même façon, en stéréo on a deux micros pour l'enregistrement. C'est la ressemblance entre les deux signaux qui nous intéresse ici pour effectuer la compression.\\
La compression est possible à cause de plusieurs propriétés:
\begin{itemize}
\item La corrélation temporelle (ressemblance entre deux image successives d'une vidéo ou échantillons audio successifs).
\item La corrélation spatiale (le fait que certaines zones présentes sont relativement uniforme, ressemblance entre deux pixels voisins).
\item La corrélation spectrale (ressemblance entre les composantes R, G et B d'une image).
\item Les propriétés statistiques du signal (un texte contient plus de "e" que de "z" en général).
\end{itemize}
\paragraph{Exemple d'une chaîne de compression vidéo}
On considère une vidéo mono-vue (pas en 3D) codée en niveaux de gris.\\
\underline{Transformation}: On applique une transformation à l'image, c'est à dire que l'on cherche à exprimer les blocs de l'image dans une base autre que la base canonique, pour permettre une compression plus facile.\\
Par exemple :
$\begin{pmatrix}1&1\\1&1\end{pmatrix}$ permet de décrire les zones constantes
$\begin{pmatrix}1&1\\-1&-1\end{pmatrix}$ pour décrire les variations verticales, et
$\begin{pmatrix}1&-1\\1&-1\end{pmatrix}$ pour une variation horizontale.\\
\underline{Quantification}: Elle permet de représenter les pixels transformés sur un nombre limité de bits (et d'en mettre plein à 0). Cette opération est irréversible.\\
\underline{Codeur entropique}: Il exploite la redondance statistique des coefficients quantifiés (il prend les successions et les compresse). On ne peut pas encore envoyer les données sur le réseaux, il faut appliquer un standard de compression.\\
\underline{Standard de compression}: Détermine la manière dont les bits en sortie sont organisés. (constitue les paquets, les numérote etc.)\\
On peut alors transmettre l'image. Une fois récupérée, on applique un décodage entropique, puis un désindexation et enfin une transformation inverse.\\
La désindexation permet d'obtenir à partir d'un coefficient quantifié, un nombre qui a la même dynamique qu'un coefficient transformé.(exemple: permet de retrouver un nombre à la bonne échelle, même si ce nombre n'est pas exactement le même).
\imgt{0/1.png}
\imgt{0/2.png}
\paragraph{Comment transmettre une vidéo?} appliquer ce shcéma (JPEG) à chaque image et transmettre? non, trop lourd.
On peut comparer l'image 2 à l'image précédente non pas 1 mais $\hat{1}$ l'estimée de l'image reçue par le récepteur, et l'on envoie la différence. Puis pour envoyer l'image 3, on estime la différence précédente, on y ajoute l'image estimée de la première image et on calcule la différence, que l'on envoie au travers des différentes transformations. Et ainsi de suite.\\
De ce fait, au niveau du récepteur on mémorise l'image précédente à laquelle on ajoute les différences.\\
Cette structure de codeur était celle des premiers codeurs vidéo (H261, MPEPZ). H265 encore utilisé a aussi cette structure.\\
\noindent Notations :\\
$I_n$: image numéro n\\
$\hat{I_n}$ : image numéro n au décodeur\\
$f(\hat{I_n}) = \tilde{I_{n+1}}$: image n+1 prédite\\
On va étudier deux cas :
\begin{enumerate}
\item pas de décodeur au niveau du codeur mais on a un prédicteur.
\begin{align*}
\tilde{I_{n+1}} &= T^{-1}(Q^{-1}(Q(T(I_{n+1} - f(I_n))))) + \tilde{I_{n+1}}\\
&= I_{n+1} - f(I_n) + E_{n+1} + \tilde{I_{n+1}} \text{ avec, E le bruit}
\end{align*}
$f(I_n)$ et $\tilde{I_{n+1}}$ ne se compensent pas totalement.
\bigbreak
\item On fait la prédiction a partir des images codées précédemment.
\begin{align*}
\tilde{I_{n+1}} &= T^{-1}(Q^{-1}(Q(T(I_{n+1} - f(\hat{I_n}))))) + f(\hat{I_n}\\
&= I_{n+1} - f(\hat{I_n}) + E_n +f(\hat{I_n})\\
&= I_{n+1} + E_n
\end{align*}
L'utilisation d'un décodeur au niveau du codeur (décodeur local) permet d'éviter une accumulation des erreurs au niveau des images décodées.
\end{enumerate}
\imgt{0/3.png}
\end{document}
clear all
close all
M=20;
Delta = 0.1;
x = -5:0.01:5;
[y,idx] = quantif(x,M,Delta);
plot(x,y); grid; axis([-5 5 -5 5])
\ No newline at end of file
\documentclass{../../cours}
\usepackage{../../raccourcis}
% Mise en page
\title{Notes de Cours}
\author{Pierre-Antoine Comby}
\teacher{Michel Kieffer}
\module{455}
\usepackage{listings}
\definecolor{mygreen}{RGB}{28,172,0} % color values Red, Green, Blue
\definecolor{mylilas}{RGB}{170,55,241}
\begin{document}
\lstset{language=Matlab, %
% basicstyle=\color{red},
breaklines=true,%
morekeywords={matlab2tikz},
keywordstyle=\color{blue},%
morekeywords=[2]{1}, keywordstyle=[2]{\color{black}},
identifierstyle=\color{black},%
stringstyle=\color{mylilas},
commentstyle=\color{mygreen},%
showstringspaces=false,%without this there will be a symbol in the places where there is a space
numbers=left,%
numberstyle={\tiny \color{black}},% size of the numbers
numbersep=9pt, % this defines how far the numbers are from the text
emph=[1]{for,end,break},emphstyle=[1]\color{red}, %some words to emphasise
%emph=[2]{word1,word2}, emphstyle=[2]{style},
}
\maketitle
\tableofcontents
\chapter{Rappel de probabilité}
\chapter{Introduction - Motivation}
\subfile{chap0.tex}
\chapter{Codage entropique (sans pertes)}
\subfile{chap1.tex}
\chapter{Quantification}
\subfile{chap2.tex}
\chapter{Codage prédictif}
\subfile{chap3.tex}
\end{document}
function [y,idx] = quantif(x,M,Delta)
idx = floor(x/Delta);
idx = max(idx,-M/2);
idx = min(idx,M/2-1);
y = idx*Delta + Delta/2;
\ No newline at end of file
\documentclass{article}
\input{../../preambule/preambule}
\newcommand{\nom}{TD1 : Codage de Sources}
\renewcommand{\nomentete}{UE455 - \nom}
\begin{document}
\titre{\nom}
\begin{center}
TD et TP : remi.azouit@ens-cachan.fr
\end{center}
\section*{Point de cours sur le codage de Huffman}
Il s'agit d'un codage préfixe construit de façon récursive. Avec un codage préfixe, on n'a pas besoin de recevoir tout pour décoder. On peut décoder au fur et à mesure de la réception. Dans un code préfixe, chaque code ne peut pas être le début d'un autre code.
\begin{exemple}
On considère une source $X$ à valeurs dans $\X=\{A,B,...G\}$.
On a $p_A=3/8,\quad p_B=3/16, \quad p_C=3/16, \quad p_D=1/8,\quad p_E=1/16,\quad p_F=1/32,\quad p_G=1/32$.\\
Pour construire le codage, on range les symboles par probabilité d'apparition décroissante et on construit un arbre en associant à chaque fois les deux probabilités les plus faibles. Ainsi, les symboles les plus probables ont les codes les plus courts. Si on a deux probabilités qui sont égales, on peut choisir de façon équivalente l'une des deux : le codage sera différent mais tout aussi efficace.
\begin{figure}[h!]
\centering
\includegraphics[scale=0.5]{arbre1.png}
\end{figure}
\begin{center}
\begin{tabular}{|c|c|c|c|c|c|c|c|}
\hline
$X$ & A & B & C & D & E & F & G \\
\hline
Code & 1 & 011 & 010 & 001 & 0001 & 00001 & 00000 \\
\hline
\end{tabular}
\end{center}
\begin{rmq}
Pour coder un texte, on peut soit utiliser des probabilités et donc des codes "généraux", ou alors les recalculer à chaque fois.
\end{rmq}
\end{exemple}
\newpage
\section*{Exercice 1 : Codage de Huffman}
\begin{enumerate}
\item Construction de l'arbre puis codage
\begin{figure}[h!]
\centering
\includegraphics[scale=0.5]{arbre2.png}
\end{figure}
\begin{center}
\begin{tabular}{|c|c|c|c|c|c|c|c|c|}
\hline
X & D & B & A & F & E & C & G & H \\
\hline
Code & 00 & 10 & 010 & 110 & 111 & 0110 & 01110 & 01111 \\
\hline
\end{tabular}
\end{center}
\item $R = \sum_{x\in\X}p_x \times l_x$$l_x$ est la longueur du code associé à $x$
Ainsi, $R=2.83$ bits/symbole.
\item L'entropie est le nombre minimal de bits par symbole nécessaire pour représenter la source:
$H=-\sum_{x\in\X} p_x \log_2 p_x$