Noise level estimation using SVD

12
ADDITIVE WHITE GAUSSIAN NOISE LEVEL ESTIMATION IN SVD DOMAIN FOR IMAGES Problem Definition Accurate estimation of noise 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 A ( i,j) is expressed as: A ( i,j) = A 0 ( i,j)+N ( i,j) (1) where A ( i,j) represents the original (true) image, and N ( i,j) signifies the signal-independent noise. The SVD of an m ×n image A (assume r is the rank of A) can be written as: 1

description

noise level estimation using SVD

Transcript of Noise level estimation using SVD

Page 1: Noise level estimation using SVD

ADDITIVE WHITE GAUSSIAN NOISE LEVEL ESTIMATION IN SVD DOMAIN FOR

IMAGES

Problem Definition

Accurate estimation of noise 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 A (i , j )is expressed as:

A ( i , j )=A0(i , j)+N (i , j) (1)

where A ( i , j ) represents the original (true) image, and N ( i , j )signifies the signal-independent

noise.

The SVD of an m ×n image A (assume r is the rank of A) can be written as:

A=U ×S ×V T (2)

where UT U=I mm ,V T V =I nn, (I mm and I nn 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 AAT ,

the columns of V are orthonormal eigenvectors of AT A, and S is a diagonal matrix containing the

square roots of eigen values of AAT or AT A 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, Ssand Sn are defined as the singular

values due to the original image and the additive noise decomposed by singular vectors U and V

Ss=U−1 × A0׿ (3)

Sn=U−1× N ׿ (4)

where S=Ss+Sn or s ( i )=ss ( i )+sn(i)

1

Page 2: Noise level estimation using SVD

Now let N be a zero-mean m×n AWGN image with standard deviation σ, and its SVD can be

expressed as:

N=U × Sn× V T (5)

and

σ 2=∑i=1

r

sn2(i) (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:

PM (σ )= 1M

∑i=r−M +1

r

sn(i) (7)

Where 1≤M≤r

If PM is linearly dependent on σ, two sufficient and necessary conditions must be satisfied:

{ PM (kσ )=k× PM (σ )PM (σ+σ1 )=PM (σ )+PM (σ1)

(8)

where σ 1 represents the standard deviation of an additional noise N1.

[1] Proves that when N and N1 are different realizations of the same random process, PM (σ ) is

linearly dependent of noise levelσ . It is also claimed in [1] that, on the basis of extensive

experiments, it has been found that PM 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, PM

is almost linearly dependent on the noise level σ even if the process of AWGN changes.

PM (σ )=ασ 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 PM vibrated.

With the images of cartoons and real-world scenes affected by AWGN noise, the average of the

last M singular values PM is calculated in [1] and has been found that the relationship between

PM and σ becomes:

PM= ∑i=r−M+1

r

Si=ασ+β (10)

where β is an image content related parameter

2

Page 3: Noise level estimation using SVD

PMcan be separated into 2 parts PMs and PMn for signal and noise respectively and they are

defined as:

PMs= ∑i=r−M+1

r

Ss(i) (11)

and

PMn= ∑i=r−M+1

r

Sn(i) (12)

where PMs denotes the contribution of image structures to PM, and PMn denotes the contribution

of noise to PM.

Based on experimental results, it can be seen that the range of values of M can be M∈ [ r4

,4 r5 ].

In [1], M has been chosen asM=3 r4

. 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 σ 1 to the noise-corrupted image, [1] illustrates that the total noise σ 2will still be

AWGN with standard deviation of σ 2=√σ2+σ12 .

Now we have 2 equations with 2 unknowns’ β and σ as:

PM=ασ +β (13)

P1 M=α √σ2+σ12+ β (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:

σ̂=α σ 1

2

2 ( P1 M−PM )−

P1 M−PM

2 α

(15)

3

Page 4: Noise level estimation using SVD

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 PM

4) Add AWGN of σ 1 = 50 to noised image A to yield a new image A1

5) Perform singular value decomposition to the acquired image A1

6) Calculate the average of the last M singular values P1 M

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 σ=5 σ=10 σ=15 σ=20 σ=25 σ=30 σ=35 σ=40 σ=45 σ=50

Lena 4.90 9.71 14.72 19.72 24.80 29.78 34.82 39.76 44.87 49.76

Peppers 4.79 9.79 14.79 19.78 24.76 29.77 34.76 39.70 44.78 49.69

Mandrill 4.78 9.76 14.77 19.77 24.76 29.72 34.78 39.71 44.72 49.71

fractal 7.28 11.39 16.03 20.88 25.72 30.64 35.64 40.60 45.55 50.53

Blank 4.78 9.76 14.76 19.77 24.76 29.73 34.78 39.71 44.74 49.71

Table-2: Standard deviation of σ̂ for 100 Tests

Noise σ=5 σ=10 σ=15 σ=20 σ=25 σ=30 σ=35 σ=40 σ=45 σ=50

Lena 0.12 0.13 0.16 0.18 0.22 0.24 0.30 0.35 0.40 0.53

Peppers 0.11 0.13 0.14 0.16 0.20 0.26 0.29 0.33 0.42 0.40

Mandrill 0.12 0.12 0.15 0.17 0.20 0.23 0.30 0.35 0.38 0.44

fractal 0.13 0.12 0.17 0.19 0.22 0.27 0.26 0.33 0.39 0.50

4

Page 5: Noise level estimation using SVD

Blank 0.12 0.11 0.15 0.17 0.20 0.22 0.30 0.35 0.38 0.44

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

5

Page 6: Noise level estimation using SVD

Matlab Code

% ESTIMATION THEORY MINI PROJECT% AWGN level estimation in SVD Domain for imagesclcclose allclear allX=double(imread('lena512','bmp'));%reading input image[m,n]=size(X);M=3*m/4;% Number of tail singular values to be considered for estimationalpha=13.87;%for 512x512 image %9.83 %for 256x256 image %7.02 %for 128x128 image%--------------------------------------------------------------------------sigma=5:5:50; % Value of Noise standard deviationsmean_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);

6

Page 7: Noise level estimation using SVD

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; %-------------------------------------------------------------------------- %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))

7