CS 194-26 Project 1

About

This project required me to colorize the Prokudin-Gorskii photo collection, utilizing a single-scale exhaustive search over potential window displacements, as well as a multi-scale pyramid scheme algorithm to efficiently search larger '.tif' images.

Results

Example Images

Cathedral

Green displacement vector: [x=5, y=2], Red displacement vector: [x=12, y=3]

Church

Green displacement vector: [x=15, y=3], Red displacement vector: [x=12, y=-1]

Emir

Green displacement vector: [x=14, y=6], Red displacement vector: [x=-2, y=-3]

Harvesters

Green displacement vector: [x=52, y=17], Red displacement vector: [x=48, y=6]

Icon

Green displacement vector: [x=29, y=17], Red displacement vector: [x=-24, y=14]

Lady

Green displacement vector: [x=13, y=9], Red displacement vector: [x=-4, y=-12]

Melons

Green displacement vector: [x=15, y=0], Red displacement vector: [x=15, y=0]

Monastery

Green displacement vector: [x=-3, y=2], Red displacement vector: [x=3, y=2]

Onion Church

Green displacement vector: [x=37, y=16], Red displacement vector: [x=31, y=13]

Self Portrait

Green displacement vector: [x=-15, y=-9], Red displacement vector: [x=28, y=15]

Three Generations

Green displacement vector: [x=21, y=6], Red displacement vector: [x=13, y=1]

Tobolsk

Green displacement vector: [x=3, y=3], Red displacement vector: [x=6, y=3]

Train

Green displacement vector: [x=16, y=3], Red displacement vector: [x=21, y=7]

Workshop

Green displacement vector: [x=15, y=0], Red displacement vector: [x=10, y=-1]

Image Failures

My program fails to properly align the Emir of Bukhara since the images to be matched do not actually have the same brightness values. Thus, both metrics (SSD and NCC) fail to identify the optimal displacements. I ran into issues where both NCC and SSD favored aligning on border boundaries due to their relative loss, so I solved this issue by cropping 0.1 of the image shape out of each color channel. Note: Some images do not have optimal alignment due to local processing issues - I was unable to set a large enough window size to find optimum due to the runtime of exhaustive search