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
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
Seuille = 70
Seuille = 140