19

I've found a few ways of reducing noise from image, but my task is to measure it.

So I am interested in algorithm that will give me some number, noise rating. That with that number I will be able to say that one image has less noise than others.

Serge Bekenkamp
  • 416
  • 4
  • 13
Vitalii Boiarskyi
  • 1,363
  • 2
  • 10
  • 25
  • what kind of noise? what the noise's source? is it from a camera's ccd? or is it created like Gaussian noise and added to the image by a program? – Dan D. Jan 22 '12 at 11:08
  • 1
    Seems to be a duplicate of: http://stackoverflow.com/questions/2440504/noise-estimation-noise-measurement-in-image – bummzack Jan 22 '12 at 12:15

2 Answers2

11

From a view of image processing, you can consult the classic paper "Image quality assessment: From error visibility to structural similarity" published in IEEE Transaction on Image Processing, which has already been cited 3000+ times according to Google Scholar. The basic idea is human's visual perception system is highly sensitive to structural similarity. However, noise (or distortion) often breaks such similarity. Therefore the authors tried to propose an objective measurement for image quality based on this motivation. You can find an implementation in MATLAB here.

grapeot
  • 1,594
  • 10
  • 21
  • Note that SSIM is full-reference—that is that you need both the clean, unaltered image, and the impaired image in order to evaluate SSIM. If you need to measure noise in images for which you don't have a reference, search I recommend searching on google scholar for "no-reference" or "single-ended" approaches. – whlteXbread Jun 14 '23 at 21:46
3

To solve my problem I used next approach:

My noise rating is just number of pixels that were recognized as noise. To differentiate normal pixels from noise, I just calculated the medium value of its neighbor pixels and if its value was bigger than some critical value, we say that this one is noise.

if (ABS(1 - (currentPixel.R+currentPixel.G+currentPixel.B)/(neigborsMediumValues.R + neigboursMediumValues.G + neigboursMediumValues.B))) > criticalValue)
then
{
    currentPixelIsNoise = TRUE;
}    
Sam Weisenthal
  • 2,791
  • 9
  • 28
  • 66
Vitalii Boiarskyi
  • 1,363
  • 2
  • 10
  • 25
  • 7
    Instead of classifying a pixel as noise if it exceeds such a threshold, you could measure the "error" and compute the variance or standard deviation for all of the pixels in the image. This would help you distinguish between having n pixels just above the threshold and n pixels way out whack. It also avoids the need to select a threshold. – Adrian McCarthy May 23 '14 at 15:48
  • @AdrianMcCarthy is this the same as Image distortion or Mean square error (MSE)? – GTodorov Apr 24 '15 at 22:53