Project 1: Prokudin-Gorskii Images

Methodology

I implemented the standard pyramidal method for aligning the images. Specifically, when the image is larger than 50 pixels in both dimensions, I down-sample the image by a factor of two, align that (recursively), then use the result as a seed for a small search (1 pixel in all directions) at high resolution. When the image is smaller than 50 pixels in at least one dimension, I revert to a brute-force search of 4 pixels in every direction.

During alignment, all color channels are zero-centered and normalized. As a cost metric, I trim 15% off every edge and use L1-distance (sum of absolute differences) on the interior region.

For bells and whistles, I implemented a trimming phase, which attempts to remove the noise around the edge of the image. It can be understood as a maximization algorithm: the algorithm rewards removal of higher-than-average color asymmetry while quadratically penalizing the amount of edge trimmed. The algorithm is fairly successful, but doesn't seem particularly concerned with black bars, because black is symmetric accross color channels.

Results - Small Images (Provided in Assignment)

Offset (y,x)
(Red v Blue)/(Green v Blue)
RawAlignedTrimmed
(12,1)/(5,1)
(14,4)/(6,2)
(5,5)/(2,3)
(4,2)/(1,1)
(13,-1)/(1,-1)
(12,0)/(6,1)
(4,3)/(1,2)
(9,-1)/(4,1)
(5,1)/(2,0)

Results - Small Images (Ones I Found)

Offset (y,x)
(Red v Blue)/(Green v Blue)
RawAlignedTrimmed
(9,0)/(2,0)
(14,4)/(7,3)
(17,-1)/(8,0)
(15,3)/(8,2)
(13,-1)/(7,0)

Results - Large Images (.tif versions hyperlinked)

Offset (y,x)
(Red v Blue)/(Green v Blue)
RawAlignedTrimmed
(87,31)/(42,5)
(71,33)/(25,20)
(107,56)/(48,38)
(125,33)/(57,25)
(92,43)/(39,16)
(49,14)/(16,6)
(42,4)/(16,3)
(11,18)/(-16,10)
(50,38)/(34,23)