With reiterated thanks to Henrik for his code, I find that one must be careful with ImagePartition as the application of a function to the parts may result in an assembled image that is different than applying the function to the whole (unpartitioned) image.
Here's the unpartitioned code:
pageImage = ColorConvert[pageImage, "Grayscale"];
pageImage = ImageAdjust[pageImage, {2}];
pageImage = ColorToneMapping[pageImage];
pageImage = ImageAdjust[pageImage, {2, -.2, 1.5}];
pageImage = ColorNegate[Binarize[pageImage]];
Print[pageImage];
And here's the partitioned code (via Henrik):
pageImage = ColorConvert[pageImage, "Grayscale"];
partImgs0 = ImagePartition[pageImage, {200}];
partImgs1 = ParallelMap[ColorToneMapping@*ImageAdjust, partImgs0, {2}];
partImgs3 = ParallelMap[ImageAdjust[#, {2, -.2, 1.5}] &, partImgs1, {2}];
pageImage = ImageAssemble[partImgs3];
pageImage = ColorNegate[Binarize[pageImage]];
Print[pageImage];
See attached for original image and the partitioned and unpartitioned results.
All just FYI.
Cheers, Scott
Attachments: