Particles are assigned a target location and color based on a source image. Friction is modulated to encourage particles to settle into their assigned target positions. With that behavior in place, shaking particles randomly will then move from a chaotic state to an ordered state, revealing the image. Sort of like a backwards etch-a-sketch.
On a side note, that's ~37,000 particles rendered as openGL point sprites, performs pretty well, starts to chug around 45 thousand. Made with processing.