The input: no more and no less than the Prokudin-Gorskii collection, formatted as digitized stacks of glass plate negatives (where each of the aforementioned negatives represents a single RGB color channel).
The output: colorized photographs. In this particular case, colorization comes down to aligning the three negatives and stacking them into a single (
height) x (
width) x (
3) NumPy array. We align by experimentally translating two of the negatives and measuring the quality of alignment with the final negative, through normalized cross-correlation over either colors or edges. Eventually, of course, our aim is to take the RGB alignment with the best score.
To speed up the process, we run a coarse-to-fine search (read: image pyramid) over the displacements.