Histogram Mean Color Balance
Your example photographs
imgList = Import /@ {"http://i.imgur.com/qzFttRD.jpg",
"http://i.imgur.com/fh9tAK1.jpg", "http://i.imgur.com/b2kWM3y.jpg",
"http://i.imgur.com/amNRIhh.jpg"};
ImageAssemble[imgList~Partition~2]

The following code balances the colors of an image by transforming the histogram of each color channel to the same common mean.
meanColorBalance[img_] := Module[{rgb, mean, dist, tDist},
rgb = ColorSeparate[img, "RGB"];
dist = HistogramDistribution[Flatten@ImageData[#]] & /@ rgb;
mean = Mean[Mean /@ dist];
tDist = TransformedDistribution[x - (Mean@# - mean), x \[Distributed] #] & /@ dist;
Inner[HistogramTransform, rgb, tDist, ColorCombine[{##}, "RGB"] &]]
mcbList = meanColorBalance /@ imgList;
ImageAssemble[mcbList ~Partition~ 2]

Applied to the "Unprocessed Color" Mars image
meanColorBalance@Import["https://i.stack.imgur.com/bUvXg.png"]

White Area Mean Balanced Colors
The last processed photograph can be used to determine the positions of the pixels that belong to white areas of the image.
whitePixels = PixelValuePositions[mcbList[[-1]], White, 0.2][[3000 ;;]];
The first 3000 pixel positions aren't used, as these are in the background and therefore their exact position might easily change from picture to picture.
HighlightImage[mcbList[[-1]], whitePixels, Method -> {"Compose", 0.8}]

With the following code the histogram of each color channel is shifted to get a color neutral gray for the whitePixels
.
whiteAreaBalanced[img_, whitePixelsPosition_] := Module[{rgb, meanShift},
rgb = ColorSeparate[img, "RGB"];
meanShift = Mean[(# - Mean /@ #) &@PixelValue[img, whitePixelsPosition]];
Inner[Image[ImageData[#1] - #2] &, rgb, meanShift, ColorCombine[{##}, "RGB"] &]]
Finally, a comparison of the original photographs (left column) with the meanColorBalance
d (middle column) and the whiteAreaBalanced
photographs.
ImageAssemble[{#, meanColorBalance[#], whiteAreaBalanced[#, whitePixels]} & /@ imgList]

First approach using HistogramTransform
with manual tweaking
Let's number the images i1
to i3
{i1, i2, i3} = {Import["https://i.stack.imgur.com/bUvXg.png"],
Import["https://i.stack.imgur.com/mhKLQ.png"],
Import["https://i.stack.imgur.com/BYku2.png"]}

Using HistogramTransform
seems to be the easiest way to get close to a white balanced color image
HistogramTransform[i1, NormalDistribution[0.461, 0.207], 2]

HistogramTransform[i2, NormalDistribution[0.461, 0.207], 2]

This approach can be fine tuned
{r, g, b} = ColorSeparate[i1, "RGB"];
Manipulate[
i4= ColorCombine[{HistogramTransform[r, NormalDistribution[rm, s], 2],
HistogramTransform[g, NormalDistribution[gm, s], 2],
HistogramTransform[b, NormalDistribution[bm, s], 2]}, "RGB"],
{{rm, 0.4165}, 0.35, 0.55}, {{gm, 0.374}, 0.35, 0.55},
{{bm, 0.387}, 0.35, 0.55}, {{s, 0.213}, 0.05, 0.75}]

An additional ImageAdjust
ImageAdjust[i4, {-0.098, -0.027, 1.0975}]

gets pretty close to the "White Balanced" image.
If the upper right corner of the image is chosen to be white, the image can be further processed with
Mean@Flatten[
Map[{rc, gc, bc}*# &, ImageData@ImageCrop[i4, {32, 22}, {Left, Bottom}], {2}], 1]
Solve[% == {1, 1, 1}, {rc, gc, bc}] // Flatten
newI = Image@Map[({rc, gc, bc} /. %)*# &, ImageData[i4], {2}]

But this result is further away from the "White Balanced" reference image.
"JellyBeans"
look like gray balanced jBeans? $\endgroup$