Adloun

L'histogramme d'une image et l'amélioration du contraste

Exercice · informatique (tronc commun des prépas scientifiques), chapitre 8 — Matrices de pixels et images

Énoncé

Écrire histogramme_image(img) calculant la distribution des pixels, puis une fonction etire_contraste(img) qui étire les niveaux de gris de façon affine pour occuper toute la plage .

Corrigé

def histogramme_image(img: list) -> list:
    h = [0] * 256
    for ligne in img:
        for v in ligne:
            h[v] += 1
    return h

def etire_contraste(img: list) -> list:
    mini = min(min(ligne) for ligne in img)
    maxi = max(max(ligne) for ligne in img)
    n, p = len(img), len(img[0])
    assert mini < maxi, "L'image ne doit pas être uniforme"
    return [[(img[i][j] - mini) * 255 // (maxi - mini) for j in range(p)]
            for i in range(n)]

Si l'image d'origine a un contraste faible (ex: pixels regroupés entre et ), cette fonction étire linéairement ces valeurs pour les distribuer sur l'ensemble de la plage disponible , rendant les détails de l'image beaucoup plus distincts.

Les autres exercices de ce chapitre Le cours du chapitre

Un blocage sur cet exercice ? Le tuteur d'Adloun guide par questions, sans donner la réponse.