I wanted to call this project "Bullet Time for Real," but some jerks have a trademark on the phrase "bullet time."
The basic idea is to use a DSLR (and the fastest lens you can find/afford) in a darkened room with a long exposure (open shutter). As the projectile moves, three separate flashes of red, green, and blue light are produced, recording three separate instants in time on the red, green, and blue sensitive pixels of the camera sensor. In an ideal world, each sensor pixel would be sensitive to only a single LED color, producing three completely separate images. In reality, there is some cross-sensitivity: for instance, the green sensors see all three LEDs to some extent, causing ghosting from the other frames. I've developed a method for removing these ghosts, as explained in the first project log.
I'm approaching the development of this project in three phases. Each successive phase will work on timescales roughly 1000x faster than the last, introducing interesting new challenges.
Slow Timescale (Human)
I've already done some experiments on this scale - using low-powered LEDs and pulses of several seconds, I've been able to prove that the matrix-inversion ghost correction works. See details and images in the first log.
Medium Timescale (Milk Drop)
For these tests, I'm aiming to create some flashes of around 1 ms duration, fast enough to capture milk drops, popping balloons, and other medium-speed objects. In order to get enough light from the LEDs in these brief pulses, I'll need an array of LED chips driven with pulses tens of amps of current. I'll also need some way to trigger the flashes, and a variable time delay and flash sequencing mechanism to drive the LEDs. I'm planning to design some fast photodiode gates for triggering, and implement the timing functions on a PIC programmed in C and assembly.
Here are some initial results from the millisecond flash regime, shown as the original RGB image, a naively-separated animation, and after the ghost-reduction algorithm:
Fast Timescale (Bullet)
Three things are key to making this work: SAFETY, SAFETY, and SAFETY. Due to constraints of my space, I won't be using any firearms, only air rifles. Even so, these devices are capable of pushing pellets past the sound barrier, although I'll mostly concentrate on projectiles at around 200 m/s. At these speeds, microsecond flashes are required to avoid any blurring in the image. I'll re-use the photogate trigger developed for the slower system. Since the muzzle velocity of the air rifles I will be using shows a large variation between shots, I intend to use a dual photogate trigger to measure the projectile velocity as it leaves the rifle. Assembly code on the PIC can use this measurement to compute, while the projectile is in flight, when to fire the first two flashes so the impact can be captured precisely. The timing of the third flash will be a matter of trial and error, since the energetic interaction between the projectile and target is somewhat unpredictable.
A significant portion of this part of the project will be devoted to safety mechanisms to prevent any sort of accidents. Another challenge will be creating bright enough flashes with LEDs. I have had some custom LEDs made which I intend to drive with 1 microsecond current pulses of up to 150 amps. The lifetime of these LEDs under such abuse remains to be seen: I would consider even a few thousand flashes respectable, considering the setup time required to stage each exposure.
The ultimate goal is a three-frame animation of a 22-caliber lead pellet striking an A19 halogen light bulb. I saved the old bulbs when I replaced them with LED versions for just such an occasion.
I really liked this article, and you are doing a great job. My suggestion for you is to keep working like this because you write very well, which helps a lot of people. Thank you so much. Keep up the good work!