Source: http://mesh.brown.edu/engn1610/szeliski/01-introduction.pdf