Improving visibility of text in scanned image
Just to make a functional form of nikie's answer, which can't be marked as a duplicate as it's on another SE site,
improve[img_] :=
ImageCrop@
Binarize@Image[
ImageData[img]/ImageData[Closing[img, DiskMatrix[5]]]]
improve@Import["http://i.stack.imgur.com/vWX65.jpg"]
If a grayscale image is needed, we can do as in Jason answer but replacing the binarize with an ImageAdjust.
src = ColorConvert[Import@"http://i.stack.imgur.com/vWX65.jpg", "Grayscale"];
white = Closing[src, DiskMatrix[5]];
imgWithUniformBkg = Image[ImageData[src]/ImageData[white]];
ImageAdjust@imgWithUniformBkg
But this results in an image that is too light:
A much better results is found after using a manipulate to explore the possible settings:
Manipulate[
Labeled[ImageAdjust[imgWithUniformBkg, Append[cb, g]], Append[cb, g]],
{cb, {-1, -1}, {1, 1}}, {g, 1, 10}]