PRA 2. After Effects, màscares de convolució i plataformes de publicació de vídeo

En aquesta pràctica es demana fer una mica de tot 🙂

En les tres primeres preguntes es demana confeccionar el cartell d’una pel·lícula i substituir-lo per el d’una altra pel·lícula que hi ha en un vídeo, també s’hi han d’afegir uns títols. A aquestes altures del curs, la confecció del cartell és una tasca gairebé trivial i el “tracking” en After Effects ja s’ha practicat de forma molt més detallada a l’assignatura “Composició digital”. Resulta una feina relativament fàcil de fer i per la que no cal aprendre cap nova tècnica.

A la quarta pregunta es demana escriure un programa en Processing on s’apliqui una màscara de convolució sobre el clip generat anteriorment. Aquest és el codi que vaig presentar:

PImage img; // declaració objecte tipus PImage
String nomImatge; // declaració objecte tipus String
int matrixsize = 3; // de la matriu de convolució
float[][] matrix = { { -1, 0, 1 }, // matriu anidada amb els valors de
  convolució
  { -2, 0, 2 }, 
  { -1, 0, 1 } };
void setup() {
  size(1280, 720); // mides de la pantalla iguals que les de la imatge
  noLoop(); // el codi a draw() només s'executarà un cop
}
void draw() {
  for (int i=0; i<= 637; i++) { // 638 imatges
    nomImatge = “cartell_cine_modificat_master”+nf(i, 3)+”.png”; //
    composició del string amb el nom de la imatge
      img = loadImage(nomImatge); // assignació i càrrega imatge a varaible
    img
      image(img, 0, 0); // mostrar imatge a pantalla
    loadPixels(); // carregar a matriu pixels[] els pixels a pantalla
    for (int x = 0; x < img.width; x++) { // bucles anidats en recorregut
      pels pixels
        for (int y = 0; y < img.height; y++ ) {
        color c = convolution(x, y, matrix, matrixsize, img); // crida a
        funció convolution i assigna retorn a c
          int loc = x + y*img.width; // càlcul de pixel afectat en funció de
        coordinades x i y
          pixels[loc] = c; // assignació de color de píxel modificat
      }
    }
    updatePixels(); // mostrar els pixels modificats a pantalla
    save(nomImatge); // guardar la pantalla actual a un fitxer de imatge
  }
}
color convolution(int x, int y, float[][] matrix, int matrixsize, PImage
  img)
{
  float rtotal = 0.0; // variables per emmagatzemar resultats r, g i b
  float gtotal = 0.0;
  float btotal = 0.0;
  int offset = matrixsize / 2; // per evitar sortir dels límits de la
  imatge
    for (int i = 0; i < matrixsize; i++) { // bucles anidats per la matriu de
    convolució
      for (int j= 0; j < matrixsize; j++) {
      int xloc = x+i-offset;
      int yloc = y+j-offset;
      int loc = xloc + img.width*yloc; // posició del pixel a calcular
      loc = constrain(loc, 0, img.pixels.length-1); // restricció dels
      valors dins la imatge
        rtotal += (red(img.pixels[loc]) * matrix[i][j]); // càlcul de la
      convolució per r, g i b
        gtotal += (green(img.pixels[loc]) * matrix[i][j]);
      btotal += (blue(img.pixels[loc]) * matrix[i][j]);
    }
  }
  rtotal = constrain(rtotal, 0, 255); // restricció dels valors de color
  entre 0 i 255
    gtotal = constrain(gtotal, 0, 255);
  btotal = constrain(btotal, 0, 255);
  return color(rtotal, gtotal, btotal); // el resultat torna una variable
  de tipus color
}

 

Finalment es demanava pujar els vídeos a una plataforma (vaig escollir vimeo) i comparar-la amb altres dues.

 

Aquesta és la feina presentada:

prac2_amengual_pere

Leave a Reply