Adloun

Valider une bibliothèque d'images

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

Énoncé

Concevoir un programme de test pour s'assurer du bon fonctionnement des transformations (négatif, miroir, rotation, réduction et convolution) sans modifier l'image d'origine.

Corrigé

import random

def image_aleatoire():
    n, p = random.randint(1, 8), random.randint(1, 8)
    return [[random.randint(0, 255) for _ in range(p)] for _ in range(n)]

def copie(img):
    return [ligne[:] for ligne in img]

# 1. Tests unitaires sur une matrice témoin asymétrique 2x3
T = [[1, 2, 3], [4, 5, 6]]
assert negatif(T) == [[254, 253, 252], [251, 250, 249]]
assert miroir(T) == [[3, 2, 1], [6, 5, 4]]
assert rotation_horaire(T) == [[4, 1], [5, 2], [6, 3]]
assert reduction([[1, 3], [5, 7]], 2) == [[4]]

# 2. Tests de propriétés algébriques sur 500 configurations aléatoires
random.seed(8)
for _ in range(500):
    img = image_aleatoire()
    img_backup = copie(img)
    
    assert miroir(miroir(img)) == img
    assert negatif(negatif(img)) == img
    
    r = rotation_horaire(img)
    assert (len(r), len(r[0])) == (len(img[0]), len(img))
    assert rotation_horaire(rotation_horaire(rotation_horaire(rotation_horaire(img)))) == img
    
    # Vérification de l'absence d'effets de bord sur l'image source
    convolution(img, [[1/9]*3]*3)
    assert img == img_backup

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.