A contrast stretch is a linear piece-wise mapping of image gray values. The slope of the function should be greater than 1 over the range of pixel values to be contrast stretched. If an image has a lot of detail over a small range of pixel values, using a contrast stretch will spread those pixel values out while maintaining the shapes in the image. One simple way to do this is to take the minimum value of an image and map it to zero. Take the highest value and map it to 255 (the max gray value). Since this is linear, all values in between are spread out accordingly. Here are some examples.
Original Contrast Stretch
As you can see, images with a smaller range of pixel values seem to change more.
There are two different ways to do a contrast stretch. One way is to actually modify the image. Another way is to change the lookup table. I tried both and found (as expected) that modifying the lookup table is much faster. Here are the results for top left image.
The median was .22 seconds (using matlab 5.3 tic and toc) and 458753 flops (using flop).
The median was 0.0 seconds and 1787 flops.