image processing

Lithophane-based Hidden Images

I received a comment with a great idea: try to hide images in pairs of lithophanes! Lithophanes are thin sheets of an opaque and translucent material with varying thickness that display an image when held up to light. The image is bright where the material is thin, and dark where the material is thick.

Previously, I’ve hidden images by rotating layers with polarization or black/white transparencies, but lithophanes use a different type of light transmission. Since the light is scattering through a material, the intensity of the transmitted light is dependent on the Beer-Lambert law. If the thickness of the material is t, the output intensity is I_{out}=I_0 e^{-k t}, where k governs how quickly the light is attenuated.

Properly simulating this means that I need to know the minimum and maximum thicknesses of the lithophanes, and the extinction coefficient. Instead, I’ll take the lazy way out and say that the I_{out}=I_0 (1-t/t_{\text{max total}}). I’ll also assume that the minimum thickness of a lithophane is zero, and the maximum thickness of each layer is 1. These assumptions should give a good approximation of the best-case scenario, I think.

How many pictures can be hidden? At which arrangements? First, I’ll try with white noise images. That will give me a sense of the average error behavior, which is tabulated below.

Angles that reveal imagesStandard dev. of error
Two subsequent, like [0, 90]0.13
Two opposite, like [90, 270]0.15
Any three0.19
All four, [0, 90, 180, 270]0.22
Error defined as the difference between the reconstructed and ideal intensities.

This suggests that we could hide four images, but it’ll look substantially worse than hiding two. I’ll again use random search to optimize the results, for each of those categories. The results are in the following image.

Each column is labeled at the top with the images that should be visible. The ones that aren’t mentioned should look like junk.

The images are definitely more visible when the optimizer tries to improve them. The first column gives decent results, but the rest are pretty bad. Well, let’s take a look at the individual layers for that first column:

You can see the two images in the separate panels, but the overlapped versions are much better. It does look neat as an animation:

The version with four hidden images looks cool too, but the images just aren’t distinct enough:

It should show: Pearl Earring, Mona Lisa, skull, stormtrooper

A halftoning approach could be useful, but would be challenging to fabricate due to rapidly alternating intensities. Another option is to fiddle with the intensity ranges, as that may provide more appropriate values. It’s a tricky problem!

3 replies on “Lithophane-based Hidden Images”

Thank you for trying this out so quickly! Shame that it is not quite as effective. I suppose there is an in between compromise somewhere, with a limited amount of opacity steps. Like the original had 2 steps, transparent or opaque, this one has I suppose 255 steps.. But what does one get with 4?
I hope I get a chance to try this out for myself some time, thank you for the inspiration and good luck playing around with this some more!

I should have properly read your article before I commented, I see you understood all of that already, haha

Once again, well done and thank you!

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.