Before we jump into the code, let's take an overview of the algorithm. There are four key components.

The first is the pinhole camera model. We try and approximate real world positions to pixels using this matrix.

The second is the camera motion estimate. We need to use data from the gyroscope to figure out the orientation of the phone at any given moment.

The third is the rolling shutter computation. We need to specify the direction of the rolling shutter and estimate the duration of the rolling shutter.

The fourth is the image warping expression. Using all the information from the previous calculations, we need to generate a new image so that it becomes stable.

We use the standard pinhole camera model. This model is used in several algorithms and is a good approximation of an actual camera.

There are three unknowns. The *o* variables indicate the origin of the camera axis in the image plane (these can be assumed to be 0). The two 1s in the matrix indicate the aspect ratio...