Difference between adaptive thresholding and normal thresholding in opencv

Olivier_s_j picture Olivier_s_j · Nov 29, 2011 · Viewed 29k times · Source

I have this gray video stream: enter image description here

The histogram of this image:

enter image description here

The thresholded image by :

  threshold( image, image, 150, 255, CV_THRESH_BINARY );

i get :

enter image description here

Which i expect.

When i do adaptive thresholding with :

adaptiveThreshold(image, image,255,ADAPTIVE_THRESH_GAUSSIAN_C, CV_THRESH_BINARY,15,-5);

i get :

enter image description here

Which looks like edge detection and not thresholding. What i expected was black and white areas . So my question is, why does this look like edge detection and not thresholding.

thx in advance

Answer

djhaskin987 picture djhaskin987 · Nov 29, 2011

Adaptive Threshold works like this:

The function transforms a grayscale image to a binary image according to the formulas:

    THRESH_BINARY

THRESH_BINARY

    THRESH_BINARY_INV

THRESH_BINARY_INV

where T(x,y) is a threshold calculated individually for each pixel.

Threshold works differently:

The function applies fixed-level thresholding to a single-channel array.

So it sounds like adaptiveThreshold calculates a threshold pixel-by-pixel, whereas threshold calculates it for the whole image -- it measures the whole image by one ruler, whereas the other makes a new "ruler" for each pixel.