1. A method of determining a motion vector, comprising: partitioning all pixels of a reference image into a plurality of non-overlapping blocks, each non-overlapping block of the plurality of non-overlapping blocks having first pixel dimensions; generating, by a computer comprising one or more processors, a reference hash list comprising a reference hash value for each non-overlapping block of the plurality of non-overlapping blocks; partitioning an input image into a plurality of overlapping blocks comprising all possible block positions of blocks of the first pixel dimensions; generating, by the computer, a plurality of input hash values, wherein the plurality of input hash values comprises an input hash value for each overlapping block of the plurality of overlapping blocks; generating, for each reference hash value, of the reference hash list, that matches only one of a spatially associated selection of input hash values of the plurality of input hash values, a pixel offset to generate a pixel offset list, wherein the pixel offset is a spatial offset between the each reference hash value and the only one of the spatially associated selection, and wherein the pixel offset list is generated by using only the reference hash list as a reference to the reference image; and encoding the input image using a most common pixel offset of the pixel offset list as a motion vector estimate.