The problem with the near-white colours is an artifact of the HSL colourspace. While reading up on HSL I found a comment
here which says that changing the brightness/lightness of near-white colours in the HSL colourspace causes problems.
To see why, you can use one of the online HSL <-> RGB converters (for example,
this one).
Pure white is RGB(255,255,255). This is HSL(0,0,100). Reducing the brightness by 50% (for example) gives HSL(0,0,50). Converting back to RGB we get RGB(128,128,128) which is essentially what you'd expect after cutting the brightness in half.
But now lets use RGB(254,255,255) which is very close to white. It is HSL(180,100,100) which, when the lightness is reduced, becomes HSL(180,100,50).
Converting that back gives RGB(0,255,255) which is not even close to RGB(128,128,128) as we would expect it to be. This is why the near-whites of the limousine and the image's border are so badly affected by the modulate.
To show the difference in using HSL and HSB colourspaces I wrote a program which uses the original image from this thread and reduces the brightness/lightness by 50% in both the HSL and HSB colourspaces and writes the results to two separate files. (The program will be added to my MagickWand examples)
This is the
HSL result and this is the
HSB result.
Obviously, the HSB result is what we would expect, and prefer, when reducing the brightness of an image but I don't know how you would do this from the command line.
Pete