This function implements the reverse mixture described by Mark Ransom for an additional small but visible improvement:
reverseBlend[img_Image, alpha_Image, bgcolor_] := With[ {c = ImageData[img], a = ImageData[alpha] + 0.0001, (* this is to minimize ComplexInfinitys and considerably improve performance *) bc = bgcolor}, ImageClip@ Image[Quiet[(c - bc (1 - a))/a, {Power::infy, Infinity::indet}] /. {ComplexInfinity -> 0, Indeterminate -> 0}] ]
This is a background removal feature. The threshold parameter is used for initial binarization of the image, minSizeCorrection used to set the size limit for small junk e-mail components that should be removed after binarization.
removeWhiteBackground[img_, threshold_: 0.05, minSizeCorrection_: 1] := Module[ {dim, bigmask, mask, edgemask, alpha}, dim = ImageDimensions[img]; bigmask = DeleteSmallComponents[ ColorNegate@ MorphologicalBinarize[ColorNegate@ImageResize[img, 4 dim], threshold], Round[minSizeCorrection Times @@ dim/5]]; mask = ColorNegate@ ImageResize[ColorConvert[bigmask, "GrayScale"], dim]; edgemask = ImageResize[ ImageAdjust@DistanceTransform@Dilation[EdgeDetect[bigmask, 2], 6], dim]; alpha = ImageAdd[ ImageSubtract[ ImageMultiply[ColorNegate@ColorConvert[img, "GrayScale"], edgemask], ImageMultiply[mask, edgemask]], mask]; SetAlphaChannel[reverseBlend[img, alpha, 1], alpha] ]
Function Testing:
img = Import["http://i.stack.imgur.com/k7E1F.png"]; background = ImageCrop[ Import["http://cdn.zmescience.com/wp-content/uploads/2011/06/\ forest2.jpg"], ImageDimensions[img]]; result = removeWhiteBackground[img] ImageCompose[background, result] Rasterize[result, Background -> Red] Rasterize[result, Background -> Black]

A brief explanation of how this works:
Choose your favorite binariaztion method, which creates relatively precise sharp edges.
Apply it to the scaled image, then reduce the resulting mask size to its original size. This gives us smoothing. Most of the work is done.
For a slight improvement, blend the image against the background using the brightness of its negative value as alpha, then blend the resulting image over the original in a thin area around the edges ( edgemask ) to reduce the visibility of white pixels around the edges. The alpha channel corresponding to these operations is calculated (somewhat cryptic expression ImageMultiply/Add ).
Now we have an alpha channel estimate, so we can do the reverse mixture.
Steps 3 and 4 do not improve this, but the difference is visible.