{ "cells": [ { "cell_type": "markdown", "id": "3960a901", "metadata": {}, "source": [ "# Centre Universitaire de Mila" ] }, { "cell_type": "markdown", "id": "c4568d4a", "metadata": {}, "source": [ "# Master 1 (STIC & I2A), Matière: Traitement d'images" ] }, { "cell_type": "markdown", "id": "a8bedc4a", "metadata": {}, "source": [ "# Travaux pratiques N°3" ] }, { "cell_type": "markdown", "id": "c91f3f10", "metadata": {}, "source": [ "## 3.1 Objectifs" ] }, { "cell_type": "markdown", "id": "c6a3a70a", "metadata": {}, "source": [ "* Implanter le filtrage d’image pour la réduction de bruit.\n", "* Amélioration du contraste et détection de contours." ] }, { "cell_type": "markdown", "id": "f57e8c63", "metadata": {}, "source": [ "## 3.2 Enoncé" ] }, { "cell_type": "markdown", "id": "751221fd", "metadata": {}, "source": [ "Dans ce projet, vous devez implémenter trois opérations d'amélioration de la qualité d'une image et une opération de détection de contours (les images de test vous seront fournies):" ] }, { "cell_type": "markdown", "id": "dd0f7ae7", "metadata": {}, "source": [ "### 1) Implanter le filtrage moyen, Gaussien et médian" ] }, { "cell_type": "markdown", "id": "5ff21564", "metadata": {}, "source": [ " Ici vous devez implanter une fonction de réduction de bruit 'bruit\\_reduction' qui aura trois paramètres d'entrée: l'image bruitée, la taille du filtre et le genre de filtre (ex. 0 pour le filtre moyen, 1 pour le filtre Gaussien et 2 pour le filtre médian). La fonction doit retourner l'image filtrée comme paramètre de sortie." ] }, { "cell_type": "code", "execution_count": null, "id": "c5f70461", "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "import cv2 as cv\n", "from PIL import Image, ImageFilter\n", "from scipy.signal import convolve2d\n", "from matplotlib import pyplot as plt" ] }, { "cell_type": "code", "execution_count": null, "id": "506de1d5", "metadata": {}, "outputs": [], "source": [ "def bruit_reduction(nom_du_fichier, taille_du_filtre, genre_de_filtre):\n", " # Valider les paramètres.\n", " if ( taille_du_filtre<3 or taille_du_filtre%2==0 ):\n", " print('la taille du filtre doit être un nombre non-pair plus grand ou égal que 3')\n", " return\n", " \n", " # Lire le fichier\n", " img_source = ...\n", " \n", " # Traiter le filtre\n", " sgdf = ''\n", " if genre_de_filtre == 0:\n", " sgdf = 'filtre moyen'\n", " elif genre_de_filtre == 1:\n", " sgdf = 'filtre gaussien' \n", " elif genre_de_filtre == 2:\n", " sgdf = 'filtre median'\n", " else:\n", " print('Genre de filtre incorrect, doit être 0-moyen, 1-gaussien, 2-median')\n", " \n", " print('Paramètres OK, on utilise un ', sgdf,' de ',taille_du_filtre,'x',taille_du_filtre) \n", " \n", " # Traiter le filtre\n", " sgdf = ''\n", " if genre_de_filtre == 0:\n", " mon_filtre = ...\n", " nouvelle_image = ...\n", " elif genre_de_filtre == 1: \n", " mon_filtre = ...\n", " nouvelle_image = ...\n", " elif genre_de_filtre == 2:\n", " nouvelle_image = ...\n", " else: \n", " return\n", " \n", " # Affichage des résultats\n", " plt.figure(figsize=(12, 8))\n", " plt.subplot(121)\n", " plt.imshow(img_source, cmap='gray')\n", " plt.title('Image Source')\n", " plt.subplot(122)\n", " plt.imshow(nouvelle_image, cmap='gray')\n", " plt.title(sgdf)\n", " plt.show()\n", " \n", " return" ] }, { "cell_type": "code", "execution_count": null, "id": "4b5be798", "metadata": {}, "outputs": [], "source": [ "# Initialiser le nom du fichier de l'image.\n", "nom_du_fichier = 'img/ckt_board_saltpep_prob_pt05.tif'\n", " \n", "# Calculer l'image filtrée.\n", "bruit_reduction(..., ...., ....)\n" ] }, { "cell_type": "markdown", "id": "0f9b8669", "metadata": {}, "source": [ "### 2) Amélioration du contraste d'une image" ] }, { "cell_type": "markdown", "id": "e56b3749", "metadata": {}, "source": [ "Ici vous devez implanter l'opération d'amélioration de contraste en utilisant le Laplacien:" ] }, { "cell_type": "markdown", "id": "aef2d7eb", "metadata": {}, "source": [ "$$ g(x,y) = f(x,y) + c \\| \\nabla^2 f \\| $$" ] }, { "cell_type": "markdown", "id": "4fca84f3", "metadata": {}, "source": [ "Il faut implanter une fonction 'ameliorer\\_constraste' qui a en paramètre d'entrée: l'image à améliorer et le paramètre $c$, et en paramètre de sortie: l'image résultat." ] }, { "cell_type": "code", "execution_count": null, "id": "e6f921c6", "metadata": {}, "outputs": [], "source": [ "# Lire l'image f.\n", "img_source = ....\n", "\n", "# Génération du filtre Laplacien.\n", "w = ....\n", "\n", "# Application du filtre sur l'image d'entrée img_source\n", "img_resultat_temp = ....\n", "\n", "# Appliquer l'amélioration du contraste en utilisant le Laplacien:\n", "c = ....\n", "img_resultat = ....\n", "\n", "# Affichage des résultats\n", "plt.figure(figsize=(12, 8))\n", "plt.subplot(131)\n", "plt.imshow(img_source, cmap='gray')\n", "plt.title('Image Source')\n", "plt.subplot(132)\n", "plt.imshow(img_resultat_temp, cmap='gray')\n", "plt.title('Résultat de convolution')\n", "plt.subplot(133)\n", "plt.imshow(img_resultat, cmap='gray')\n", "plt.title('Image améliorée')\n", "plt.show()" ] }, { "cell_type": "markdown", "id": "acffe0b3", "metadata": {}, "source": [ "### 3) Détection de contours" ] }, { "cell_type": "markdown", "id": "15319988", "metadata": {}, "source": [ "Ici vous devez implanter une fonction 'contours\\_detection' qui prend comme paramètres d'entrée une image et une valeur de seuil, et en paramètre de sortie la carte des contours avec l'algorithme de Canny." ] }, { "cell_type": "code", "execution_count": null, "id": "2be996cd", "metadata": {}, "outputs": [], "source": [ "def canny_edges_detection(original_imgage, T1, T2):\n", " ...\n", " ...\n", " ...\n", " return contours" ] }, { "cell_type": "code", "execution_count": null, "id": "f1ce29ec", "metadata": {}, "outputs": [], "source": [ "# Lire l'image f.\n", "img_source = ...\n", "\n", "# Application de la détection de contours avec la méthode Canny.\n", "contours = canny_edges_detection(...., ...., ...)\n", "\n", "# Affichage des résultats\n", "plt.figure(figsize=(12, 8))\n", "plt.subplot(121)\n", "plt.imshow(img_source, cmap='gray')\n", "plt.title('Image Source')\n", "plt.subplot(122)\n", "plt.imshow(contours, cmap='gray')\n", "plt.title(\"Résultat de l'algorithme de Canny\")\n", "plt.show()" ] }, { "cell_type": "markdown", "id": "7e650433", "metadata": {}, "source": [ "### Astuces avec Python:\n", "Vous pouvez utiliser les fonctions ImageFilter de la librairie PIL et la fonction convolve2d de la library scipy.signal." ] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "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.13" } }, "nbformat": 4, "nbformat_minor": 5 }