Colorizing the Prokudin-Gorskii Photo Collection

Francis Pan

Background

Sergei Mikhailovich Prokudin-Gorskii (1863-1944) [Сергей Михайлович Прокудин-Горский, to his Russian friends] was a man well ahead of his time. Convinced, as early as 1907, that color photography was the wave of the future, he won Tzar's special permission to travel across the vast Russian Empire and take color photographs of everything he saw including the only color portrait of Leo Tolstoy. And he really photographed everything: people, buildings, landscapes, railroads, bridges... thousands of color pictures! His idea was simple: record three exposures of every scene onto a glass plate using a red, a green, and a blue filter. Never mind that there was no way to print color photographs until much later

He envisioned special projectors to be installed in "multimedia" classrooms all across Russia where the children would be able to learn about their vast country. Alas, his plans never materialized: he left Russia in 1918, right after the revolution, never to return again. Luckily, his RGB glass plate negatives, capturing the last years of the Russian Empire, survived and were purchased in 1948 by the Library of Congress. The LoC has recently digitized the negatives and made them available on-line.

Overview

The goal of this project is to automatically generate full-color images using Prokudin-Gorskii's work to help bring his images of 19th century Russia to life.

Color Alignment

Unfortunately, we cannot simply overlap the images from the three channels due to the small differences between each channel.

Approach

The baseline solution is to do an exhaustive search with an offset range of [-15, 15]. We essentially take a slightly cropped center protion of the green and red channels, and slide that window by 15 in every direction. The window offset with the minimum loss gives us the offsets we should use for the green and red color channels when layer with the blue channel.

Results of exhaustive search:

R: (12, 3) G: (5, 2)
R: (3, 2) G: (-3, 2)
R: (7, 3) G: (3, 3)

However, this approach becomes less useful as soon as image sizes go up, since if we use the same small [-15, 15] window, larger images won't me aligned properly. We also cannot simply increase the wndow size, as that will significantly increase runtime as well. The solution is to use pyramid search, in which we scale down the image by a certain number of levels, and starting as the highest (blurriest) level, we run the exhaustive search to determine the intial offset to search the next level. This will keep runtime low while retaining accuracy.

Results of pyramid search:

R: (58, -4) G: (24, 4)
R: (0, -402) G: (48, 24)
R: (124, 14) G: (60, 18)
R: (90, 22) G: (40, 18)
R: (112, 12) G: (50, 8)
R: (178, 14) G: (82, 10)
R: (108, 36) G: (52, 26)
R: (176, 36) G: (78, 28)
R: (112, 12) G: (52, 14)
R: (86, 32) G: (42, 6)
R: (104, -12) G: (54, 0)

As you can clearly see, all the images except for Emir turned out great. The reason the Emir failed is because the brightnesses of the three channels where not consistent. Luckily, our problem can be fixed by simply matching to the green channel instead of the blue channel. The other images had no visible change so I will not show them here.

Emir aligned using the green channel as base:

R: (56, 18) B: (-48, -24)

Some images I picked from the LoC:

R: (94, -8) G: (40, 8)
R: (80, -2) G: (14, -2)
R: (108, 56) G: (48, 40)