Retinatura stocastica

    let foto;

async function setup() {
    createCanvas( 670, 440 );
    foto = await loadImage( "young-woman.jpg" );
    pixelDensity( 1 );

    foto.loadPixels();
    loadPixels();
    for (let i=0;  i<foto.pixels.length;  i+=4) {
        let luce = foto.pixels[i];
        let grigio = 0;
        if (luce > random( 255 )) {
            grigio = 255;
        }
        pixels[i] = grigio;
        pixels[i+1] = grigio;
        pixels[i+2] = grigio;
        pixels[i+3] = 255;
    }
    updatePixels();
}
  

  

Il rosso di ogni pixel della fotografia, fra 0 e 255, usato come luminosità.


  

Il pixel diventa bianco se la sua luminosità supera un valore casuale: quasi sempre nelle zone chiare, quasi mai in quelle scure. Ogni pixel è solo bianco o nero, ma la densità dei punti bianchi restituisce i toni della fotografia.

Provare a usare il verde o il blu, sommando 1 o 2 a i in foto.pixels[i], oppure la media dei tre canali: (foto.pixels[i] + foto.pixels[i+1] + foto.pixels[i+2]) / 3.

Provare a sostituire random( 255 ) con randomGaussian( 128, 40 ), poi a ridurre la deviazione standard fino a 0: con una soglia fissa i toni intermedi spariscono.

Provare a spostare il ciclo in una funzione draw(), insieme a updatePixels(): a ogni fotogramma i punti cambiano posto, ma la figura resta.

Per far funzionare lo sketch è necessario che la cartella dello sketch contenga l’immagine usata:

 

Nella stampa i retini stocastici seguono lo stesso principio: punti tutti uguali, distribuiti in modo irregolare e più o meno fitti, invece dei punti di grandezza variabile disposti su una griglia regolare dei retini tradizionali.