Une image en niveaux de gris est une matrice d'entiers de 0 (noir) à…
Exercice supplémentaire · niveau 2 · NSI (première), chapitre 4 — Les types construits · Les matrices au travail : images et automates
Énoncé
Une image en niveaux de gris est une matrice d'entiers de (noir) à (blanc). Écrire negatif(img) et seuillage(img, s) par compréhension. Quelle propriété du négatif se teste sans écrire aucune réponse ?
Corrigé
def negatif(img):
"""Negatif d'une image en niveaux de gris.
Precondition : img est une matrice non vide de valeurs entre 0 et 255.
"""
assert len(img) > 0 and all(len(l) == len(img[0]) for l in img)
assert all(0 <= p <= 255 for ligne in img for p in ligne)
return [[255 - p for p in ligne] for ligne in img]
def seuillage(img, s):
"""Image en noir et blanc : 0 sous le seuil s, 255 a partir de s."""
assert 0 <= s <= 255
return [[0 if p < s else 255 for p in ligne] for ligne in img]
La double compréhension est ici la bonne écriture : chaque pixel du résultat ne dépend que du pixel de même position, et rien d'autre. Aucune matrice intermédiaire, aucun risque d'aliasing — la compréhension construit des lignes neuves.
La propriété qui se teste sans réponse écrite : le négatif est involutif.
img = [[0, 128, 255], [10, 200, 90]]
assert negatif(img) == [[255, 127, 0], [245, 55, 165]]
assert negatif(negatif(img)) == img # involution
assert seuillage(img, 128) == [[0, 255, 255], [0, 255, 0]]
assert seuillage(img, 0) == [[255, 255, 255], [255, 255, 255]]
Comme au chapitre 3, l'involution seule ne prouve rien — l'identité la vérifierait. D'où le premier assert, calculé à la main : , et non .
Le détail à ne pas manquer : , pas . L'intervalle compte valeurs, et il n'a donc pas de centre exact. Le gris « du milieu » n'existe pas — c'est le même décalage de que celui du complément à deux au chapitre 1.
Le seuillage à rend une image entièrement blanche, puisqu'aucun pixel n'est strictement inférieur à . Cas limite utile : il vérifie que la comparaison est bien < et non <=.
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.