From 221b16563ced984f57904efbbbedea39431b6154 Mon Sep 17 00:00:00 2001
From: Matthieu Muller <matthieu.muller@gipsa-lab.grenoble-inp.fr>
Date: Fri, 2 Feb 2024 09:53:57 +0100
Subject: [PATCH] Post merge changes

---
 src/methods/chaari_mohamed/fonctions.ipynb | 142 ---------------------
 src/methods/chaari_mohamed/fonctions.py    |  77 +++++++++++
 2 files changed, 77 insertions(+), 142 deletions(-)
 delete mode 100644 src/methods/chaari_mohamed/fonctions.ipynb
 create mode 100644 src/methods/chaari_mohamed/fonctions.py

diff --git a/src/methods/chaari_mohamed/fonctions.ipynb b/src/methods/chaari_mohamed/fonctions.ipynb
deleted file mode 100644
index c94e976..0000000
--- a/src/methods/chaari_mohamed/fonctions.ipynb
+++ /dev/null
@@ -1,142 +0,0 @@
-{
- "cells": [
-  {
-   "cell_type": "code",
-   "execution_count": 24,
-   "id": "ec6da321",
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "import numpy as np\n",
-    "from scipy.signal import convolve2d\n",
-    "from src.forward_model import CFA\n",
-    "\n",
-    "def bilinear_demosaicing(op: CFA, y: np.ndarray) -> np.ndarray:\n",
-    "    \"\"\"\n",
-    "    Bilinear demosaicing method.\n",
-    "\n",
-    "    Args:\n",
-    "        op (CFA): CFA operator.\n",
-    "        y (np.ndarray): Mosaicked image.\n",
-    "\n",
-    "    Returns:\n",
-    "        np.ndarray: Demosaicked image.\n",
-    "    \"\"\"\n",
-    "    # Copie des valeurs directement connues pour chaque canal\n",
-    "    red = y[:, :, 0]\n",
-    "    green = y[:, :, 1]\n",
-    "    blue = y[:, :, 2]\n",
-    "\n",
-    "    # Création des masques pour chaque couleur selon le motif CFA\n",
-    "    mask_red = (op.mask == 0)  # Supposons que 0 correspond au rouge dans le masque\n",
-    "    mask_green = (op.mask == 1)  # Supposons que 1 correspond au vert\n",
-    "    mask_blue = (op.mask == 2)  # Supposons que 2 correspond au bleu\n",
-    "\n",
-    "    # Interpolation bilinéaire pour le rouge et le bleu\n",
-    "    # Note: np.multiply multiplie les éléments correspondants des tableaux, c'est pourquoi nous utilisons np.multiply au lieu de *\n",
-    "    red_interp = convolve2d(np.multiply(red, mask_red), [[1/4, 1/2, 1/4], [1/2, 1, 1/2], [1/4, 1/2, 1/4]], mode='same')\n",
-    "    blue_interp = convolve2d(np.multiply(blue, mask_blue), [[1/4, 1/2, 1/4], [1/2, 1, 1/2], [1/4, 1/2, 1/4]], mode='same')\n",
-    "\n",
-    "    # Interpolation bilinéaire pour le vert\n",
-    "    # Pour le vert, nous utilisons un autre noyau car il y a plus de pixels verts\n",
-    "    green_interp = convolve2d(np.multiply(green, mask_green), [[0, 1/4, 0], [1/4, 1, 1/4], [0, 1/4, 0]], mode='same')\n",
-    "\n",
-    "    # Création de l'image interpolée\n",
-    "    demosaicked_image = np.stack((red_interp, green_interp, blue_interp), axis=-1)\n",
-    "\n",
-    "    # Correction des valeurs interpolées: on réapplique les valeurs connues pour éviter le flou\n",
-    "    demosaicked_image[:, :, 0][mask_red] = red[mask_red]\n",
-    "    demosaicked_image[:, :, 1][mask_green] = green[mask_green]\n",
-    "    demosaicked_image[:, :, 2][mask_blue] = blue[mask_blue]\n",
-    "\n",
-    "    # Clip pour s'assurer que toutes les valeurs sont dans la plage [0, 1]\n",
-    "    demosaicked_image = np.clip(demosaicked_image, 0, 1)\n",
-    "\n",
-    "    return demosaicked_image\n"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 25,
-   "id": "cf379598",
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "def quad_bayer_demosaicing(op: CFA, y: np.ndarray) -> np.ndarray:\n",
-    "    \"\"\"\n",
-    "    Demosaicing method for Quad Bayer CFA pattern.\n",
-    "\n",
-    "    Args:\n",
-    "        op (CFA): CFA operator.\n",
-    "        y (np.ndarray): Mosaicked image.\n",
-    "\n",
-    "    Returns:\n",
-    "        np.ndarray: Demosaicked image.\n",
-    "    \"\"\"\n",
-    "    \n",
-    "    # Interpolation bilinéaire pour chaque canal\n",
-    "    red_interp = convolve2d(np.multiply(y[:, :, 0], op.mask == 0), [[1/4, 1/2, 1/4], [1/2, 1, 1/2], [1/4, 1/2, 1/4]], mode='same')\n",
-    "    green_interp = convolve2d(np.multiply(y[:, :, 1], op.mask == 1), [[0, 1/4, 0], [1/4, 1, 1/4], [0, 1/4, 0]], mode='same')\n",
-    "    blue_interp = convolve2d(np.multiply(y[:, :, 2], op.mask == 2), [[1/4, 1/2, 1/4], [1/2, 1, 1/2], [1/4, 1/2, 1/4]], mode='same')\n",
-    "\n",
-    "    # Assemblage de l'image interpolée\n",
-    "    demosaicked_image = np.stack((red_interp, green_interp, blue_interp), axis=-1)\n",
-    "\n",
-    "    # Réapplication des valeurs connues\n",
-    "    demosaicked_image[:, :, 0][op.mask == 0] = y[:, :, 0][op.mask == 0]\n",
-    "    demosaicked_image[:, :, 1][op.mask == 1] = y[:, :, 1][op.mask == 1]\n",
-    "    demosaicked_image[:, :, 2][op.mask == 2] = y[:, :, 2][op.mask == 2]\n",
-    "\n",
-    "    # Clip des valeurs pour les maintenir dans la plage appropriée\n",
-    "    demosaicked_image = np.clip(demosaicked_image, 0, 1)\n",
-    "\n",
-    "    return demosaicked_image\n"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 26,
-   "id": "3eec062c",
-   "metadata": {},
-   "outputs": [],
-   "source": []
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "a6630396",
-   "metadata": {},
-   "outputs": [],
-   "source": []
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "ef4e59c8",
-   "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.9.16"
-  }
- },
- "nbformat": 4,
- "nbformat_minor": 5
-}
diff --git a/src/methods/chaari_mohamed/fonctions.py b/src/methods/chaari_mohamed/fonctions.py
new file mode 100644
index 0000000..4529c7a
--- /dev/null
+++ b/src/methods/chaari_mohamed/fonctions.py
@@ -0,0 +1,77 @@
+import numpy as np
+from scipy.signal import convolve2d
+from src.forward_model import CFA
+
+def bilinear_demosaicing(op: CFA, y: np.ndarray) -> np.ndarray:
+    """
+    Bilinear demosaicing method.
+
+    Args:
+        op (CFA): CFA operator.
+        y (np.ndarray): Mosaicked image.
+
+    Returns:
+        np.ndarray: Demosaicked image.
+    """
+    # Copie des valeurs directement connues pour chaque canal
+    red = y[:, :, 0]
+    green = y[:, :, 1]
+    blue = y[:, :, 2]
+
+    # Création des masques pour chaque couleur selon le motif CFA
+    mask_red = (op.mask == 0)  # Supposons que 0 correspond au rouge dans le masque
+    mask_green = (op.mask == 1)  # Supposons que 1 correspond au vert
+    mask_blue = (op.mask == 2)  # Supposons que 2 correspond au bleu
+
+    # Interpolation bilinéaire pour le rouge et le bleu
+    # Note: np.multiply multiplie les éléments correspondants des tableaux, c'est pourquoi nous utilisons np.multiply au lieu de *
+    red_interp = convolve2d(np.multiply(red, mask_red), [[1/4, 1/2, 1/4], [1/2, 1, 1/2], [1/4, 1/2, 1/4]], mode='same')
+    blue_interp = convolve2d(np.multiply(blue, mask_blue), [[1/4, 1/2, 1/4], [1/2, 1, 1/2], [1/4, 1/2, 1/4]], mode='same')
+
+    # Interpolation bilinéaire pour le vert
+    # Pour le vert, nous utilisons un autre noyau car il y a plus de pixels verts
+    green_interp = convolve2d(np.multiply(green, mask_green), [[0, 1/4, 0], [1/4, 1, 1/4], [0, 1/4, 0]], mode='same')
+
+    # Création de l'image interpolée
+    demosaicked_image = np.stack((red_interp, green_interp, blue_interp), axis=-1)
+
+    # Correction des valeurs interpolées: on réapplique les valeurs connues pour éviter le flou
+    demosaicked_image[:, :, 0][mask_red] = red[mask_red]
+    demosaicked_image[:, :, 1][mask_green] = green[mask_green]
+    demosaicked_image[:, :, 2][mask_blue] = blue[mask_blue]
+
+    # Clip pour s'assurer que toutes les valeurs sont dans la plage [0, 1]
+    demosaicked_image = np.clip(demosaicked_image, 0, 1)
+
+    return demosaicked_image
+
+
+def quad_bayer_demosaicing(op: CFA, y: np.ndarray) -> np.ndarray:
+    """
+    Demosaicing method for Quad Bayer CFA pattern.
+
+    Args:
+        op (CFA): CFA operator.
+        y (np.ndarray): Mosaicked image.
+
+    Returns:
+        np.ndarray: Demosaicked image.
+    """
+    
+    # Interpolation bilinéaire pour chaque canal
+    red_interp = convolve2d(np.multiply(y[:, :, 0], op.mask == 0), [[1/4, 1/2, 1/4], [1/2, 1, 1/2], [1/4, 1/2, 1/4]], mode='same')
+    green_interp = convolve2d(np.multiply(y[:, :, 1], op.mask == 1), [[0, 1/4, 0], [1/4, 1, 1/4], [0, 1/4, 0]], mode='same')
+    blue_interp = convolve2d(np.multiply(y[:, :, 2], op.mask == 2), [[1/4, 1/2, 1/4], [1/2, 1, 1/2], [1/4, 1/2, 1/4]], mode='same')
+
+    # Assemblage de l'image interpolée
+    demosaicked_image = np.stack((red_interp, green_interp, blue_interp), axis=-1)
+
+    # Réapplication des valeurs connues
+    demosaicked_image[:, :, 0][op.mask == 0] = y[:, :, 0][op.mask == 0]
+    demosaicked_image[:, :, 1][op.mask == 1] = y[:, :, 1][op.mask == 1]
+    demosaicked_image[:, :, 2][op.mask == 2] = y[:, :, 2][op.mask == 2]
+
+    # Clip des valeurs pour les maintenir dans la plage appropriée
+    demosaicked_image = np.clip(demosaicked_image, 0, 1)
+
+    return demosaicked_image
-- 
GitLab