Red shifted ten pixels right, blue ten left, to line up the masts. The shoreline still fringes: further away, moving faster.
A camera built to stare at conveyor belts, pointed out the window of a moving train. Every read of its single-pixel-wide sensor becomes one column — and the accelerometer taped to the case is what makes the result readable instead of smeared.
The camera is a Basler ruL2048-19gm, a 1×2048-pixel monochrome sensor whose intended career is inspecting factory conveyor belts. Its readout tops out just shy of 19,000 lines per second — the ceiling, not the working rate: Philo shoots 250-microsecond exposures at about 4,000 lines a second, more than the picture needs. New, Basler’s lowest-spec current models run around US$700; this one came off eBay for a tenth of that, wearing an old Vivitar 28mm lens on a C-mount adapter, in a 3D-printed case, sensor boards stuck on with blue painter’s tape.
The hard part is speed, because an accelerometer does not measure it. It measures acceleration; velocity is the integral of that, relative to a starting value nobody knows. Philo assumes zero at a station and otherwise guesses until a value “smells right”. The accelerometer also samples four times slower than the camera grabs lines, so several lines share one speed. A GPS went on to fix that and never worked — Boston’s trains block the signal, and at ten fixes a second one reading covers 400 lines. Uncorrected, the first try — a phone pushed along on an office chair — came out squished, the art on the wall illegible. Corrected, station signs are readable.
What comes out is enormous: the Red Line crossing the Longfellow Bridge is one photograph 107,509 pixels wide; a Montréal REM run is 110,054; the San Francisco–Oakland ferry gave up a 56,894×2,048 excerpt. They exceed JPEG’s 65,535-pixel ceiling, so they live as TIFFs. Parallax stays unsolved, and becomes a choice: distance-per-pixel is set by hand, segment by segment, then stitched.
The write-up is 4,600 words of what went wrong. The slowest exposure is 1/100s, so it is daylight only — tunnels and most stations are out. An unflushed serial port cost a day’s shooting and left a half-second seam. One train crawled so inconsistently that integration error convinced the software the camera was travelling backwards. Its colour body sees infrared on all three channels: leaves came out white until a 400–700nm filter went on.
The postprocessor is on GitHub under MIT; the capture tool is public too, without a licence file, and needs Basler’s SDK. None of which makes it reproducible on a whim: you need the camera, a tripod, a battery bank, a tethered laptop, and — in Montréal — an answer for the security guard who asks what you are doing.