This work uses a well-established computational method for compression of digital images, the Floyd-Steinberg dither algorithm, to create multicolored screen prints based on a digital photo of a cloudy sky.
Dithering, as applied here, operates on a rectangular grid of pixels and achieves image compression in two ways. First, it reduces color depth. For example, in this project, an image with 24-bit color depth (such that a pixel can be any one of over 16 million possible colors) is reduced to 3-bit color depth (8 possible colors). Second, it reduces pixel density. For example, in this project, a 7 by 7 pixel area in the original image (i.e., 49 distinct pixels that can take on different colors) is replaced by one large square of a single color. The dithering algorithm’s job, then, is to evaluate a cluster of multi-colored pixels and to decide which single color (from a reduced color set) to replace it with, in a way that retains as much of the visual information of the original image as possible.
The Floyd-Steinberg dither algorithm has a unique feature that, counterintuitively, adds noise in the dithering process to retain important global characteristics of the source image, such as overall tone, that might otherwise be lost in the dithering process. Consider as a simple example a source image that is a uniform mid-tone gray, and suppose we wish to reduce the color depth to a single bit; that is, each square in the output image will be either black or white. A myopic dithering process would simply decide whether the gray is closer to black than to white, in which case it would produce an output image that is entirely black; an entirely white image would likewise be produced if the gray were closer to white than to black. The Floyd-Steinberg algorithm, by contrast, tracks the accumulated error as it replaces successive squares in the source image, and adds that error to the color of pixels further along in the source image that it has yet to replace. So, for example, if the algorithm has over-darkened the source image to a certain point in the process (e.g., by replacing a lot of gray with black) it lightens nearby pixels in the source image that it has not yet transformed. This is the sense in which the algorithm adds noise (error adjustments) to the source image: A given pixel in the source image may be subject to lightening or darkening that is arbitrary in that it is caused not by properties of the source image at that location but instead by operations of the algorithm on pixels elsewhere in the source image. The dithered image that results will have checkerboard pattern made of alternating black and white squares, which from a distance will closely match the overall gray tone of the source image.
The Floyd-Steinberg algorithm, in other words, introduces some distortion into the dithering process at the local level of individual pixels in the source image so that it can retain a feature at the global level (overall tone) that is likely more meaningful to viewer. In this way the dithering process resembles the human visual perceptual system, which sharpens the perceived contrast at object edges; its goal is not to accurately convey the pattern of light received at the retina, so it introduces deliberate distortions to suit its actual goal, which is to provide a meaningful (actionable) model of the three-dimensional environment that produced the retinal image. In this broader sense, the dithering process exemplifies the way we search for patterns in, and attempt to extract meaning from, perceptual inputs such as vision.
In this project, the source image is a photo of clouds taken over my home in the summer of 2021. The image is separated into three color channels (cyan, magenta, yellow). The Floyd-Steinberg dithering algorithm is applied to each channel to reduce that channel’s 8 bits of color into a single bit (i.e., a bitmap) indicating, for each square, whether it should be filled (black) or unfilled (white). The three dithered bitmaps that result are used to create screens for a three-color (CMY) screen print. The size of the squares in the dithered image is selected to be large enough to be clearly seen in the print when viewed from up close, as means of revealing to the viewer something of the process by which the dithered image was created. When viewed from a distance, those individual squares become less apparent, and the overall image of the cloud becomes more apparent.
Further, the saturated colors of the individual squares are discernible when viewed up close. The three bitmapped channels, when layered, produce 8 colors (3 bits): white (no fill; just the color of the white paper), cyan, magenta, yellow, red (magenta + yellow), green (cyan + yellow), blue (cyan + magenta), and black (cyan + magenta + yellow). The three screen layers, when printed, do not align perfectly, and the ink can vary a bit in transparency or thickness of application (and certainly doesn’t produce a perfect black), but in principle this is the set of discrete colors that should be visible when the print is viewed up close. From a distance, however, the gray of the clouds in the source image tends to dominate the perception of the print. The print might be seen as offering some lessons in color theory, as a demonstration of optical mixing, and might also remind us of instruction in art-school painting classes that encourages mixing of gray from primary paint colors rather than from black.
A point of commonality between the analysis of weather and of digital images, as discussed here, is that both involve tracking of frequencies and monitoring of when those frequencies become excessive in comparison to some standard. The dithering algorithm keeps count of how excessively it has darkened (or lightened) the output image in reference to a baseline and, if the count exceeds that baseline by enough, a corrective adjustment is made. Observation of weather events also involves tracking of excessive outcomes, whether informally through human judgment (“we seem to have more really hot days in the summer than we used to”) or formally through mathematical models. In statistics, the deviation of an observation from what is predicted from a model is referred to as a residual. A challenge we face is that, although we can conclude that there are more hot summer days (or hurricanes, or wildfires, or floods) than there used to be, and can even add up how excessive the tally might be against a given historical baseline, we cannot say with any confidence, in the moment or long after the fact, if this particular storm is one of the expected number or one of the excess.