I was in Rome airport not long ago, and noticed that the reflection of the striped ceiling looked warped and bent due to the non-flatness of the reflecting surface:

As I’m sure will be familiar to any traveller, the excruciating boredom of an airport drives the mind to wander, so here is my derivation of the underlying mirror surface structure from this image.

Let’s first sketch out the situation we’re dealing with and formalise the problem statement. Let’s project a given pixel on my camera out, onto the mirror, and onto the ceiling surface as in the red lines below:

A change in viewing angle of changes the physical distance I view on the ceiling by , where is the relative inclination of the mirror surface, and are the camera-mirror and mirror-ceiling distances. One can show that

and therefore that . This is what you would expect if the mirror weren’t there, and is just a statement that light travels is straight lines!

However, if the mirror surface is angled such that the light ray is deflected by an angle , the part of the ceiling that I view is shifted by a distance . This is why the reflection looks warped.

Because the ceiling has a regular structure, I know what the reflection should look like, and therefore it is possible to figure out the local angle of the mirror surface, and from that the shape of the mirror.

Doing the geometry, one can show that

Because the mirror is far away, must be quite small. Also, the warping isn’t too severe so let’s also assume is also small. In that case, the above horrible expression boils down to

This is nice and simple, and in this limiting case the exact angle of the mirror doesn’t matter.

The next step is to calculate , which I will do for a single mirror. I went and manually traced out the contours of the reflection, and corrected for the perspective distortion. I also drew what the reflection would look like for a perfectly flat mirror:

There are many ways to work out the mapping between the left and right images, and this kind of problem is one I worked on quite often during my PhD.

Let’s think of the left image as being defined by the function

which states that the image is approximately sinusoidal in the vertical direction, with some typical wavelength . The image on the right is instead

i.e. is also sinusoidal, but distorted by an extra phase term .

There are again many ways to calculate this phase term, known as the phase retrieval problem, and here I used a particular one described by Ma et al., based on something called the 2D continuous wavelet transform.

The output looks as follows:

This looks about right, and shows that the image appears to shift up at the top of the image (yellow regions), and down at the bottom (blue regions). We can already then start to imagine that the mirror is bulging out at the centre.

To relate the phase to the apparent image position shift , note that a change in of corresponds to a change in position by one spacing between the ceiling features , so that

To get to the actual mirror shape, if the displacement of the mirror out of the plane as a function of position is , then

and the appropriate direction to take the derivative is given by the perpendicular to the direction of the linear features in the undistorted image, which can vary with position. This sounds complicated, so here I’ll be lazy and just assume that we just need to integrate in the vertical direction, i.e. the linear features in the ceiling appear mostly horizontal. Under this assumption, we have

Putting in reasonable numbers 5m, 30cm, and assuming that the mirror is around a metre across, we do the integration and get the following.

So as expected, the mirror has a bit of a bulge in the centre, around 1-1.5 cm in height, but also appears to be bending backwards a bit at the bottom.

We can verify our calculations even farther. In the image below I have taken the 3D surface, plotted above, and inserted it into a 3D scene rendered in Blender, with roughly similar geometry.

You can see the reflection of the ceiling is very similar to that observed, which is nice.

Finally, given that everything was in Blender, it is also interesting to see how the reflection changes as the severity of the warping is increased:

That’s all for now, if this post has spiced up time spent lounging around in an airport, you’re very welcome.