1. A method for processing an image, the method comprising: receiving image data identifying a plurality of pixels in the image; creating a multi-resolution hierarchy from the image data; and determining output values for the plurality of pixels using a wavelet-based retinex algorithm by propagating pixel values computed at lower resolution levels of the multi-resolution hierarchy to higher resolution levels of the multi-resolution hierarchy and refining the propagated pixel values at the higher resolution levels.