Gneumatic design | technology | artroygbiv [at] gmail [dot] com

ICM Final – Where is Now?

Click to view at full size

I’ve already documented the genesis of this project idea pretty thoroughly here, but I wanted to provide a brief update on how it’s progressing. I’m still tweaking the pixel analysis and image processing algorithm, but I’m pretty happy with the basic concept. To recap, Where is Now? is a two channel video in which each pixel in a video is analyzed and compared to the corresponding pixel in the previous frame. One channel displays only pixels that change from one frame to the next, while the other displays only pixels that are the same. Viewed side by side, these moving images constitute a visual and conceptual outline of the elusive ‘now’ – that moment which is perpetually receding into the past and coming into being from the future. The now is that which simultaneously changes/differs and endures/repeats.

For its source material, Where is Now? appropriates the film ‘Groundhog Day,’ in which the protagonist endures a kind of ‘perpetual present,’ repeatedly living the same day over and over. Specifically, I will use the numerous scenes that are repeated throughout the film as Bill Murray re-lives the same events over and over.

In addition to demonstrating claims about temporality and the nature of the present, Where is Now? investigates the relationship between the moving image, on the one hand, and the frame and the pixel as discrete compositional units in digital media and time-based art. It also questions the meaning/significance of the pixel in relation to the still frame – what does it mean to observe the change of pixels over time, as opposed to the serial/linear change of still images in analog film?

Not a lot to document for this project, in that it is essentially all just Processing code, and I can’t post the sketch without the video clip, which is almost a gig. But I will update with stills and code as I continue to refine the pixel analysis and image processing algorithm, and streamline the approach to reading frames into Processing’s video buffer (which is still kinda slow).

Code:

//  Import video library
import processing.video.*; 
Movie psycho;
//  Vars for previous frame and current frame
PImage previous, current, display; 
// Difference thresh determines how close a pixel 
// must be to its predecessor to be be displayed.
int threshold = 50;
void setup() {
     size(708,470);
     previous = createImage(width, height, ARGB);
     current = createImage(width, height, ARGB);
     display = createImage(width, height, ARGB);
     frameRate(30);
     psycho = new Movie(this, "VTS_01_1.m4v");
     psycho.play();
     psycho.loop();
}

void draw() {
     // Read frame from QT movie
     if (psycho.available()) {
          previous.copy(current,0,0,width,height, 0,0,width,height);
          previous.updatePixels();
          psycho.read();
          current.copy(psycho,0,0,width,height, 0,0,width,height);
          current.updatePixels();
     }
     // Load pixels from screen and images
     loadPixels();
     previous.loadPixels();
     current.loadPixels();
     // Loop through pixels
     for (int y = 0; y < height; y++) {
          for (int x = 0; x < width; x++) {
           // Calculate pixel location
           int loc = x + y * width;
           //  Get rgb values for pixel loc in prev image
           float prevR = red(previous.pixels[loc]);
           float prevG = green(previous.pixels[loc]);
           float prevB = blue(previous.pixels[loc]);
           //  Get rgb values for pixel loc in current image
           float currentR = red(current.pixels[loc]);
           float currentG = green(current.pixels[loc]);
           float currentB = blue(current.pixels[loc]);
           // Compare distance between pixel value for current and next
           float distance = dist(currentR,currentG,currentB,prevR,prevG,prevB);
           //  If pixel value distance exceeds threshold, display pixel
                if (distance < threshold) {
                     display.pixels[loc] = color(currentR,currentG,currentB);
                }
                else {
                     //display.pixels[loc] = color(255,255,255);
                }
           }
     }
     display.updatePixels();
     image(display,0,0);
}

One Response Subscribe to comments


  1. Do Not Read » Blog Archive » The autonomy of film-frames as opposed to video-pixels

    [...] post was instigated by the discussion about Patrick Grizzard’s Introduction to Computational Media piece in Danny Rozin’s class. Picture from [...]

    Dec 14, 2008 @ 9:50 pm

Reply