La Joconde déformée

Publié le 19 Septembre 2010

Les habitués de ce blog savent que la Joconde a toujours été pour J... une sorte de référence qu'il se complait à massacrer à chaque fois qu'il écrit un code pour déformer des images. Hé bien, voila, ça recommence ! Voici une petite série de la Joconde passée à l'algorithme d'une déformation du plan vers lui-même, RxR vers RxR quoi... Soyez rassurés, elle n'a pas souffert, il ne s'agit que de sinus et de cosinus. D'autres séries suivront et elles seront plus violentes.

Pour les plus curieux, ces déformations ont été faites avec Processing et le code est en bas.

 

joconde enfant

Joconde before nose surgery

Joconde huhuhu

Jocondenstein

Joconde squared

Mac joconde

 

Donc, voici pour le plus intéressés, le code qui a servi à cela. Bien sûr, Over-blog ne propose aucun outil de mise en ligne de code, donc la mise page reste sommaire...

 


PImage b;
int i, j, sx, sy, loc,ii ,jj, numsequence, numeroimage;
float rouge1, vert1, bleu1,x,y,t;

void setup(){
  b = loadImage("joconde_nettoyee.jpg");
  size(b.width, b.height);                // dimensions
  sx = width;                    // variable définissant la largeur
  sy = height;                   // -- et la hauteur de l'espace de jeu
 
  background(0,0,0);
 
  t=0;
  numeroimage=1;
  numsequence=int(random(1,1000));
}


void draw(){
 
  t=t+1;
 
  for (int ii = 0; ii < sx; ii=ii+1) {
    for (int jj = 0; jj < sy; jj=jj+1) {
           
      // le point actuel à recalculer est (ii,jj)
      // on recalcule les coordonnées x,y après la transformation dans l'image d'origine
      // VOICI LA TRANSFORMATION qu'il faut changer pour obtenir d'autres effets.


      x=ii + 185*cos(0.08*ii+t) *sin(0.02*ii+t)      *sin(ii*PI/sx);
      y=jj + 185*sin(0.08*jj+t) *sin(0.02*jj+t)      *sin(jj*PI/sy);
     
      //-------------------------------------------------------------
      // on applique le modulo pour être sur de retomber dans l'image
      x=(sx-1+x)%(sx-1);
      y=(sy-1+y)%(sy-1);
     
      // (j,i) (lig col) position d'un pixel dans la'image d'origine
      i=int(x); // colonne
      j=int(y); // ligne
     
      // on récupère la couleur d'origine
      loc = int(int(i) + int(j)*sx); // loc est le numéro du pixel dans l'image
      rouge1 = red(b.pixels[loc]);
      vert1 = green(b.pixels[loc]);
      bleu1 = blue(b.pixels[loc]);
     
      stroke(rouge1, vert1, bleu1);
      fill(rouge1, vert1, bleu1);
      point(ii,jj);
    }
  }
 
  filter(BLUR);
}

void mousePressed() {
  saveFrame("deformation_image-" + numsequence + "-" + numeroimage + ".jpg");
    println("PHOTO "+ numsequence + " - " +  + numeroimage );
    numeroimage=numeroimage+1;
}

 

Rédigé par J...

Publié dans #logiciels de création

Commenter cet article