With higher ISO comes "bigger" noise. Is there a way to measure how much noise does the photo have? Maybe some programs can calculate it?
Noise is the difference between what the sensor measures and what it should have measured. If you take a photo with the lens cap on (or with some other means of completely blocking any light from entering the lens), you'd expect to get a frame where every pixel is entirely black. In reality, you'll get an image where the pixels vary slightly from one to the next due to noise in the sensor. Try it with different ISO settings and you'll find that higher ISO settings give you more variation between pixels in a dark frame.
Given that, you could calculate the average brightness of the pixels in a dark frame and use that as a simple measure of noise. Comparing those averages for different ISO values would give you an idea of the relative level of noise at different settings. It's far from perfect, though -- noise can presumably be positive or negative, and by pegging the expected value at zero we're basically ignoring half the effect of noise.
The important idea here is that you know what the value for a given pixel should be. Using a dark frame isn't the only way to know that. Another way is to take a photo with the lens intentionally defocussed, e.g. take a photo of a distant subject with the lens focused at its closest setting, or vice versa. This should give you an image where changes from one color to the next should be very gradual -- differences between adjacent pixels should be very small, and any large differences between one pixel and its neighbors are probably attributable to noise. You'll probably want to get a little more sophisticated in your analysis here, maybe using the standard deviation instead of just a simple mean.
Even without defocusing, you can measure noise in an image by looking for areas in an image where you have smooth transitions between colors, such as in the sky. Noise generally affects the entire sensor in more or less the same way, so it's reasonable to measure the noise in just part of the image and assume that the noise level will be similar across the entire image.
There's lots more to know about measuring noise in images. If you really want to do it right, you should read about signal to noise ratio (SNR) and how to calculate noise levels in decibels (dB). Searching with terms like image noise measurement software will help you find existing tools that can help you.
Measuring noise in a non-controlled image is a bit more difficult, though. You could try estimating the noise levels from the smooth areas. To do that, you could try something along these lines:
- First convert the image to a format which can handle negative numbers (floating point or signed integer).
- Heavily smooth the image (gaussian or median filter, for instance).
- Subtract the smooth image from the original to get the difference image. In uniform areas, this should be just noise: some values fluctuating +- around zero.
- For each of those areas, calculate the standard deviation of the values to estimate noise level.
- Divide the average value of the smoothed image in the selected area by the standard deviation to estimate signal to noise ratio.
Keep in mind, these numbers will describe per-pixel noise. A higher resolution camera of the same format and the "same" sensor quality will inherently be noisier when compared like this. Per-pixel noise doesn't tell you how noisy the object appears to be in the image, just how noisy a small part of it will look when enlarged so you can see the pixels.