Rolling Shutter Effect demonstrated with Python

58 comments · 99% upvoted · source · other discussions

comments

Swipecat [OP]

I watched the Youtube video Rolling Shutter Explained on the Cheap by Matt Parker where he shows that you don't need to visit an actual aeroplane with expensive slow-motion cameras to demonstrate the rolling shutter effect on aircraft propellors. He shows that you can do it with a model propellor connected to an electric drill — then some Python code to process the video to emulate the rolling shutter effect and to add a green line scanning down the image.

Well, I thought, let's do the whole thing in Python.

Here's 30 lines of Python, using the Numpy and Pillow libraries and ffmpeg to create the video:

https://github.com/dafarry/rolling-shutter-effect-python/blob/master/rolling-shutter-makevideo.py

Here's another version that uses Tkinter to display the video to your screen in real time rather than making a video. It needs a fast(ish) PC to display smoothly:

https://github.com/dafarry/rolling-shutter-effect-python/blob/master/rolling-shutter-tkinter.py

[deleted]

May you please explain the math on this? Especially the use of complex numbers for the propeller

Swipecat [OP]

If you have a complex plane Z, and plot the absolute value |Z| in the third dimension, what do you have? The further from the origin, the greater its height, so it's a cone.

Cut a section through the cone at a height of H: |Z| = H and you have a circle.

And |Z| < H is a solid disk in "boolean" terms.

A cone offset from the origin by A is |Z - A| .

Consider adding the heights of two cones together then cut through them: |Z - A| + |Z - B| < H ...it's perhaps not entirely obvious that they combine to form a solid ellipse, but they do.

Put the focus B back at the origin... |Z - A| + |Z| < H

Then spin the focus A around the origin in 6 steps and you have 6 ellipses.

Combine them with boolean logic and you have a propeller.

[deleted]

Thanks!