Project 1

In this project, I take a few digitized Prokudin-Gorskii glass plate images and used image processing techniques to automatically produce a color image from them. In order to do this, I first divide the given image into three equal parts. Then for small images, I search over a window of [-15,15] pixels and then use the structural_similarity function from skimage to see how well the images align to find the best alignment between the blue and red, and blue and green plates.

However, this is time-consuming for large images, leading me to implement an image pyramid. In this algorithm, I scale the image down by a factor of 2 and then run my search algorithm over the [-15,15] pixel range. After this, I scale the best displacement I found by 2 and then search in a [-2, 2] pixel range around it. I keep recursively doing this until I reach the original image resolution to find the optimal alignment.

I ran into some problems on the Emir image where the cropping I was doing before processing the image interfered with the np.roll algorithm, leading the alignment to be off. Thus, I reduced the amount I was cropping the images to 5% in order to avoid this. My algorithm seemed to do well on all the images I processed, except for a few artifacts which were unavoidable, such as if someone moved in an image.

V Malorossii

V_Malorossii_fixed.png

Cathedral

cathedral_fixed.png

Church

church_fixed.png

Emir

emir_fixed.png

Harvesters

harvesters_fixed.png

Icon

icon_fixed.png

Lady

lady_fixed.png

Man on Camel

man_camel_fixed.png

Melons

melons_fixed.png

Monastery

monastery_fixed.png

Old Mosque

old_mosque_fixed.png

Onion Church

onion_church_fixed.png

Sculpture

sculpture_fixed.png

Self Portrait

self_portrait_fixed.png

Three Generations

three_generations_fixed.png

Tobolsk

tobolsk_fixed.png

Train

train_fixed.png