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

Le code source sur Github

seuillage-keskec.ipynb

Sources

  1. Seuillage d’image - Wikipédia
  2. Forum Développez.net