Processing the Movies

Having downloaded geometrically corrected and calibrated image files via the OPUS PDS tool, I used Björn Jónsson’s excellent IMG2PNG utility to convert the native IMG files to a more convenient and friendly PNG format. I kept all data at 16 bits per channel throughout the workflow.

Using a tried-and-tested suite of image processing software (Corel Paint Shop Pro X6, ImageJ, and Affinity for Windows), I broke down the gargantuan task ahead of me into a series of steps:

(1) I ensured the disc of the planet was centered in each frame. For best alignment, I used the high-contrast limb to measure the position of Jupiter with respect to the top and right margins. Typically, this was executed at 400% scale, thereby reducing imprecision to one quarter of a pixel.

(2) I measured the size of the Jovian disc in each frame, using an automated Python script with output funneled into a TXT file.

(3) Using Celestia, I created a pseudo-Lambertian ‘illumination mask’, to model the phase of Jupiter as seen by Voyager, capturing the way the solar illumination varies across the planet.

(4) Employing the measured disc sizes in Step 2, I created another script which automatically applied the "illumination mask" to all images in the series, thereby removing the shading. In effect, this rendered all points on Jupiter as is if they were lit by the equivalent sunlight of local noon.

(5) I created RGB composites from these de-shaded frames, using OGV for the Voyager 1 images and OGB for Voyager 2. Every monochrome frame was turned into a color composite by adding the previous and subsequent frames in the sequence. For example, frame number C1549134 was shuttered through Voyager 1’s blue filter; to turn this into a color shot, I imported the previous green (C1549132) and subsequent orange (C1549136) frames.

(6) I applied a predefined mesh warp to correct for frame-to-frame rotation of the quickly spinning planet. For this to work, the automated script needed to know the "base" filter for a given frame and the apparent size of Jupiter in pixels. In the example given above — C1549134 — "blue" was the base filter, meaning that the script had to apply a forward warp to the red(orange) channel, and a backward warp to the blue(violet/blue) channel. This clip from 2010 outlines a rudimentary version of the process.

(7) Color processing: the combined O-G-B or O-G-V frames produced a garish, greenish Jupiter. I corrected the color (subjectively) to render the planet as the human eye might see it, and the resulting movies and stills happily resemble the Hubble, Cassini, and Juno composites of the giant planet.

(8) After applying a series of sharpening and high-pass filters, I re-imposed the global shading using an inverse of the "illumination mask" I described in Step 4.

The process described above would complete the work if all the frames were whole. But there were partial frames, frames with moons, shifting moon shadows, and missing frames.

Fixing Damaged or Missing Frames

For damaged/missing frames, I found that the mesh warping method could produce very satisfactory synthetic frames. As for the moons, I initially charted the orbital motions of the satellites in Excel, recording a handful of X and Y values and employing cubic splines to interpolate all other positions. After they were erased from the processed Jupiter images using data patched in from synthetic frames, I re-instated color composites of the moons right at the end of the workflow, using my Excel data and a Python script within Paint Shop Pro to do all this semi-automatically. This worked very well, producing smoother orbital motions of the moons than manual, frame-by-frame assembly could achieve.

As for the shadows cast by the moons upon Jupiter, I didn't find any better solution than isolating the shadows from the monochrome frames and inserting them into the final color composites.

The Scan Platform: Injecting Voyager back Into the Picture

I made one version of the restored movies have had the scan platform’s pitch and yaw motions reintroduced. Why? Well, I felt that this would enhance the videos, giving the viewer a visceral sensation of being onboard a functioning and operating spacecraft.

I used the VirtualDub freeware video app, along with the similarly freely available Deshaker plugin. Ironically, I used Deshaker for the *opposite* of its intended usage! I ran the plugin on the inverted, raw Voyager frames, measuring the changing attitude of the scan platform as it shuttered away.

Importing the data into Excel, I greatly smoothed-out the x and y values, using a mix of ‘mean’ and ‘median’ functions to arrive at a compromise between faithfulness and viewability. Reinstating the ‘actual’ scan platform motions would result in an unwatchable—or at best, nausea-inducing—video!

To see how much of an improvement this version of the movie is over the old, here is the version of the Voyager 1 movie most often shown in science documentaries: