1. A computer-implemented method of restoring an image comprising: receiving, at a processor, a poor quality image; applying the poor quality image to each of a plurality of trained machine learning predictors which are arranged in a cascade architecture, the cascade architecture comprising a plurality of layers connected in series, each layer comprising at least one of the trained machine learning predictors, each internal layer of the cascade architecture being trained using more training data examples than the first layer of the cascade architecture; obtaining from each of the trained machine learning predictors, a restored version of the poor quality image.