Brouiller une photo

La transformation du Photomaton !

L'image de la Joconde comporte 256 lignes et 256 colonnes numérotées de 0 à 255. La transformation du photomaton consiste à réaliser l'opération suivante sur les numéros des lignes : on prend les lignes de rang pair qu'on fait suivre de celles de numéro impair. De même, pour les numéros des colonnes — cela explique l'apparition de quatre versions en plus petit de l'image initiale. Le pixel (0, 0) reste donc en position (0, 0) ; le pixel (1, 0) passe en position (128, 0) ; le pixel en position (1, 1) passe en position (128, 128) ; le pixel en position (4, 5) passe en position (2, 130), etc. (pour un numéro pair 2k on passe à k, pour un numéro impair 2k + 1 on passe à 128 + k).

L'image ci-dessous illustre plus clairement la transformation réalisée.

ExempleL'algorithme du photomaton

L'algorithme du photomaton illustrée ci-dessus a été retranscrit dans une fonction photomaton() dans le programme ci-dessous :

  • La fonction photomaton() prend en paramètre une image nommée img

  • La fonction photomaton() renvoie une image modifiée par la transformation du photomaton.

Recopiez, analysez et exécutez ce programme.

1
def setup():
2
    size(256,256)
3
    monImage = loadImage("monalisa_256.jpg")
4
    newImage = photomaton(monImage)
5
    image(newImage,0,0)
6
7
def draw():
8
    pass
9
    
10
def photomaton(img):
11
    l,h=img.width,img.height
12
    newimg=createImage(l,h,RGB)
13
    for y in range(h):
14
        for x in range(l):
15
            couleur = img.get(x,y)
16
            if x%2==0 and y%2==0:  # x et y sont pairs
17
                newimg.set(x//2,y//2,couleur)
18
            elif x%2==0:           # x est pair et y impair 
19
                newimg.set(x//2,h//2+y//2,couleur)
20
            elif y%2==0:           # x est impair et y pair
21
                newimg.set(l//2+x//2,y//2,couleur)
22
            else:                  # x et y sont impairs
23
                newimg.set(l//2+x//2,h//2+y//2,couleur)
24
    return newimg

Exercice Im10 : Mona Lisa au photomaton

Dans cet exercice, vous allez transformer légèrement l'exemple ci-dessus de manière à

  • partie de l'image originale

  • à chaque appui sur la barre espace, vous appliquerez à l'image affichée à l'écran la transformation du photomaton

En appuyant plusieurs fois, vous obtiendrez donc une succession d'image de plus en plus brouillées.

Indications :

  • Dans cet exercice, vous n'avez pas à modifier la fonction photomaton qui applique la transformation.

  • Vous aurez par contre probablement besoin d'une variable globale monImage servant à stocker l'image qui est affichée à l'écran. Si nécessaire, nous pouvez vous référer aux exemples précédents qui utilisent une telle variable.

  • En appliquant 8 fois la transformation, vous aurez une surprise ! !

Ex Im11 : Challenge final

Téléchargez l'image ci-dessous et essayez de décoder le message qu'elle contient !