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.