Which kind of algorithm does Neatimage use to remove noise and grain from photos? I understand that this is proprietary software, but probably someone has an idea. References to publications or to similar algorithms are welcome.
At its most basic, noise reduction normally uses pixel averaging. The problem, of course, is that simple averaging loses detail. Averaging more pixels reduces noise more, but loses more detail. Averaging fewer pixels loses less detail, but reduces the noise less.
Something like NeatImage or Noise Ninja will do its pixel averaging adaptively -- for example, it'll start with a scan for changes that occur over enough pixels that they're unlikely to be noise, and where it sees those, do the averaging over fewer pixels.
They will also take the channels of the picture into account. A normal digital camera has a filter in front of each sensel. The normal arrangement is something like g-r-g-b (aka, a Bayer pattern). In a typical case, the green filter transmits more light than the red or (especially) the blue. To maintain the color balance in the final picture, the brightness of the blues in the picture has to be "boosted" to compensate. This, however, tends to increase the noise in the blue channel. To compensate for that, the noise reducer will normally do rather minimal averaging in the green channel, somewhat more in the red channel, and more still in the blue channel.
An advanced noise reducer will normally start with a model of the noise for an individual sensor, and apply the noise reduction based on that model. IIRC, NeatImage also allows you to take "dark frames" (e.g. a 30 second exposure with the lens cap on) to get a better map of the exact noise characteristics of your exact sensor, and take that into account (I know Noise Ninja allows that, and if memory serves NeatImage does as well). Normally, for this to work its best, you want to start with something like five dark frames. You statistically analyze those to find 1) which pixels are consistently bright or dark ("stuck pixels") and 2) any consistent patterns you can find in the noise so you can eliminate those directly (e.g., the part of the sensor near the processing may get warmer, and therefore noisier, than other parts), and 3) the type and degree of variation to expect from noise even where there isn't really a pattern (e.g. some sensors show luminance noise, others mostly chrominance noise).
I think all the three major (Noiseware, Neat Image, Noise Ninja) apply some kind of Wavelets Denoising.
You could easily find some articles on that (And come back to point us for the best you found)...
This paper looks promising:
http://research.microsoft.com/~larryz/04359321.pdf
It discusses NeatImage's algorithm briefly and would be a good place to start.