I started with some images, some from online, and some I took with my iPhone. With some images that were too high in quality, I reduced the quality or pixel density by taking every other pixel, which led to resulting images being slightly pixelated, but the runtime being significantly faster. With each image, I computed the transformation of self-chosen points on that image, into the dimensions of another. Then, I computed the homography, a 3x3 matrix that explains this transformation, using least squares. Then, I warped each point on the original image to the corresponding tranformed point in the homography. Essentially, images can be warped even after they are taken, giving off the perception of capturing that image at a different angle. Furthermore, by warping multiple images into one another, they can be stitched together into a panorama.
Taking each starting image, I chose 4 points and casted them to be where I would want on a resulting image. As a result, I was able to create images with the perception of being at a different angle. However, this does contort the other parts of the image, as seen below.
By warping multiple images in the same dimensions, using the corresponding points, its possible to actually create mosaics of images, essentially overlayed panoramas.
I learned that with image warping, its actually to contort anything into any dimension. Furthermore, if warping is possible in 2 dimensions, there is nothing stopping us from warping in 3 dimensions as well. Essentially, this could be extremely useful for things like modeling, where images of a building could be used in conjunction to actually create a building.