View License

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

» Watch video

Highlights from
Local Adaptive Thresholding

4.5 | 25 ratings Rate this file 209 Downloads (last 30 days) File Size: 144 KB File ID: #8647 Version: 1.0
image thumbnail

Local Adaptive Thresholding


Guanglei Xiong (view profile)


05 Oct 2005 (Updated )

Threshold with local statistics, such as mean or median.

| Watch this File

File Information

ADAPTIVETHRESHOLD An adaptive thresholding algorithm that seperates the foreground from the background with nonuniform illumination.
  bw=adaptivethreshold(IM,ws,C) outputs a binary image bw with the local threshold mean-C or median-C to the image IM.
ws is the local window size.

tm is 0 or 1, a switch between mean and median. tm=0 mean(default); tm=1 median.

Contributed by Guanglei Xiong ( at Tsinghua University, Beijing, China.

For more information, please see

Required Products Image Processing Toolbox
MATLAB release MATLAB 7.0.4 (R14SP2)
MATLAB Search Path
Tags for This File   Please login to tag files.
Please login to add a comment or rating.
Comments and Ratings (39)
05 Feb 2017 Ely Raz

I compared Local Adaptive Thresholding from Matlab File Exchange ( ) vs. the adaptthresh function (Matlab built in function) and I get different outputs. Are these two functions similar and can be compered? The adpt1 is my desired output and can I achieve the same using adaptthresh?


I = imread('rice.png');

val= adaptthresh(I, 0.01);
adpt2 = imbinarize(I,val);

imshowpair(adpt1, adpt2, 'montage');

Comment only
11 Dec 2016 andhavarapu lokesh

sairam to all members
if any one has the Adaptive Thresholding for Edge Detection in
Gray Scale Images code can please provid to me

Comment only
14 Sep 2016 David Fernández

So good do far

12 Aug 2016 Ruchir Srivastava

@Yasha Jain, for me, ignoring C and following @2one's suggestion (on 3rd July 2014) worked. You can try as well.

04 Aug 2016 Aurik Sarker

25 Jul 2016 Yasha Jain

How do we decide the value of C

Comment only

What is that ws(wnidow size)??

01 Jun 2016 Andraz Skoda

sanjay bhattacharya wrote:

''I have written a code without using any std functions like imfilter etc, its purely based on fundamentals.


sanjay bhattacharya, this is exactly what I need. Is there any chance to show me hot your code looks like? Offcourse anyone else can help.


Comment only
21 Mar 2016 learn121

Thank you!

03 Jul 2014 2one

2one (view profile)

For others, it appears that C (=constant) was originally the binary image segmentation threshold.

I have modified my version of the code as follows:





This now uses the adaptive (mean) filter to highlight image features (i.e. mIM-IM) and then the Otsu threshold to segment and generate a binary image.

Comment only
03 Jul 2014 2one

2one (view profile)

this works quite well for my application but can anyone explain to me what the algorithm is doing exactly?
I understand that the algorithm generates a local mean filtered image by iterating over each pixel for user window size but what is line:


this subtracts the original image and a constant, C, from the local mean filtered image. What is C and why do this?

28 Mar 2013 Kang Zheng

What is C exactly?

27 Dec 2011 Hokchhay Tann

Great code, but not applicable to my type of images. I'm trying to make the threshold automated since I have a hundred thousands of this kind. I appreciate any suggestions.

27 Sep 2011 Shashi

Shashi (view profile)

I did apply this algorithm on my images but it didn't work out completely. There is a research paper by Q.Huang which speaks about Otsu's thresholding using adaptive window. I would like to know if somebody has implemented that.

Comment only
14 Aug 2011 Rosidah Lazid

Had anyone here used this code for processing trabecular micro CT images? Appreciate your feedback on the outcome. Thanks.

Comment only
11 Aug 2011 eray

eray (view profile)

Very simple and effective, thanks!

04 Aug 2011 Nek Valous

Great script!

31 May 2011 Ana Triana

Easy to read and use. Thank you.

13 May 2011 Jorge Lewinnek

what is that window size?

Comment only
27 Apr 2011 Martin

Martin (view profile)

21 Jan 2011 Navneet Viswan

is it possible to detect laser traces on an object using this algorithm?

Comment only
01 Dec 2009 Hans Müller


How about sharing it, then?

Comment only
05 Sep 2009 sanjay bhattacharya

it can detect the letters even where its very dark (see the lines in the end) line 8 etc

Comment only
05 Sep 2009 sanjay bhattacharya

I have written a code without using any std functions like imfilter etc, its purely based on fundamentals.


Comment only
05 Sep 2009 sanjay bhattacharya

Nice code, but not applicable in extreme situations.

21 Jul 2008 hafid rafi

it's very very simple thanks

29 Apr 2008 Guillermo Moreno

Simple and Fast, thanks

10 Apr 2008 alev soke

thank you very much.
it is a perfect program.

01 Apr 2008 zhang shi jie

really nice

24 Mar 2008 ranjeeth dasineni

works great man!!

09 Oct 2007 kayalvizhi lakshmanan

19 Sep 2007 saravanan radhakrishnan

really good code

30 Jul 2007 mel tem

thank you

24 Jun 2007 amit vishnipolsky

06 Mar 2007 saravanan kumar

nice work

Comment only
31 Jan 2007 Piyorot Khongchuay


26 Apr 2006 Alan Zhang

The 2 lines near the end should be changed from:
This change allows C to be +ve and negative. In the old code bw=im2bw(sIM,C) causes error when C is -ve.

22 Mar 2006 tester Mc tester

it didnt work!!
i get
Error using ==> mat2gray
A must be double

Comment only
07 Nov 2005 J. Zhou

Pretty cool results with flexible options.
Great job!

07 Oct 2005

remove unnecessary Thumbs.db in zip file

31 Mar 2016 1.0


Contact us