This file is a derivative work based on Plate 66 of Birds of America by John James Audubon depicting the Ivory-billed Woodpecker.
The starting point is that the original image at the University of Pittsburg may be rather toned (i.e. yellowed with age). This might indeed not be so, but comparison with reference works such as the Duke of Portland's edition or the edition at Amherst College suggests that it is so.
The file uses routines in Mathematica 9 to perform a pseudo detone, "pseudo" because toning is a very complicated process that cannot be compensated for by simple means (at the very least one would need to know how different pigments are affected). Essentially the routine works by subtracting the yellow background.
The result compares quite well with reference images and is offered as a starting point for users wishing to make their own restorations. A half-size image was used because of memory restraints on the uploader's computer. The routine below should work just as well on a full-size image (after adjusting for the sample boundaries- times 2!) if adequate computer memory is available.
The Mathematica code used for this file was:
(* Import file (the semicolon prevents it being displayed, best for large files) *)
Woodpecker = Import["66_Ivory-billed_Woodpecker (half size).jpg"];
(* Determine page sample - this is a sample strip below the leftmost Woodpecker's beak in a half-size file measuring 5584 x 8064 pixels) *)
StartRow = 4600;
EndRow = 4950;
StartColumn = 2350;
EndColumn = 2750;
(* Get page sample *)
PageSample = ImageTake[Woodpecker, {StartRow, EndRow}, {StartColumn, EndColumn}];
(* Get a list of pixel values in sample *)
SampleData = Flatten[ImageData[PageSample], 1];
(* Separate color channels *)
DataSeparate = Transpose[SampleData];
(* Get the lightest pixel, virtual by channel (or you could use MeanPixel={Mean[DataSeparate[[1]]],Mean[DataSeparate[[2]]], Mean[DataSeparate[[3]]]}) *)
LightestPixel = {Max[DataSeparate[[1]]], Max[DataSeparate[[2]]], Max[DataSeparate[[3]]]};
(* Display LightestPixel as RGB bytes (or you could use IntegerPart[MeanPixel * 255 + 0.5])*)
IntegerPart[LightestPixel * 255 + 0.5]
(* Pseudo detone image by subtracting LightestPixel (or by subtracting MeanPixel using WoodpeckerDetoned= ImageAdd[Woodpecker, 1-MeanPixel]) *)
WoodpeckerDetoned = ImageAdd[Woodpecker, 1 - LightestPixel];
(* Export file *)
Export["66_Ivory-billed_Woodpecker (half size) Detoned.jpg", WoodpeckerDetoned]; |