We have to develop an adaptive thresholding system for greyscale image binarisation. The simplest way to use image binarisation is to choose a threshold value, and classify all pixels with values above this threshold value as white and all other pixels as black. Thresholding essentially involves turning a colour or greyscale image into a 1-bit binary image. If, say, the left half of an image had a lower brightness range than the right half, we make use of Adaptive Thresholding. Global thresholding uses a fixed threshold for all pixels in the image and therefore works only if the intensity histogram of the input image contains distinct peaks corresponding to the desired subject and background. Hence, it cannot deal with images containing, for example, a strong illumination gradient.
Local adaptive thresholding, on the other hand, selects an individual threshold for each pixel based on the range of intensity values in its local neighbourhood. This allows for thresholding of an image whose global intensity histogram doesn’t contain distinctive peaks.
The assumption behind method is that smaller image regions are more likely to have approximately uniform illumination, thus being more suitable for thresholding. Firstly, we develop a method based on the local row average to binarise the current line using that threshold. We then extend this technique to a moving window of different sizes.
For the first part of the assignment, we develop a method based on the local row average to binarise the current line using that threshold. We consider each individual row at a time; calculate the average brightness value for that row based on the brightness values of all the pixels in that row. We then use this average value to binarise that row. We then proceed to the next row and so on. In this way we binarise the whole image.
For the second part of the assignment, we make a window of user defined size around the centre pixel under consideration, calculate the average value for all the pixels in this window and then binarise that centre pixel using this average value as the threshold value. We continue this procedure till we binarise the whole image.
For the pixels towards the edges of the image, we check for the number of pixels preceding the centre pixel. If this number is less than half the window size, we modify our code accordingly to take care so that we calculate the average value for that centre pixel.
Input Image File
Row x Row Average
For the window method, we can select different window sizes based on the sharpness required in the resultant image. We can select as low as 2×2 window size which gives us a much sharper image as compared to higher values.
We see the effects of trying different window sizes. The first image is for 2 x 2 window size where we see the image is much sharper and we can extract maximum information from it. All the edges are well defined and we can observe every minute details of the image. As we go on increasing the window size, we see that the resultant image file has thicker edges as compared to the smaller window size. This is mainly because as we go on increasing the window size, we calculate the average value (threshold value) over an increased number of pixels resulting in a more generalised value as compared to that with smaller window sizes. We see that for a window size of 300, the resultant binarised image is almost the same as the one with row average.
We can modify the code to have an uneven window size, say 2 x 16 or say 16 x 2.
We see that for 2 x 16 window size, we have sharper edges along the vertical direction as compared to the horizontal edges. Similarly, for 16 x 2 window size, we have sharper edges along the horizontal direction as compared to the vertical edges.
Adaptive thresholding system is designed to operate on a portion of the image while scanning the whole image file. It uses local edge information to switch between global thresholding and adaptive local thresholding determined from the statistics of a local image window. Global thresholding uses a fixed threshold