commandes utiliseés : Image.open(), split(), merge(), getdatata(), putdata(),save().

La transformation du photomaton avec Python


Le principe

On part d'une image carrée de côté 256 pixels (remarquer que 256=28 ) et à chaque étape, les pixels sont déplacés suivant le schéma suivant.

Avant Après

Sur une image carrée

Observation

En 8 étapes, on retombe sur l'image de départ .

Sur une image plus simple

On a pris une image de 128 pixels de côté (n=7) . On voit l'évolution vers le gris avec un brusque retour au départ.

Le code

#-*- coding:Latin-1 -*-
 
def bijection(m,a,b):
    #creation d une liste nulle de meme longueur que m
    p=[0]*a*b

    for k in range(a*b):
        #on transforme en ligne et colonne
        l=k//a
        c=k%a
        if l%2==0:
            l=l/2
        else:
            l=l/2+b/2
        if c%2==0:
            c=c/2
        else:
            c=c//2+a/2
        p[a*l+c]=m[k]
    return p


import Image



im = Image.open("lancelot.jpg")
#on recupere les dimensions de l image
w,h=im.size
#On eclate l image en trois (rouge vert bleu)
r,g,b=im.split()
#on transforme l image en liste
r=list(r.getdata())
g=list(g.getdata())
b=list(b.getdata())

#nombre d iterations
it=7

for z in range(it):
    r=bijection(r,w,h)
    g=bijection(g,w,h)
    b=bijection(b,w,h)


#creation de trois nouvelles images
nr = Image.new("L",(w,h))
nr.putdata(r)
ng = Image.new("L",(w,h))
ng.putdata(g)
nb = Image.new("L",(w,h))
nb.putdata(b)

#fusion des trois nouvelles images
imgnew = Image.merge('RGB',(nr,ng,nb)) 

imgnew.save("lan"+str(it)+".png") 






 
 
 

fait le 10 juin 2014 pour Stéphane