View License

Download apps, toolboxes, and other File Exchange content using Add-On Explorer in MATLAB.

» Watch video

Highlights from
Noise Level Estimation from a Single Image

5.0 | 5 ratings Rate this file 61 Downloads (last 30 days) File Size: 138 KB File ID: #36921 Version: 1.8
image thumbnail

Noise Level Estimation from a Single Image


Masayuki Tanaka (view profile)


30 May 2012 (Updated )

It can precisely estimate noise level from a single image.

Editor's Notes:

This file was selected as MATLAB Central Pick of the Week

| Watch this File

File Information

 NoiseLevel estimates noise level of input single noisy image.
 [nlevel th num] = NoiseLevel(img,patchsize,decim,conf,itr)
Output parameters
 nlevel: estimated noise levels.
 th: threshold to extract weak texture patches at the last iteration.
 num: number of extracted weak texture patches at the last iteration.
 The dimension output parameters is same to channels of the input image.
Input parameters
 img: input single image
 patchsize (optional): patch size (default: 7)
 decim (optional): decimation factor. If you put large number, the calculation will be accelerated. (default: 0)
 conf (optional): confidence interval to determin the threshold for the weak texture. In this algorithm, this value is usually set the value very close to one. (default: 0.99)
 itr (optional): number of iteration. (default: 3)

 img = double(imread('img.png'));
 nlevel = NoiseLevel(img);

Web page: (

 Xinhao Liu, Masayuki Tanaka and Masatoshi Okutomi
 Noise Level Estimation Using Weak Textured Patches of a Single Noisy Image
 IEEE International Conference on Image Processing (ICIP), 2012.

Xinhao Liu, Masayuki Tanaka and Masatoshi Okutomi,
Single-image Noise Level Estimation for Blind Denoising,
IEEE Transactions on Image Processing, Vol.22, No.12, pp.5226-5237, 2013.


This file inspired Noise Level Estimation, Fast Noise Estimation In Images, and Signal Dependent Noise Level Estimation.

Required Products Image Processing Toolbox
MATLAB release MATLAB 7.14 (R2012a)
MATLAB Search Path
Tags for This File   Please login to tag files.
Please login to add a comment or rating.
Comments and Ratings (21)
03 Jun 2016 Woo-Jin Cho Kim

Dear Dr.Tanaka,

The noise level accuracy depends on the number of weak patches used. So what percentage of ALL patches would you consider to be enough for an accurate estimate?

Thank you.

14 Sep 2015 Kevin Chen

23 Jun 2015 YI LIU

YI LIU (view profile)

Hi Masayuki

I found the code work well for 8-bit image, however when I performed it on 16-bit image(noisy CT image), the result seemed not right, it was a complex number and very small,like 0 +1.3315e-008i. Can you tell me the reason? Thank you

Comment only
03 Feb 2015 Masayuki Tanaka

Masayuki Tanaka (view profile)

Hi zeenat khan,

I have added the code for generating the mask of the extracted weak-texture region.


Comment only
02 Feb 2015 zeenat khan

in your pdf you have shown images in your results but in code there are no figures. kindly let me know where should i show figure in order to see the weak texture patches. your code ony gives vallues and no figure

Comment only
02 Feb 2015 zeenat khan

i dont know where toy have changed the sigma values your pdf formulas and codes are different from each other.can you kindly add comments inside your code and also let me know which paper is related to your code.icip or nle_icip

Comment only
26 Jan 2015 Masayuki Tanaka

Masayuki Tanaka (view profile)

Hi zeenat khan,
You can find the pdfs from our project page:

Comment only
23 Jan 2015 zeenat khan

Masayuki Tanaka
hi i need your documentation as i have to present your code

Comment only
19 Jun 2014 Cindy

Cindy (view profile)

23 Mar 2014 Masayuki Tanaka

Masayuki Tanaka (view profile)

Hi Akshay Gore,

You can download the dataset from:


Comment only
17 Mar 2014 Akshay Gore

Akshay Gore (view profile)

How to test model on Berkeley Segmentation Dataset?
Akshay Gore

Comment only
15 Mar 2014 Masayuki Tanaka

Masayuki Tanaka (view profile)

Hi Ashish,

I don't use the exact block toeplitz for two-dimensional image. As I commented, I used the different matrix.
my_convmtx2 generates the matrix associated to the following code:

imgh = imfilter(img,kh,'replicate');
imgh = imgh(:,2:size(imgh,2)-1,:);


Comment only
14 Mar 2014 Ashish Meshram (Meet)

Hi Masayuki

Yeah I saw that code but I've tried to get it done by toeplitz matrix only for Directional Derivative operator to calculate threshold and results are coming satisfactorily but takes time longer as compared to yours code.

Once it seems to be final I'll be uploading it.

Thanks for your reply....

Comment only
13 Mar 2014 Masayuki Tanaka

Masayuki Tanaka (view profile)

Hi Ashish Meshram,

You can find the source code of my_convmtx2 in the file of NoiseLevel.m.
Please check it out!


Comment only
13 Mar 2014 Masayuki Tanaka

Masayuki Tanaka (view profile)

Hi Ashish Meshram,

In the matlab code, I did not use the toeplitz matrix to calculate the
derivatives. I simply use the imfilter function instead of the matrix.
The matrix associated to the derivative operation in the matlab code is
not square matrix. The reason is to handle the borders of each patch


Comment only
09 Mar 2014 Ashish Meshram (Meet)

AS mentioned in your paper at section III, equation no. 7, where by Dh and Dv are toeplitz matrix of N^2XN^2 but that not the case. For default patch size of 7 it should return 49X49 its return 35X49.

What the reason for this...


Comment only
08 Mar 2014 Ashish Meshram (Meet)

Hello Masayuki Tanaka

Could you please mention some details about the function

T = my_convmtx2(H, m, n)

And if not possible here in, please refer me to some pointer


Comment only
01 Mar 2014 Ashish Meshram (Meet)

Great job

27 Feb 2014 Masayuki Tanaka

Masayuki Tanaka (view profile)

Hi Samuele Fiorini,

Thank you for your comment.
What kind of image and how much noise did you try?


Comment only
14 Feb 2014 Samuele Fiorini

It fails in case of very low noise, I cannot figure out why. Any help?

Comment only
14 Jun 2012 jackal tao


30 May 2012 1.1

Added help.

01 Jun 2012 1.3

Added the web information.

06 Jun 2012 1.4

Debugged for zero-iteration case.

13 Jun 2012 1.5

Debugged threshold calculation and change default parameter.

03 Mar 2014 1.6

Add new reference to description.

07 May 2014 1.7

Bug fixed.

03 Feb 2015 1.8

Added the functionality of generating the mask for the weak-texture.

Contact us