\n",
"DOUBLE-CLIQUEZ POUR INSCRIRE VOTRE RÉPONSE"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 2. Débruitage par filtrage spatial (6 pts)\n",
"
\n",
"\n",
"\n",
"Le fichier IRM_genou.tif de l’archive TP1.zip contient l’image d’un genou obtenue\n",
"en imagerie par résonance magnétique nucléaire (IRM). Cette image est dégradée par un\n",
"bruit relativement important. Le but de cette question est de mettre en œuvre et de comparer\n",
"plusieurs filtres spatiaux, linéaires ou non. Développez et mettez en œuvre les filtres\n",
"suivants :\n",
"\n",
"- Moyennage simple sur un masque carré de côté 3, 5 ou 7 pixels.\n",
"- Moyennage pondéré de type gaussien sur un masque carré de côté 3, 5 ou 7 pixels.\n",
"- Filtrage médian sur un masque carré de côté 3, 5 ou 7 pixels.\n",
"\n",
"La librairie OpenCV vous permet d'appliquer ces filtres (voir [documentation](https://docs.opencv.org/master/d4/d13/tutorial_py_filtering.html)). L’image filtrée doit être de même type et avoir la même taille que l’image de départ.\n",
"Comparez empiriquement les résultats, en vous basant notamment sur le bruit résiduel, sur\n",
"la netteté des contours des images filtrées et sur l’erreur quadratique moyenne. Vous\n",
"pouvez au besoin vous appuyer sur leur histogramme. Le bruit résiduel Ο(𝑥, 𝑦) peut être\n",
"calculé en soustrayant l’image filtrée 𝐼′(𝑥, 𝑦) à l’image originale 𝐼(𝑥, 𝑦).\n",
"\n",
"\\begin{equation*}\n",
"Ο(𝑥, 𝑦) = |𝐼(𝑥, 𝑦) − 𝐼′(𝑥, 𝑦)|\n",
"\\end{equation*}\n",
"\n",
"\n",
"Discutez de l’effet du type de filtre (moyenne simple, moyenne pondérée, médian) et de la\n",
"taille du filtre (3, 5, ou 7 pixels) sur les résultats de débruitage. \n",
"
"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [],
"source": [
"# Inscrivez votre code ici\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"
\n",
"DOUBLE-CLIQUEZ POUR INSCRIRE VOTRE RÉPONSE"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 3. Amélioration d’images (6 pts)\n",
"\n",
"Le fichier Lune.tif contient une image de la lune de qualité médiocre, tant du point de\n",
"vue de la distribution des niveaux de gris que de la netteté. Le but de cette question est\n",
"donc d’appliquer une succession de traitements pour améliorer la qualité de cette image.\n",
"\n",
"### 3.1. Transformations portant sur l’intensité (2 pts)\n",
"
\n",
"\n",
"En vous basant sur l’histogramme, effectuez une ou plusieurs transformations portant sur\n",
"l’intensité de l’image pour en améliorer le contraste et l’aspect visuel. Quelques\n",
"transformations que vous pouvez essayer pour améliorer le contraste sont :\n",
"\n",
"| Transformation | Paramètre(s) | Équation |\n",
"| --- | --- | --- |\n",
"| Inversion | NA | 1 – 𝑟 |\n",
"|Gamma | 𝛾 < 1 si sous-exposé
𝛾 > 1 si surexposé | 𝑟𝛾 |\n",
"| Logarithme | NA | ln(1 + 𝑟) /ln(2) |\n",
"| Exponentielle | NA | 𝑒𝑟𝑙𝑛(2) − 1|\n",
"\n",
"
** r correspond à la valeur d’un pixel dans l’image \n",
"\n",
"Note : Il n’est pas conseillé de procéder à l’égalisation de l’histogramme à cette étape-ci.\n",
"Expliquez votre choix de transformation que vous avez utilisé pour améliorer l’aspect\n",
"visuel de l’image.\n",
"\n",
""
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [],
"source": [
"# Inscrivez votre code ici\n",
"\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"
\n",
"DOUBLE-CLIQUEZ POUR INSCRIRE VOTRE RÉPONSE"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 3.2. Affinage de l’image (2 pts)\n",
"
\n",
"\n",
"\n",
"Appliquez à l’image obtenue à la question précédente un rehaussement par masquage flou\n",
"généralisé (Unsharp Filter / Masking en anglais). Ce filtre de convolution est défini par\n",
"\n",
"
𝐺 = 𝐹 + 𝑎 [ 𝐹 − ℎ𝑏 ∗ 𝐹 ] = 𝐹 + 𝑎 [ 𝐹 − 𝐹′ ] \n",
"\n",
"où F est l’image originale, G est l’image rehaussée, hb est un noyau de convolution agissant\n",
"comme un filtre passe-bas, * est un produit de convolution, a est le coefficient de\n",
"rehaussement et b contrôle la taille du filtre adoucisseur. Utilisez le filtre par moyennage\n",
"pondéré de type Gaussien développé à la question précédente pour calculer l’image floue\n",
"𝐹′ = ℎ𝑏 ∗ 𝐹.\n",
"\n",
"Faites varier la taille du filtre adoucisseur et le coefficient de rehaussement. Qu’observezvous ? Décrivez l’effet de ces paramètres sur l’image rehaussée.\n",
""
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [],
"source": [
"# Inscrivez votre code ici"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 3.3. Égalisation d’histogramme (2 pts)\n",
"
\n",
"\n",
"\n",
"Appliquez une égalisation d’histogramme à une image visuellement satisfaisante obtenue\n",
"à la question précédente. Qu’observez-vous ? Expliquez. Comparez au résultat obtenu si\n",
"vous appliquez l’égalisation d’histogramme à l’image de la Lune originale sans transformer\n",
"son intensité et sans la rehausser par masquage flou. Pourquoi les résultats sont-ils\n",
"différents ?\n",
" Vous pouvez utiliser la fonction equalize_histogram(img)
et plt.hist
de matplotlib.\n",
" \n",
"
"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [],
"source": [
"def equalize_histogram(img):\n",
" # Normaliser l'image de 0 à 255\n",
" img = ((img - img.min()) / (img.max() - img.min()) * 255).astype('uint8')\n",
" hist, bins = np.histogram(img, 256, [0,256])\n",
" T = np.cumsum(hist) # Somme cumulée\n",
" T = (T - T.min()) / (T.max() - T.min()) # Normalisation entre 0 et 1\n",
" return (255 * T[img]).astype('uint8')\n"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [],
"source": [
"# Inscrivez votre code ici"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"
\n",
"DOUBLE-CLIQUEZ POUR INSCRIRE VOTRE RÉPONSE"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.7.4"
}
},
"nbformat": 4,
"nbformat_minor": 2
}