CSCI1430 Project 1 : Hybrid Images

Michael Price (mprice)


The goal of the assignment was to create images that yield different intepretations when viewed from different distances or scales.
This is accomplished by adding the low-frequency components of one image to the high frequency components of another.


Algorithm

We decompose our images into gaussian and laplacian image pyramids: This is accomplished by repeatedly convolving the image with a gaussian kernel and resampling to form the successive levels of the gaussian image pyramid. These gaussian images contain the lower frequency information in our image. We need only the lowest resolution gaussian to reconstruct our image.

Each gaussian image is subtracted from the next higher resolution gaussian to achieve a difference-of-gaussian approximate laplacian image. These images contain the high-frequency image data.

From the resulting laplacian image pyramid and the lowest resolution image in the gaussian image pyramid, the images can be perfectly reconstructed individually. Simply adding the laplacians and lowest level gaussian will reconstruct the original image.

In order to create a hybrid image, we modify the reconstruction step to use lower resolution laplacian images from one image, and higher resolution laplacians from another. We add the lowest level gaussian from the image whose lower resolution laplacians we use.

Color is handled identically to grayscale images.


Results

Marilyn Monroe dog:


Rhinoceros beetle:


A crowd of apples:

I tried this at first with a different picture of fruit, but found it worked better with fruits of uniform size that are scaled to be about the size of the heads.


Dog with a person's mouth:

In general, it seems like if one interpretation of the image is less expected (weirder) than the other, then it makes more sense to use the high frequencies of the weirder version. Though in this case the color really helps in the left image, where we use the low frequencies from the human-mouth version.


I also tried making a hybrid QR code, which was pretty much a failure:



Basically, the lower frequency QR code always dominates, since the squares are filled with its information. At best, the QR code is unreadable. I was hoping that maybe the QR scanner would rely on the corners of the bits in some capacity, but that didn't really work out, so instead I did something like this:
which works as a multi-level QR code, but isn't really a hybrid image.