{ "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°1" ] }, { "cell_type": "markdown", "id": "c91f3f10", "metadata": {}, "source": [ "## 1.1 Objectifs" ] }, { "cell_type": "markdown", "id": "c6a3a70a", "metadata": {}, "source": [ "* Introduire le langage de programmation Python.\n", "* Introduire les commandes de base de traitement d'image avec Python." ] }, { "cell_type": "markdown", "id": "f57e8c63", "metadata": {}, "source": [ "## 1.2 Enoncé" ] }, { "cell_type": "markdown", "id": "751221fd", "metadata": {}, "source": [ "Dans ce projet, nous allons introduire les instructions de base et les fondements de l'environnement de programmation Python, ainsi que quelques opérations de base sur les images numériques telles que la lecture d'une image, les traitements simples, l'affichage et l'écriture sur disque." ] }, { "cell_type": "markdown", "id": "dd0f7ae7", "metadata": {}, "source": [ "### 1) Boucle \"for\", et opérations sur les vecteurs" ] }, { "cell_type": "markdown", "id": "0743a313", "metadata": {}, "source": [ "Donner les fonctions Python qui permettent de calculer les deux sommes suivantes en utilisant deux méthodes différentes: (1) la boucle \"for\", (2) opérations sur les vecteurs." ] }, { "cell_type": "markdown", "id": "5ff21564", "metadata": {}, "source": [ "$$ S = \\frac{1^2}{2^2} + \\frac{2^2}{3^2} + \\cdots + \\frac{999^2}{1000^2} $$" ] }, { "cell_type": "markdown", "id": "3fd90ccf", "metadata": {}, "source": [ "#### (1) Méthode itérative" ] }, { "cell_type": "code", "execution_count": null, "id": "506de1d5", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "5acff980", "metadata": {}, "source": [ "#### (2) Méthode vectorielle" ] }, { "cell_type": "code", "execution_count": null, "id": "43332c61", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "8b8e5296", "metadata": {}, "source": [ "$$ S = 1 - \\frac{1}{4} + \\frac{1}{7} - \\frac{1}{10} + \\cdots - \\frac{1}{1000} $$" ] }, { "cell_type": "markdown", "id": "ddfb0935", "metadata": {}, "source": [ "#### (1) Méthode itérative" ] }, { "cell_type": "code", "execution_count": null, "id": "4060b9c7", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "4851ef08", "metadata": {}, "source": [ "#### (2) Méthode vectorielle " ] }, { "cell_type": "code", "execution_count": null, "id": "9a67954a", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "0f9b8669", "metadata": {}, "source": [ "### 2) Opérations de base sur les images numériques" ] }, { "cell_type": "markdown", "id": "e56b3749", "metadata": {}, "source": [ "Donner les commandes nécessaires pour réaliser les opérations suivantes en utilisant Python:" ] }, { "cell_type": "markdown", "id": "aef2d7eb", "metadata": {}, "source": [ "Les images sont stockées sous forme de fichiers sur le disque, de sorte que la lecture et l'écriture d'images à partir des fichiers sont des opérations d'Entrée/Sortie de disque. Ceci peut être effectué de plusieurs manières en utilisant différentes bibliothèques; certains d'entre eux sont présentés dans cette section.\n", "\n", "Commençons d'abord par importer tous les packages requis :" ] }, { "cell_type": "code", "execution_count": null, "id": "e6f921c6", "metadata": {}, "outputs": [], "source": [ "# for inline image display inside notebook\n", "%matplotlib inline\n", "\n", "import numpy as np\n", "from PIL import Image, ImageFont, ImageDraw\n", "from PIL.ImageChops import add, subtract, multiply, difference, screen\n", "import PIL.ImageStat as stat\n", "from skimage.io import imread, imsave, imshow, show, imread_collection, imshow_collection\n", "from skimage import color, viewer, exposure, img_as_float, data\n", "from skimage.transform import SimilarityTransform, warp, swirl\n", "from skimage.util import invert, random_noise, montage\n", "import matplotlib.image as mpimg\n", "import matplotlib.pylab as plt\n", "from scipy.ndimage import affine_transform, zoom\n", "from scipy import misc" ] }, { "cell_type": "markdown", "id": "47a18844", "metadata": {}, "source": [ "* Lire l'image contenue dans le fichier 'rose\\_1024.tif' et afficher sa taille." ] }, { "cell_type": "code", "execution_count": null, "id": "2dbe18b6", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "5ef4a73e", "metadata": {}, "source": [ "* Afficher l'image et parcourir son contenu (valeurs des pixels)." ] }, { "cell_type": "code", "execution_count": null, "id": "016ee492", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "886a9c8c", "metadata": {}, "source": [ "* Sauvegarder cette image avec un format diffèrent (par exemple png)." ] }, { "cell_type": "code", "execution_count": null, "id": "76cc423c", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "acffe0b3", "metadata": {}, "source": [ "* Lire l'image à partir du disque et l'afficher" ] }, { "cell_type": "code", "execution_count": null, "id": "afbdf44c", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "0e00148e", "metadata": {}, "source": [ "* Lire, sauvegarder et afficher l'image en utilisant la bibliothèque Matplotlib" ] }, { "cell_type": "code", "execution_count": null, "id": "f1ce29ec", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "c0f80318", "metadata": {}, "source": [ "### 3) Traitements simple sur les images numériques" ] }, { "cell_type": "markdown", "id": "7e650433", "metadata": {}, "source": [ "Soit l'image $f$ en niveaux de gris contenue dans le fichier 'rose\\_1024.tif' de taille $1024 \\times 1024$ , implémenter la série d'instructions suivante sur l'image $f$:" ] }, { "cell_type": "markdown", "id": "5408d89b", "metadata": {}, "source": [ "* Lire l'image $f$." ] }, { "cell_type": "code", "execution_count": null, "id": "07e0d79d", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "09d9a086", "metadata": {}, "source": [ "* Flipper l'image $f$ verticalement." ] }, { "cell_type": "code", "execution_count": null, "id": "aa6087ec", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "64d2912a", "metadata": {}, "source": [ "* Cropper la région de l'image $f$ délimitée par le rectangle: [257:768, 257:768]." ] }, { "cell_type": "code", "execution_count": null, "id": "58f9bfac", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "a58e6e2c", "metadata": {}, "source": [ "* Rééchantillonner l'image $f$ en divisant sa taille sur 2." ] }, { "cell_type": "code", "execution_count": null, "id": "a9524e30", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "4bc3693c", "metadata": {}, "source": [ "* Afficher le profil de la ligne horizontale du milieu (la ligne 512)." ] }, { "cell_type": "code", "execution_count": null, "id": "bf881c5d", "metadata": {}, "outputs": [], "source": [] } ], "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.10.4" } }, "nbformat": 4, "nbformat_minor": 5 }