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