Hi all! I just finished up a Julia implementation of a cool algorithm for my computational photography class project, and I thought it would be worth sharing. The idea is called an “edge camera”, in which a edge (like the corner of a wall) acts as a partial 1-D pinhole camera, creating a (very faint) image of the scene around the corner. By looking at subtle variations in the shadow cast by the corner on the ground, we can actually infer, for example, the number of people on the other side of the wall and how those people are moving.
You can see more about the original algorithm from the authors of the paper here: https://people.csail.mit.edu/klbouman/cornercameras.html
And you can see my Julia implementation here: https://github.com/rdeits/EdgeCameras.jl/blob/gh-pages/notebooks/demo.ipynb
I’ve tried to keep the implementation as simple as possible, but I snuck in a few Julia-specific goodies, like the fact that the “images” that I reconstruct are actually AxisArrays with Unitful dimensions on their axes, so you can do things like ask for the slice of an image between two times by doing im[:, 5u"s"..10u"s"]
.
Many thanks to the developers of Images.jl, VideoIO.jl, AxisArrays.jl, Unitful.jl, and CoordinateTransformations.jl, without whom I would have had to do my final project in (shudder) C++.