DIP - Lab 05 - Intesnsity Slicing and Equalizing
DIP - Lab 05 - Intesnsity Slicing and Equalizing
DIP - Lab 05 - Intesnsity Slicing and Equalizing
Fall 2011
intensity value such that intensity values between low_in and high_in will be mapped to the value between low_out and high_out. Following are some examples: (1). (2). img2 = imadjust(img, [0.25 0.5], [0 1]); this is useful for highlighting specific intensity band of interest. img3 = imadjust(img, [ ], [ ], 2); this compress the higher intensity value towards darker intensities. c. Logarithmic Transformations: Logarithmic transformations are implemented as follows: s = T(r) = c log(1 + r), where, r is the current intensity at a pixel point (x, y) and s is the resultant intensity after the transformation function c * log(1 + r) is applied onto r. E.g., img2 = c * log(1 + im2double(img)); 4. Plotting Graph of Functions: - In MATLAB graph of a function (e.g. mathematical functions sinx etc) can be plotted using a plot function: plot (horz, vert, color, linestyle, value, marker, value); where, horz is a set of x values along horizontal axis (i.e. x-axis) and vert is set of y values, y = f(x). color specifies the color of line plotting the function with possible values r, g, b, m etc. linestyle could be (solid), : (dotted) etc. And marker can be + (plus sign), * (asterisk), x (cross) etc. a. Example: >> i = -pi: 0.1: pi; >> plot (i, sin(i), r, linestyle, -, marker, none), grid on; It would plot the graph for a trigonometric function sinx, as shown in Figure 1.
b. To adjust range of a grid cell along horizontal and vertical axis: >> set(gca, xtick, [-pi: pi]); >> set(gca, ytick, [-1: 0.2: 1]); c. To set the minimum and maximum values in horizontal and vertical axes: % -pi to pi specifies x values range while -1 to 1 is a range for y values. >> axis([-pi pi -1 1]); d. To display a label string along x-axis and y-axis: >> xlabel(x-axis, fontsize, 10); % 10 is a fontsize in points >> ylabel(y-axis, fontsize, 10); % label vertical axis with a string y-axis e. To set title over the graph of a plotted function: >> title(trigonometric function: sinx); 5. Plotting Image Histograms: Histogram is a graphical chart that represents the occurrence behaviour of a specific variable x in a sample space X. In image processing, histogram depicts the frequency of occurrence of a particular intensity value (e.g. gray-level) i in the given image. Mathematically, histogram of a digital image with gray levels [0, L 1] is a discrete function h(rk) = nk, where rk is the kth gray level and nk is the number of pixels in the image having gray level rk. In order to get good understanding towards this, let us consider a matrix M4x4 with gray-levels 24 = 16 [i.e. 0 15]:
2 7 8 4 5 6 9 10 9 2 7 12 9 2 3 1
f(rk) nk
0 0
1 1
2 3
3 1
4 1
5 1
6 1
7 2
8 1
9 3
10 1
11 0
12 1
13 0
14 0
15 0
Image Processing Toolbox (IPT) in MATLAB provides a built-in function to draw an image histogram, syntax is as follows: a. h = imhist(img); plots and returns histogram of an image img. imhist automatically calculate the frequency of each intensity level L and plots its histogram accordingly.
3 Intensity, Slicing and Equalization
forming the histogram (if b is not specified as in above case then by default b = 256). >> imhist(imread(cameraman.tif)); An image histogram can manually be computed simply by counting the no. of times (n k) a specific gray-level rk has occurred, defined as follows: for each intensity i at f(x, y) in an image increment the counter of intensity i by 1 in an array d. After the histogram has been computed it can be displayed in following different manners: bar(x, y, w, ) stem(x, y, ) plots histogram or graph of a function in form of bar graph. w is the width plots image histogram or graph of a function in form of stem graph. of bars (i.e. 0 1). Remaining arguments list is same as plot function. 6. Gray-Level Slicing: Highlighting a specific band (or range) of gray-intensities in an image is referred as gray-level slicing. The purpose of gray-level slicing is to assign more weight to certain details/information in an image for the purpose of analysis or to make them more visible in an image. 7. Histogram Equalization: Histogram equalization is the process of re-allocating intensity values of the pixels in an image such that the output image contains uniform distribution of intensities defined by a monotonically increasing function T(r). It is normalization. a. MATLAB Function for histogram equalization: ou_img = histeq(in_img, L); equalizes histogram of an input image in_img for the specified gray levels L. Example: >> img_i = imread(cameraman.tif); >> img_o = histeq(img_i, 256); >> imshow(img_i), figure, imshow(img_o)
b. How to Equalize a Histogram? Consider an image of order 4x4 with 24 = 16 (0 15) gray levels. f(rk) 0 1 2 3 4 5 6 7 nk 0 1 3 1 1 1 1 2 8 1 9 3 10 11 12 13 14 15 1 0 1 0 0 0
cum. nk 0 1 4 5 6 7 8 10 11 14 15 15 16 16 16 16
Original image:
2 7 8
5 6 9
9 2 7
9 2 3 1
4 10
7 14 14 8 4 4 5 1
11 14 10 6 15 16
4 10 12
Use the following transformation: s= round( (L-1) x cdf (r)/(MxN) ) c. Algorithm to Equalize an Image Histogram: (1). Compute histogram, as follows: h(in_image(i, j) + 1) = h(in_image(i, j) + 1) + 1; (2). Compute cumulative histogram, as follows: cum_h(1) = h(1); cum_h(k) = cum_h(k - 1) + h(k); % for all k 2 (3). Copy intensities from in_image into a new image out_image, as follows: out_image(i, j) = round((L-1) x cum_h(in_image(i, j) + 1)/(MxN)); 8. Time Required: 3 hrs. 9. Outcome: The students will be able to write their own algorithm for histogram generation and equalization. 10. Software Required: MATLAB 11. Tasks: Following are the tasks for this session: a. Exercise 1: Write a function named transform to implement intensity transformations: INPUTS: 1) Image, 2) Transformation name i.e. inverse, power, or log. OUTPUTS: Show your results for each of the transformations and give a comparison between log and power transformations with reference to your findings/observations. (dont use built-in m-function) b. Exercise 2: Write a function named myhist to MANUALLY compute image histogram as described in the LAB:
5 Intensity, Slicing and Equalization
INPUTS: image OUTPUTS: draw the computed histogram using bar and stem functions and compare your results with the histogram generated by imhist function. Give the title Bar Graph to histogram plotted with bar function and Stem Graph for histogram plotted with stem function. Set label for x-axis to gray-levels and label y-axis with frequency. Line color should red for bar graph and blue for stem graph. c. Exercise 3: Consider a function f(x) defined over an image cameraman.tif with the intensities in the range [0 1], as defined below: 1x f(x) = 1 x 0 < x 0.25 0.25 < x 0.5 x > 0.5
Draw a graph for f(x) to show its influence on image intensities. Write a MATLAB program to implement f(x) on an input image. Also, show your results after transformation.
d. Exercise 4: Write a MATLAB program for the function shown in figure 2, on an input image
cameraman.tif. Also show your results.
Figure 2: Function
a. Submission: Code created must be submitted in a hard copy format. Marking will involve showing output on machine. b. Deadline: 7th October, 2011. 8. Acknowledgement: Syed Ali Musa Kazmi and Dr. Naveed Iqbal Rao