To re-imagine photogrammetry from first principles, using the simplest and smallest code possible, and the cheapest possible mechatronics.
Educationally, it could be used as a starting point to brainstorm evolutions to the code that may be present in professional photogrammetry software.
Evaluating the code as a personal creative project, I love the ghostly, glitchy quality of its 3D scans. I wrote the rudimentary 3D colour wireframe display
myself, because there is a bug in the Processing video library on Mac that prevents it capturing video whilst using Processing's 3D renderer.
The goal is to derive a point cloud and colour map of a physical object, from a video image.
The complex maths usually employed in photogrammetry can be avoided by controlling the usually 'unknown variables' in the physical setup as tightly as possible.
For example, whilst professional photogrammetry software can digest images from unknown angles and elevations, the rotation of the scanned object in my setup
is controlled by a stepper motor directly linked to the software.
I coded this project from scratch in Processing. The object to be scanned is rotated by a stepper motor controlled by an Arduino based CNC board.
With an extremely simple algorithm based on brightness, the code detects the edge of the object as it rotates. Using trigonometry, the position of this edge within the video frame
can be converted into a position in 3D space. The drawback of this technique is that the distance of this point from the camera is ambiguous,
causing some distortion to points on the object that are further away from its central axis. To fix this problem, I would need to make the mechanism
and/or code much more complex, which is at odds with my aim to simplify the technique as much as possible. From an aesthetic point of view,
it is interesting to create these distorted copies of objects rather than perfectly accurate scans.
^
Gallery
Page 2: Arduino / Raspberry Pi / Analogue Eurorack Modules
Key Technologies
Arduino: Interrupts, port manipulation, code optimisation to run at audio rate
Raspberry Pi: Interfacing Python code with analogue voltages via chips talking over SPI