Seuillage d'image en Python3
Le seuillage est une technique de traitement d'image permettant l'attribution de chaque pixel soit à une couleur, soit à une autre, selon un seuil. Plus explicitement :
Définition
Soit $f$, une image composée de $n$ lignes et $m$ colonnes, $\forall i \in [0,n]$ et $\forall j \in [0,m]$.
Soit $f(i,j)$ l’intensité d’un pixel. C’est à dire la valeur maximale du triplet $[R,G,B]$ associée au pixel.
Soit un seuil $s \in [0,255]$.
Alors le seuillage de l’image f serait équivalent à une fonction $g$ tel que :
$$g(i,j) = \begin{cases} 255 & \text{si} ; f(i,j) \leq s \cr 0 & \text{sinon.} \end{cases}$$
Nécessaire
Python 3 :
Pour suivre ce tutoriel, vous devez avoir installé Python 3 ainsi que le package numpy.
J’utiliserai personnellement le “Jupyter notebook” de Google : Google Colab.
Article précédent sur les bitmaps en python :
Modifier la Bitmap d’une image avec Python 3
Fonction de seuillage
Tout d’abord, il nous faut une image. Pour cela, je vous suggère de télécharger celle-ci comme ceci :
import numpy as np
from PIL import Image
import requests
from io import BytesIO
Url = '/wp-content/uploads/2020/05/autumn-autumn-leaves-beautiful-color-206648-1024x771.jpg'
response = requests.get(Url)
ImgDL = Image.open(BytesIO(response.content))
La fonction :
Il existe plein de façon d’effectuer un seuillage en python, je vous propose celle-ci :
def Seuillage(Img:Image, s:int)->Image:
newImg = np.copy(Img)
for i in range(len(newImg)):
for j in range(len(newImg[0])):
x = newImg[i,j,0]
y = newImg[i,j,1]
z = newImg[i,j,2]
if x < s or y < s or z < s :
newImg[i,j,0:] = 0
else :
newImg[i,j,0:] = 255
return Image.fromarray(newImg, 'RGB')
Un exemple d’utilisation de cette fonction serait :
Seuillage(ImgDL,90)
Le résultat :
![Image originale](/fr/articles/seuillage-dimage-en-python/autumn-autumn-leaves-beautiful-color-206648-1024x771_hu3d03a01dcc18bc5be0e67db3d8d209a6_344859_0x0_q75_h2_.webp)
Image originale
![Seuillage d image (seuil = 110)](/fr/articles/seuillage-dimage-en-python/t%C3%A9l%C3%A9chargement-1024x771_hu7556b67333edd5a9c7405d128aaa6d1a_616169_0x0_q75_h2__3.webp)
Seuillage d image (seuil = 110)
Faire varier le seuil entre 0 et 255 peut permettre d’obtenir de nombreuses images très intéressantes :
![Seuille = 20](/fr/articles/seuillage-dimage-en-python/image-4_hu080fd39cf86a1f03439e5ca500ce4e68_134490_0x0_q75_h2__3.webp)
Seuille = 20
![Seuille = 70](/fr/articles/seuillage-dimage-en-python/image-5_hu96f7ded1e95d7fa70b33025b4f9b6d5c_130544_0x0_q75_h2__3.webp)
Seuille = 70
![Seuille = 140](/fr/articles/seuillage-dimage-en-python/image-6_huf696d49b45c39c37eb02db4f9188c478_57258_0x0_q75_h2__3.webp)
Seuille = 140