From b503c57e080b8b950fe1cade0fd52e56fdf64e0a Mon Sep 17 00:00:00 2001 From: Romain Vuillemot <romain.vuillemot@gmail.com> Date: Tue, 9 Apr 2024 08:56:19 +0200 Subject: [PATCH] Update INF-TC1-td04.ipynb --- TD04/INF-TC1-td04.ipynb | 96 ++++++++++++++++++++++++++++++++++------- 1 file changed, 80 insertions(+), 16 deletions(-) diff --git a/TD04/INF-TC1-td04.ipynb b/TD04/INF-TC1-td04.ipynb index a434bec..53b24cf 100644 --- a/TD04/INF-TC1-td04.ipynb +++ b/TD04/INF-TC1-td04.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "markdown", - "id": "c51c2e29", + "id": "ee8e369b", "metadata": {}, "source": [ "NAME:" @@ -145,7 +145,7 @@ "deletable": false, "nbgrader": { "cell_type": "code", - "checksum": "d09f9a854967a6df3590c0991f2ce955", + "checksum": "a8a333f00187a161a89b74c937a3274c", "grade": false, "grade_id": "cell-04652e636c091bef", "locked": false, @@ -158,7 +158,7 @@ "outputs": [], "source": [ "def getPixel(x: int, y: int, px) -> tuple:\n", - " \"\"\"Get the color of a pixel.\n", + " \"\"\"Get the color of a pixel\n", " Args:\n", " x (int): pixel x coordinate\n", " y (int): pixel y coordinate\n", @@ -251,7 +251,7 @@ "deletable": false, "nbgrader": { "cell_type": "code", - "checksum": "49daf4224763304159cd2c9a83444edc", + "checksum": "d64f3b409ebf819b91fb7eb4c9b23b87", "grade": false, "grade_id": "cell-efbe1bd53dfaf01f", "locked": false, @@ -264,7 +264,7 @@ "outputs": [], "source": [ "def setPixel(x: int, y:int, color: tuple, px) -> None:\n", - " \"\"\"Set the color of a pixel.\n", + " \"\"\"Set the color of a pixel\n", " Args:\n", " x (int): pixel x coordinate\n", " y (int): pixel y coordinate\n", @@ -305,7 +305,7 @@ "deletable": false, "nbgrader": { "cell_type": "code", - "checksum": "655e66460b01e25816d17c8d3a44d6a2", + "checksum": "fce9eb7d9e6deb769e0e92d334080844", "grade": false, "grade_id": "cell-f7def1afc171201e", "locked": false, @@ -318,7 +318,7 @@ "outputs": [], "source": [ "def moyenne(corner_x: int, corner_y: int, region_w: int, region_h, px: int) -> tuple:\n", - " \"\"\"Compute the average color of a region.\n", + " \"\"\"Compute the average color of a region\n", " Args:\n", " corner_x (int): top left corner x coordinate\n", " corner_y (int): top left corner y coordinate\n", @@ -348,7 +348,7 @@ "deletable": false, "nbgrader": { "cell_type": "code", - "checksum": "e2b46b95bfa437a8b49c5ab8145c5465", + "checksum": "d7822c11c3e771ada9ae6de0c2c2ba87", "grade": false, "grade_id": "cell-d04057cb7104c7e7", "locked": false, @@ -361,7 +361,7 @@ "outputs": [], "source": [ "def setRegion(x: int, y: int, w: int, h: int, color: tuple, px) -> None:\n", - " \"\"\"Set the color of a region.\n", + " \"\"\"Set the color of a region\n", " Args:\n", " x (int): top left corner x coordinate\n", " y (int): top left corner y coordinate\n", @@ -438,7 +438,7 @@ "deletable": false, "nbgrader": { "cell_type": "code", - "checksum": "dc0a4e65a0e88262f989ea34fc543cd1", + "checksum": "59752e63ce917fe3f7cae1599ad7f3b7", "grade": false, "grade_id": "cell-ee98beb234607988", "locked": false, @@ -452,7 +452,7 @@ "source": [ "from math import sqrt\n", "def distance(c1: tuple, c2: tuple) -> float:\n", - " \"\"\"Compute the distance between two colors.\n", + " \"\"\"Compute the distance between two colors\n", " Args:\n", " c1 (tuple): first color\n", " c2 (tuple): second color\n", @@ -506,7 +506,7 @@ "deletable": false, "nbgrader": { "cell_type": "code", - "checksum": "bfc5092580da36c9805a9673cb4b2734", + "checksum": "380cfc0b572ec85d03490efdc17716e5", "grade": false, "grade_id": "cell-d91af81641547e03", "locked": false, @@ -519,7 +519,7 @@ "outputs": [], "source": [ "def floodFill(w: int, h: int, start_x: int, start_y: int, seuil: int, px, px2) -> tuple:\n", - " \"\"\"Flood fill algorithm.\n", + " \"\"\"Flood fill algorithm\n", " Args:\n", " w (int): image width\n", " h (int): image height\n", @@ -527,7 +527,7 @@ " start_y (int): starting y coordinate\n", " seuil (int): color distance threshold\n", " px (PixelAccess): image pixel access\n", - " px2 (PixelAccess): image pixel access\n", + " px2 (PixelAccess): image pixel access (image we will re-color as a result)\n", " Returns:\n", " tuple: visited pixels, not visited pixels, unique colors used\n", " \"\"\"\n", @@ -567,6 +567,49 @@ "raise NotImplementedError()" ] }, + { + "cell_type": "markdown", + "id": "1647215c", + "metadata": {}, + "source": [ + "Vous pouvez tester avec l'image noire (de dimension 100x100) avec un rectangle blanc au centre et vous devrez obtenir :\n", + "\n", + "```\n", + "nombre de pixels dans l'image: 10000\n", + "nombre de noeuds coloriés 10000\n", + "nombre de noeuds non visités 0\n", + "nombre de couleurs utilisées 2\n", + "````" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "40510314", + "metadata": {}, + "outputs": [], + "source": [ + "im = Image.new('RGB', (100, 100)) \n", + "px = im.load()\n", + "W, H = im.size\n", + "setRegion(W//3, H//3, W//3, H//3, (255, 255, 255), px)\n", + "\n", + "im2 = Image.new('RGB', (im.width, im.height))\n", + "px2 = im2.load()\n", + "W, H = im.size\n", + "\n", + "print(\"nombre de pixels dans l'image:\", W * H)\n", + "\n", + "seuil = 10\n", + "start_x, start_y = 0, 0\n", + "\n", + "visited, not_visited, colors = floodFill(W, H, start_x, start_y, seuil, px, px2)\n", + "print(\"nombre de noeuds coloriés\", len(visited))\n", + "print(\"nombre de noeuds non visités\", len(not_visited))\n", + "print(f\"nombre de couleurs utilisées {len(colors)}\")\n", + "display(im2)" + ] + }, { "cell_type": "markdown", "id": "e2eb0bd7-ef80-41fd-8aba-2460de5b6ad4", @@ -848,7 +891,7 @@ "deletable": false, "nbgrader": { "cell_type": "code", - "checksum": "d35d391ebdfddb756d4191b3adc6a707", + "checksum": "d273d1a9ea48d7828c46ca49b055ba4f", "grade": false, "grade_id": "cell-998bb8c6562b7351", "locked": false, @@ -861,7 +904,7 @@ "outputs": [], "source": [ "def convolution_sobel(px, W: int, H: int, m: list, f = 1) -> None:\n", - " \"\"\"Apply a sobel filter convolution on an image.\n", + " \"\"\"Apply a sobel filter convolution on an image\n", " Args:\n", " px (PixelAccess): image pixel access\n", " W (int): image width\n", @@ -934,12 +977,33 @@ "display(im2)" ] }, + { + "cell_type": "markdown", + "id": "f9d03a14", + "metadata": {}, + "source": [ + "## FAQ\n", + "\n", + "1. Problème d'accès aux fichiers d'images (image non trouvée) : vérifiez que l'image fonctionne bien et se situe dans le répertoire de votre notebook que vous pouvez trouver avec la commande ci-dessous." + ] + }, { "cell_type": "code", "execution_count": null, "id": "980dfda1-8ac9-49da-ac66-6b460d91b5f2", "metadata": {}, "outputs": [], + "source": [ + "import os\n", + "print(os.getcwd())" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "8b1eb930", + "metadata": {}, + "outputs": [], "source": [] } ], -- GitLab