Previously, I used polarized sheets to generate images. That’s too complicated to physically make, so it’s time to try something else. How about just two transparent films with black marks? Then we can try to encode four images that are revealed by overlapping the two, and rotating the top film.
This sort of rotation problem is similar to the polarization problem, but there’s a big difference: the output intensities are continuous with polarization, but only black andwhite (B/W) appear here. As a result, this can be solved as an halftoning problem, specifically with error diffusion.
So how to do this? Just as with the polarization problem, we need to deal with four spatial points at a time, and the image intensities of each image at those points. That means that we have 8 values to decide, which are trying to mimic 16 image intensities. This mismatch in inputs and outputs means that compromises must be made.
So, halftoning. Since we have eight B/W values to decide, we have 2^8=256 options for how to fill them. At each step, we need to choose one of the 256 options to reduce the error. Unfortunately, the input/output mismatch means that we can’t reach every set of image intensities. As a result, we need to do some forgetting (error loss at each step). This means that the output images won’t have the same brightness as the inputs, but will at least be close.
Ok, but does it work? Here’s a low-resolution test.
It does work! It’s not perfect, but there are definitely images! Here’s higher resolution:
I’m surprised that this works as well as it does! Of course, there are a number of artifacts. For example, the 1D error diffusion results in some linear artifacts, which could potentially be improved by switching to 2D error diffusion.
It would be pretty easy to fabricate this: just print the two films onto transparent plastic (like for overhead projectors), and hold them up to light!