CS 194

Final: Image Quilting

Fall 2020


A Neural Algorithm of Artistic Style

We spent a lot more time on this part of the project, which can be found here.


For image quilting, our goal was to use a small texture image to make a larger textured image without obvious seams. The textures we used are below.

Random, Overlapping, and Seam-Finding





Patch 1

Patch 2

Cost + Path

Image Quilting

To generate the image quilt, we began by randomly generating a tile for the first patch in the output image. Then we generated random similar tiles to overlap with 1/6 of the patch horizontally and vertically. We found similar tiles by using the ssd to calculate a cost image, and searching through that image for coordinates of costs beneath a minimum threshold. After generating tiles to overlap, we then used the cost image of the tile to generate the minimum cost path through the overlapped image to create an even more seamless quilt.





Additional Results

Texture Transfer

Texture transfer was fairly simple to implement and only required a slight tweaking of the code we already had. We used grayscale images with a gaussian to create a correspondence map, and used this to generate an additional cost term as stated in the paper. We added our original cost term with this additional cost using the equation alpha * c1 + (1-alpha) * c2. We found that a smaller alpha yielded better results.


Spaghetti transfer


Spaghetti transfer

Bells & Whistles

We implemented our own cut function in python.

Lightfield Camera

For the lightfield camera, we wanted to alter the depth refocus and aperture of images by using images taken from many different positions. We used data from the Stanford Light Field Archive.

Depth Refocusing: To achieve depth refocusing, we used shifts and averages based on the lightfield camera images to make it appear as if we were refocusing the depth of a single image.

Aperture Adjustment: For aperture, we manipulated the data from the lightfield camera images to make it appear as if the aperture was changing size. Again, this was accomplished by averaging images together, but this time the size of the aperture depended on the amount of images we averaged together.