Hi Marcelo,
there are a lot of possibilities, even a simple Wiener filter gives a good result:
image = Import[
"http://community.wolfram.com/c/portal/getImageAttachment?filename=000007.jpg&userId=33625"];
scale = 5;
wiener = ImageSubtract[image, WienerFilter[image, scale, 1]];
noise = ImageSubtract[image, WienerFilter[image, scale]];
result = ImageMultiply[ImageSubtract[wiener, noise], 2]
which is almost independent on the parameter "scale".
But you can do something more clever:
nonlocal = NonlocalMeansFilter[image, 2];
It works terribly slow because it has to compare a lot of image patches but the result is good. Then you have a numer of possibilities to remove background features from the image. For example:
topHat = TopHatTransform[nonlocal, 3];
or
fillingTransform = ImageSubtract[nonlocal, ColorNegate@FillingTransform@ColorNegate[nonlocal]];
I don't know that is better so let's use both:
combination = ImageAdjust@ImageMultiply[topHat, fillingTransform];
If you need to find only colored stars then you can subtract white background:
coloredOnly = ImageAdjust@ImageSubtract[combination, ColorConvert[combination, "Grayscale"]];
If you don't want to remove white stars completely, you can enhance colors:
coloredOnly = ImageAdd[combination, ImageSubtract[combination, ColorConvert[combination, "Grayscale"]]];
One more enhancement trick is:
minFilter = ImageAdd[coloredOnly, MinFilter[coloredOnly, 1]];
Finally, we can enjoy by the automatic thresholding in MorphologicalBinarize provided by Mathematica.
ImageMultiply[ImageMultiply[minFilter, 5],
Dilation[MorphologicalBinarize[ImageMultiply[minFilter, 10]], 1]]