Code covered by the BSD License  

Highlights from
Bradley local image thresholding

4.66667

4.7 | 3 ratings Rate this file 67 Downloads (last 30 days) File Size: 205 KB File ID: #40854
image thumbnail

Bradley local image thresholding

by

 

18 Mar 2013 (Updated )

A fast an well performing local image thresholding method.

| Watch this File

File Information
Description

The brief idea of the algorithm is that every image's pixel is set to black if its brightness is T percent lower than the average brightness of the surrounding pixels in the window of the specified size, otherwise it is set to white. The detail description of the algorithm is available at:

Derek Bradley, Gerhard Roth (2005). Adaptive Thresholding Using the Integral Image. Retrieved from http://www.scs.carleton.ca/~roth/iit-publications-iti/docs/gerh-50002.pdf

The advantage of this method is that the binarized images are subjectively almost as good as from Sauvola's method but the calculation is two times faster than Sauvola's method. Sauvola’s method calculates local mean and local variance, while Bradley’s method calculates just local mean. And because the variance can be calculated using following formula for variance:

  Var(X) = E(X^2) – [E(X)]^2,

the calculation of variance reuses the result from the calculation of the local mean (E(X))^2 and just calculates E(X^2). And that takes the same amount of time as calculation of the local mean. Since calculation of local mean and variance is the most time consuming operation performed by these two methods, Bradley’s method is effectively two times faster than Sauvola’s method. A brief comparison of Bradley’s and Sauvola’s method is available at a blog:

Altun Nazmi (2010). Adaptive (Local) Thresholding For AForge.NET. Retrieved from http://nazmialtun.blogspot.com/2010/10/adaptive-local-thresholding-for.html

The calculation of the local mean is performed with integral image method in constant time regardless of the kernel size.

Examples of real word applications are: bar-code scanners, license plate registration.

MATLAB release MATLAB 6.5 (R13)
Tags for This File   Please login to tag files.
Please login to add a comment or rating.
Comments and Ratings (4)
11 Dec 2014 Michael scheinfeild

excellent code help binarize image

17 Feb 2014 haem  
05 Jun 2013 Jan Motl

You can try to increase the size of the sliding window. Don't be afraid to increase the windows size to hundreds to hundreds pixels - the window should be bigger than the biggest symbol in the image.

Or you can try the post-processing step from Yanowitz and Bruckstein's binarization method: http://www.mathworks.com/matlabcentral/fileexchange/41786-remove-ghosts-from-binarized-images

Basically it looks at the edge of each foreground object. And if the average gradient along the edge is small, it concludes that it's false foreground object and deletes the object.

04 Jun 2013 Max Neudecker

This method works quite well for binarizing my samples!
Note: I found that, depending on the grayvalue variations, a lot of background pixels are wrongly segmented as foreground. However, masking with another binary image, binarized e.g. with Otsu's threshold (function graythresh), remedied this.

Updates
01 Apr 2013

Fixed typo in function description, expanded the package description.

26 Jun 2013

Added reference to the author's article.

Contact us