You are on page 1of 7


level is an important problem in a wide variety of vision and image processing applications. This project involves the implementation of a method for Additive White Gaussian Noise level estimation in images. The method used is as proposed in [1], where Singular Value Decomposition (SVD) is used to estimate the Standard deviation of Gaussian noise present in an image. Specifically, the estimation method uses the tail of singular values to separate out the Signal and noise basis. Though this separation involves loss of Signal data, the authors of [1] claim that their method alleviates the influence of the signal on the data basis for the noise estimation process to a large extent.

Mathematical Model An observed noisy image ( ( ) ( ( ) ( ) ( ) is expressed as: (1) ) signifies the signal-independent

where noise.

) represents the original (true) image, and

The SVD of an m n image A (assume r is the rank of A) can be written as: (2) where , , ( and denote them-square and n-square identity

matrices); m and n represent the dimensions of A. The columns of U are orthonormal eigen vectors of , the columns of V are orthonormal eigenvectors of or , and S is a diagonal

matrix containing the square roots of eigen values of

arranged in the descending

order. Let the singular values be denoted by s(i ) (i = 0, 1, . . . , r ), and then s(1) > s(2) > > >s(r ) . To separate the contribution of image from that of noise, ( ( ) ) and are defined as the singular

values due to the original image and the additive noise decomposed by singular vectors U and V (3) (4)

where Now let

or ( )



be a zero-mean mn AWGN image with standard deviation , and its SVD can be

expressed as: (5) and () (6)

Parameter M is used to represent the number of the last singular values (i.e., the tail) under consideration. Obviously, the average of the last M singular values is a function of , and can be calculated as: ( ) () (7)

Where 1Mr If { ( is linearly dependent on , two sufficient and necessary conditions must be satisfied: ( ) ) ( ) ( ) ( ) . ( ) is (8)


represents the standard deviation of an additional noise and

[1] Proves that when

are different realizations of the same random process,

linearly dependent of noise level . It is also claimed in [1] that, on the basis of extensive experiments, it has been found that of a noise from a different process behaves almost the

same as the case of noise with same processes when M is significantly bigger than 1. That is, is almost linearly dependent on the noise level even if the process of AWGN changes. ( ) when M >> 1. (9) where denotes the slope of the linear function, which can be affected by the choice of M. If M < r/4, the randomness of AWGN will cause the value of vibrated.

With the images of cartoons and real-world scenes affected by AWGN noise, the average of the last M singular values and becomes: where is an image content related parameter can be separated into 2 parts defined as: ()

is calculated in [1] and has been found that the relationship between



for signal and noise respectively and they are


and where of noise to () denotes the contribution of image structures to . [ ]. In , and (12) denotes the contribution

Based on experimental results, it can be seen that the range of values of M can be [1], M has been chosen as

. Also, methods are proposed to calculate the values of and .

The value of can be found by the following steps: 1) Calculate PM of pure AWGN images of the same size at different noise levels 2) Calculate by the least square fitting according to data acquired in the first step. In practice, since is independent of image content and hence it can be figured out off-line. To find the value of , we add additional AWGN with known deviation to the noise-corrupted image, and let the outcome tell us the value of . Assume that the noise deviation is in the input noise-corrupted image. If we add known AWGN of to the noise-corrupted image, [1] illustrates that the total noise . will still be

AWGN with standard deviation of

Now we have 2 equations with 2 unknowns and as: (13) (14)

Solving equations (13) and (14), we will be able to figure out the value of (standard deviation of the AWGN which corrupted our original image), the required parameter to be estimated as:
( )


Implementation The noise level estimation procedure for image A is composed of 7 stages as follows: 1) Choose a proper M (the suggested M value is r 3/4), and calculate corresponding 2) Perform singular value decomposition to the noised image A 3) Calculate the average of the last M singular values 4) Add AWGN of = 50 to noised image A to yield a new image

5) Perform singular value decomposition to the acquired image


6) Calculate the average of the last M singular values 7) Figure out the estimated noise level by Formula (15) The following results have been obtained using standard test images of size 512x512 pixels (8 bit grayscale images).The blank image used, also has a size of 512x512 pixels with all intensity levels equal to 255. 100 different realizations of AWGN noise (for a particular value of ) have been considered to arrive at the mean value and standard deviation of the estimate as indicated in Tables 1&2 shown below.

Results Table-1: Mean for 100 Tests Noise Lena Peppers =5 4.90 4.79 =10 9.71 9.79 9.76 11.39 9.76 =15 14.72 14.79 14.77 16.03 14.76 =20 19.72 19.78 19.77 20.88 19.77 =25 24.80 24.76 24.76 25.72 24.76 =30 29.78 29.77 29.72 30.64 29.73 =35 34.82 34.76 34.78 35.64 34.78 =40 39.76 39.70 39.71 40.60 39.71 =45 44.87 44.78 44.72 45.55 44.74 =50 49.76 49.69 49.71 50.53 49.71

Mandrill 4.78 fractal Blank 7.28 4.78

Table-2: Standard deviation of for 100 Tests Noise Lena Peppers =5 0.12 0.11 =10 0.13 0.13 0.12 0.12 0.11 =15 0.16 0.14 0.15 0.17 0.15 =20 0.18 0.16 0.17 0.19 0.17 =25 0.22 0.20 0.20 0.22 0.20 =30 0.24 0.26 0.23 0.27 0.22 =35 0.30 0.29 0.30 0.26 0.30 =40 0.35 0.33 0.35 0.33 0.35 =45 0.40 0.42 0.38 0.39 0.38 =50 0.53 0.40 0.44 0.50 0.44

Mandrill 0.12 fractal Blank 0.13 0.12

Inferences From the results obtained above (Table-1), we can see that the Noise level estimation algorithm proposed in [1] performs very well for natural images (images with less high frequency details) but tends to over-estimate the noise level in the case of computer generated images (fractal image) especially under low noise conditions. Even then, the performance of the algorithm in estimating noise is within tolerable limits in most cases. Table-2 indicates the stability of the

algorithm, in the sense that, the variance of the estimate is less and almost independent of the image. Hence the obtained estimates are close to the mean value.

Conclusion The algorithm for AWGN level estimation using SVD in images as proposed in [1] has been implemented using the software platform as Matlab. Also, results obtained in this implementation are very close to the results indicated in [1]. This again verifies the claims of the authors of [1] regarding the performance of the algorithm under various conditions.

References [1] Wei Liu and Weisi Lin, Additive White Gaussian Noise Level Estimation in SVD Domain for Images , IEEE Transactions on image processing, Vol.22, No.3, March 2013

Matlab Code % ESTIMATION THEORY MINI PROJECT % AWGN level estimation in SVD Domain for images clc close all clear all X=double(imread('lena512','bmp'));%reading input image [m,n]=size(X); M=3*m/4;% Number of tail singular values to be considered for estimation alpha=13.87;%for 512x512 image %9.83 %for 256x256 image %7.02 %for 128x128 image %-------------------------------------------------------------------------sigma=5:5:50; % Value of Noise standard deviations mean_estmated_alpha_values=zeros(1,length(sigma)); std_estmated_alpha_values=zeros(1,length(sigma)); for noise_no=1:length(sigma) % to get estimated sigma values for a number for multiple cases sigma(noise_no) for no_times=1:100 % estimtion is done 100 times and averaged to get the final estimate no_times N=sigma(noise_no).*randn(m,n);%creating a realization of the noise random process N=round(N); image_noisy=X+N;%adding noise to image [U V W]=svd(image_noisy);%Computing singular values of the Noisy image for i=1:m noisy_image_svd(i)=V(i,i); end P_M=0; for j=m-(M+1):m % taking M values from the tail for estimating sigma P_M=P_M+noisy_image_svd(j); end P_M=P_M/M; %-------------------------------------------------------------------------% Creating the calibration image to get the value of P_1M sigma1=50; N1=sigma1.*randn(m,n); N1=round(N1); image_calib=image_noisy+N1;%adding an image of known variance to the Noisy image [U1 V1 W1]=svd(image_calib); for i=1:m image_calib_svd(i)=V1(i,i); end P_1M=0; for j=m-(M+1):m P_1M=P_1M+image_calib_svd(j); end P_1M=P_1M/M; %-------------------------------------------------------------------------6

%Getting the estimate of required Noise standard deviation alpha_estimate(no_times)=((alpha*sigma1^2)/(2*(P_1M-P_M)))-((P_1M-P_M)/(2*alpha)); end std_estmated_alpha_values(noise_no)=std(alpha_estimate); mean_estmated_alpha_values(noise_no)=mean(alpha_estimate); clear alpha_estimate; end %-------------------------------------------------------------------------% disp('The estimated value of sigma over 100 iterations is :') % estimated_alpha=sum(alpha_estimate)/100 % imshow(uint8(X)) % figure % imshow(uint8(image_noisy))