Source: http://mesh.brown.edu/engn1610/szeliski/03-imageprocessing.pdf