420 likes | 664 Views
สจพ. 2.3 Histogram-based Operations. What's a histogram? The Histogram shows the total tonal distribution in the image – global quality. It's a bar-chart of the count of pixels of every tone of gray that occurs in the image.
E N D
สจพ 2.3 Histogram-based Operations • What's a histogram? • The Histogram shows the total tonal distribution in the image – global quality. • It's a bar-chart of the count of pixels of every tone of gray that occurs in the image. • It helps us analyze, and more importantly, correct the contrast of the image. DI&SP MTCT
#pixel 7 6 5 4 3 2 1 0 0 1 2 3 4 5 intensity
Histogram • Histogram • A simple bar graph that stands for pixel intensities. • The pixel intensities are plotted along the x-axis and the number of occurrences for each intensity are plotted along the y-axis. • Provide information about contrast and overall intensity distribution of an image
สจพ Dark image Normal image Bright image DI&SP MTCT
สจพ High Contrast image Low Contrast image DI&SP MTCT
Original Image Original Image - 40 Original Image + 40
Original Image Original Image * 1.2 Original Image / 1.2
Histogram • Histogram in Color Image RGB
สจพ hi = histogram of gray level i DI&SP MTCT
The histogram barchart shows at a glance the relative image tone distribution over the entire range. • In this image, we have a very high count of pixels that are near, but not at, the white end.
We also have many that are near, but not at, the black end. • Our image does not totally fill the possible range from darkest to lightest tones. • Our image could have more contrast.
2.3.1 Histogram Equalization • Histogram Equalization • (Goal) to obtain a uniform histogram for the output image • Mapping of gray level r into gray level s s.t. the distribution of gray level s is uniform. • Spreading: the peaks and valleys will be shifted (due to approximation in digitized space)
2.3.1 Histogram Equalization • Histogram Equalization Steps • Compute histogram. • Calculate normalized sum of histogram • Transform input image to output image
Ex. HE • Image of 16-level intensity values Its corresponding histogram
Result intensity values Its corresponding histogram
Histogram Equalization Fig. 2.8 (a) Original image; (b) histogram of original image; (c) histogram equalized image; (d) histogram of equalized image.
Histogram Equalization • The effects of H.E. • H.E. stretches contrast (expand the range of gray levels) for gray levels near histogram maxima • Compresses contrast in areas with gray levels near histogram minima. • Contrast is expanded for the most of the image pixels => H.E. usually improves the detectability of many image features.
Histogram Equalization • The effects of H.E. • The resulting histogram is not flat • nothing in the discrete approximation of the continuous result previously derived says that it should be flat. • Similar effect of enhancement could be achieved by manual contrast stretching approach • But, the advantage of H.E is fully automatic.
Histogram Equalization // histogram for( idx = 0; idx < IpixelValue.length; idx++ ) { r = ( IpixelValue[idx] & 0x00FF0000 ) >> 16; g = ( IpixelValue[idx] & 0x0000FF00 ) >> 8; b = ( IpixelValue[idx] & 0x000000FF ); red_pixel_value[r]++; green_pixel_value[g]++; blue_pixel_value[b]++;}
Histogram Equalization • Calculate normalized sum of histogram// rednormalized sum.double scale_factor = 255.0 / IpixelValue.length;for( idx=0; idx < 256; idx++) { sum += red_pixel_value[idx]; red_Nsum[idx] = (int)((sum * scale_factor) + 0.5);} • 1 * (7/16) = 0.43 • 3 * (7/16) = 1.31 • . . .
Histogram Equalization • Transform input image to output image// LUT inputfor( idx = 0; idx < imageBuffer.getWidth() * imageBuffer.getHeight(); idx++) OpixelValue[idx] = 0xFF000000 | (red_Nsum[r[idx]] << 16) | (green_Nsum[g[idx]] << 8) | (blue_Nsum[b[idx]]);
Original Image Histogram Equalize Image Equalization (256 Level)
Histogram Equalization Equalized Image Original Image
Original Image Equalized Image Histogram Equalization
Saturation adjustment function Saturation image Saturation histogram Input / Output Histogram Equalization
Image Histogram equalized intensity Histogram Equalization
Original image Each R, G, B image is histogram equalized Histogram equalized intensity Histogram Equalization
/******************************************************** • * Func: histogram_equalize • * Desc: histogram equalize an input image and write it out Params: buffer - pointer to image in memory * number_of_pixels - total number of pixels in image ********************************************************/ • void histogram_equalize(image_ptr buffer, unsigned long number_of_pixels) • { • unsigned long histogram[256]; /* image histogram */ • unsigned long sum_hist[256]; /* sum of histogram elements */
float scale_factor; /* normalized scale factor */ • unsigned long i; /* index variable */ • unsigned long sum; /* variable used to increment sum of hist */ • /* clear histogram to 0 */ • for(i=0; i<256; i++) • histogram[i]=0; • /* calculate histogram */ • for(i=0; i<number_of_pixels; i++) • histogram[buffer[i]]++;
/* calculate normalized sum of hist */ • sum = 0; • scale_factor = 255.0 / number_of_pixels; • for(i=0; i<256; i++) • { • sum += histogram[i]; • sum_hist[i] = (sum * scale_factor) + 0.5; • } • /* transform image using new sum_hist as a LUT */ • for(i=0; i<number_of_pixels; i++) • buffer[i] = sum_hist[buffer[i]]; • }