Prokudin-Gorskii Image Reconstruction

Introduction

This project uses (red, green, and blue) color filters to reconstruct a color image from the Prokudin-Gorskii collection.

Approach

To carry out my implementation, I first ran the given skeleton code for image splitting. Then, I used a naive search method where I exhaustively scanned smaller (single-scale alignment) images and tested the channel offsets using both Normalized Cross-Correlation (NCC) and Euclidean Distance metrics. For larger TIF images, I built image pyramids by blurring and downsampling the images.

The biggest challenge I encountered when working on this project is getting the channels to line up nicely, especially the emir.tif image. In an attempt to acheive better alignment, I implemented a cropping function and tried using different base channels.

Results (on the provided images)

cathedral
cathedral.jpg
Blue shift: (-2, -5)
Red shift: (1, 7)
church
church.tif
Blue shift: (10, -25)
Red shift: (-8, 33)
emir
emir.tif
Blue shift: (-24, -49)
Red shift: (17, 57)
harvesters
harvesters.tif
Blue shift: (-16, -60)
Red shift: (-3, 65)
icon
icon.tif
Blue shift: (-17, -41)
Red shift: (5, 48)
italil
italil.tif
Blue shift: (-21, -38)
Red shift: (15, 38)
lastochikino
lastochikino.tif
Blue shift: (2, 2)
Red shift: (-7, 78)
lugano
lugano.tif
Blue shift: (17, -41)
Red shift: (-13, 52)
melons
melons.tif
Blue shift: (-10, -83)
Red shift: (3, 96)
monastery
monastery.jpg
Blue shift: (-2, 3)
Red shift: (1, 6)
self_portrait
self_portrait.tif
Blue shift: (-28, -79)
Red shift: (8, 98)
siren
siren.tif
Blue shift: (7, -49)
Red shift: (-18, 47)
three_generations
three_generations.tif
Blue shift: (-13, -55)
Red shift: (-2, 58)
tobolsk
tobolsk.jpg
Blue shift: (-3, -3)
Red shift: (1, 4)

Results (on images of my choosing)

dog
dog.tif
Blue shift: (2, -13)
Red shift: (-1, 68)
rocks
rocks.tif
Blue shift: (19, -62)
Red shift: (-27, 56)
boat
boat.tif
Blue shift: (30, -16)
Red shift: (-35, 32)