Visual Servoing Platform
version 3.5.0 under development (2022-02-15)
|
While the ViSP library is not intended to be an image processing library or replace a raster graphics editor, some easy image processing techniques can be used to improve the contrast and the sharpness of an image.
The different methods presented are:
The first two methods consist of stretching the histogram of an image to make it use the entire range of values. It is more or less similar to the histogram equalization technique (presented in Histogram equalization). The stretching will act like a direct mapping between the old and new intensity values whereas the histogram equalization will linearize the cumulative histogram distribution to try to make each intensity values the same weighting in the image. The CLAHE algorithm will limit the contrast enhancement using a maximum slope value to avoid to amplify too much the image noise. It will also compute the cumulative histogram locally by sliding a window around the current pixel location.
The following example also available in tutorial-contrast-sharpening.cpp will show the result of each of these methods on a low contrast image.
These functions are provided in a vp:: namespace and accessible using this include:
The first step is to read the input image:
The low contrast color image used in this tutorial can be downloaded here (By Biem (Own work) [Public domain], via Wikimedia Commons):
The figure below represents the histogram and the cumulative histogram of the low contrast image. Most of the histogram bins are approximately in the [80 - 140] range, resulting in an image with low dynamic.
The histogram stretching can be done with:
The result is:
The corresponding histogram and cumulative histogram are the following:
This method stretches the histogram with a direct mapping between the old and the new intensity values. The histogram bins are more spread out and the image gains some dynamic. It will not change the intensity distribution as the histogram equalization method could do.
The histogram stretching on HSV colorspace can be done with:
The main difference is that this method will stretch the Saturation and Value components and preserve the Hue channel.
From the Gimp documentation:
it works in HSV color space, rather than RGB color space, and it preserves the Hue. Thus, it independently stretches the ranges of the Hue, Saturation and Value components of the colors. Occasionally the results are good, often they are a bit odd.
The histogram and cumulative histogram are similar to the previous method as expected.
To improve the image contrast using the histogram equalization method:
The result is:
If we look at the histogram and the cumulative histogram:
The cumulative histogram is more linear which can be related to a more equal distribution of the pixel intensities in the image.
To use the CLAHE algorithm:
The CLAHE method avoid the over amplification of the noise compared to the histogram equalization method:
The parameters are:
The histogram of the corrected image is stretched and the local processing plus the limitation of the contrast enhancement avoid the over boosting of the contrast as in the histogram equalization case.
The unsharp masking will sharpen the edges in an image:
It is applied here on the image after using the CLAHE algorithm:
Two parameters can be modified:
To summarize, the techniques presented to improve the contrast of an image can do a good job in some situations and not in another. The CLAHE algorithm and the unsharp masking can be tuned (but the default values should be good enough in most of the situation).
You can now read the Tutorial: Automatic thresholding, to learn how to automatically threshold / binarise a grayscale image.