You are on page 1of 40

LABORATORY WORK BOOK

Digital Image Processing

Department of Electronic Engineering Lahore College for Women University, Lahore

Digital Image Processing

Laboratory Work Book

CONTENTS
Sr. No. 1 2 3 4 5 6 7

Experiment Name Introduction to the Lab and reading of image Introduction to Display and Write Images Introduction to Vector Indexing Introduction to Matrix indexing Image operation using Array indexing: Introduction to Flow Control Introduction to basic image processing techniques in spatial domain such as histogram and morphological operations Introduction to image filtering in spatial and in frequency domains Introduction to image restoration Introduction of principles of the JPEG baseline coding system. Introduction to Imadjust , IPT tool for intensity transformations of gray scale images.

8 9 10

11

12 13

Introduction to Histogram Processing and Function Plotting Computing and Visualizing the 2-D DFT in Matlab

Digital Image Processing

Laboratory Work Book

Lab 1 Introduction to the Lab and reading of image


1. Introduction Lab Software In this lab implement image processing techniques that you will learn during the frontal course. Work in the lab will be carried out in Matlab 2. MATLAB working environment MATLAB desktop: is the main window which contains five subwindows: the command window, the workspace browser, the current directory window, the command history window and figure window. Command window: is where the user types MATLAB commands and expressions at the prompt (>>) and where the outputs of those command are displayed. Workspace browser: shows the variables and some information about it. Current directory: the current directory tab above the workspace tab shows the contents of the current directory window, whose path is shown in the current directory. Command history window: contains the record of the command a user has entered in command window, including both current and previous. 3. Reading Images. Images are read into the MATLAB environment using function imread whose syntax is imread (filename) Here filename is a string containing the complete name of the image file (including extension) >> f= imread (chestxray.jpg); Above command read the image and store into image array f. The simplest way to read an image from specified directory to include a full or relative path to the directory in filename. >> f= imread(D:\myimages\chestray.jpg); Read the image from a folder called myimages. 4. Size of the Image: >> size(f) Ans=1024 1024 Above function gives rows and columns dimension of an image This function is useful in programming when used in the following form to determine automatically the size of an image. >> [M, N] = size (f);

Digital Image Processing

Laboratory Work Book

The whos function display additional information about an array. >> whos f Name F size 1024 x1024 bytes 1048576 class Unit8array

Digital Image Processing

Laboratory Work Book

Lab 2 Introduction to Display and Write Images

Images are displayed on MATLAB desktop using function imshow,

imshow(f,G)

Where f is an image array and G is the number of intensity levels used to display it. If G is omitted, it defaults to 256 levels.

imshow (f, [low

high])

display as black all values less than or equal to low, and as white all values greater than or equal to high. The values in between are displayed as intermediate intensity values using default number of levels.

Imshow(f,[ ] )

Sets variable low to minimum value of array f and high to its maximum value.

Pixval

This function is used frequently to display the intensity values of the individual pixels interactively.

If another image, g, is displayed using imshow, MATLAB replaces the image in the screen with new image. To keep the first image and output a second image, we use figure as follows:

>> figure, imshow(g)

Digital Image Processing

Laboratory Work Book

Using the statement

>> imshow(f), figure, imshow(g)

Display both images.

Writing images:

Images are written to the disk using function imwrite .

imwrite (f, filename)

The string contained in filename must include a recognized file format extension. For example, the following command writes f to a TIFF file named patient10_run1:

>> imwrite(f, patient10_run1,tif)

Or alternatively

>> imwrite (f, patient10_run1.tif)

The imwrite function can have other parameter, depending on the file format selected. More general imwrite syntax applicable only to JPEG images is:

imwrite (f, filename.jpg,quality,q)

Where q is an integer between 0 and 100(the lower the number the higher the degradation due to JPEG compression)

Digital Image Processing

Laboratory Work Book

To obtain other image file details,

Iminfo filename

While filename is complete file name of the image.

>> iminfo bubbles25.jpg

Out put of the following information

Filename: bubbles25.jpg

FileModDate: 04-Jan-2003 12:31:26

FileSize: 13849

Format: jpg

FormatVersion:

Width: 714

Height: 682

BitDepth: 8

ColorType: grayscale

FormatSignature:

Digital Image Processing

Laboratory Work Book

Comment: { }

More general imwrite syntax applicable only to tif images has the form

imwrite (g,filename.tif,compression,parameter . . . Resolution,[colres rores])

Where parameter can have one of the following principal values:none indicates no compression; packbits indicates packbits compression;

Digital Image Processing

Laboratory Work Book

Lab 3. Introduction to Vector Indexing

The elements of vector in MATLAB are enclosed by square brackets and are separated by spaces or by commas. For example

>> v= [1 3 5 7 9]

V=

13579

>> v (2)

Ans=3

A row vector is converted to a column vector using the transpose operator(.)

>>w = v.

W=

Digital Image Processing

Laboratory Work Book

To access blocks of elements, we use MATLABs colon notation.

>>v (1:3)

Ans= 1 3 5

>>v (2:4)

Ans=3 5 7

>>v (3: end)

Ans=5 7 9

>>v (: )

Produce a column vector

>>v (1:end)

Produce a row vector

>>v (1:2: end)

Ans=1 5 9

The notation 1:2: end says to start at 1, count by 2 and stop when the count reaches the last element.

Digital Image Processing

Laboratory Work Book

>>v (end:-2:1)

Ans=9 5 1

Here the index count start form end and decreased by 2 and stop when it reached the first element

X=linspace(a,b,n)

Generate a row vector x of n element linearly spaced between and including a and b.

>>v ([1 4 5])

Ans=1 7 9

Digital Image Processing

Laboratory Work Book

Lab 4:Introduction to Matrix indexing

Matrix can be represented in MATLAB as a sequence of row vector enclosed by square brackets and separated by semicolons.For example

>>A= [1 2 3; 4 5 6; 7 8 9]

Display 3x3 matrix

A=

>> A (2, 3)

Ans= 6

Above statement extract element form 2nd row and 3rd column

>>c3=A (:,3)

C3=

Digital Image Processing

Laboratory Work Book

Extract the second row as follows

>>R2=A (2,: )

R2= 4 5 6

The following statement extracts the top two rows:

>> T2=A (1:2, 1:3)

T2=

To create a matrix B equal to A but with its last column set to 0s,we write

>> B=A;

>> B (: , 3)=0

B=

Digital Image Processing

Laboratory Work Book

>> A (end , end)

Ans= 9

>> A (end, end-2)

Ans=7

>>A (2: end, end:-2:1)

Ans= 6

Using vectors to index into a matrix provides a powerful approach for element selection.

>> E=A ([1 3], [2 3])

E=

>> D=logical ([1 0 0; 0 0 1; 0 0 0])

D=

Digital Image Processing

Laboratory Work Book

Then

>>A (D)

Ans=

>>v=T2 (: )

V=

Digital Image Processing

Laboratory Work Book

To find the sum of all the elements of a matrix

>>s= sum (A (:))

S= 45

>> C= [1 2 3; 4 5 6; 7 8 9];

>>B= [0 2 4; 3 5 6; 3 4 9];

>>A= =B

Ans=

>>A>= B

Ans=

Digital Image Processing

Laboratory Work Book

Lab 5:Image operation using Array indexing:

Rose image is read by using

F=imread (rose_512.tif)

Above statement gives image which is vertically flipped using

>>fp=f (end: -1:1, : );

The obtained image is cropped by using

>> fc = f(1:2:end, 1:2:end);

Similarly image is sub sampled by using

>>fs = f(1:2:end, 1:2:end);

Finally horizontal scan line through the middle of original image obtained by using

>> Plot (f (512, : )

Some inportane standard arrays:

Zeros(M,N) generates an MxN matrix of 0s

Ones(M,N) generates an MxN matrix of 1s

True (M,N) generate MxN logical matrix of 1s

Digital Image Processing

Laboratory Work Book

False(M,N) generate MxN logical matrix of 0s

Rand(M,N) generate MxN matrix whose entries are uniformly distributed random numbers in the interval[0,1]

Randn(M,N) generate MxN matrix whose entries are normally distributed random numbers with mean 0 and variance 1

Magic (M) generates MxM square matrix. This is square array in which the sum along any row, column or main diagonal, is the same.

Digital Image Processing

Laboratory Work Book

Lab 6: Introduction to Flow Control

MATLAB provides the eight flow control statement.

For loop

For loop executes a group of statements a specified number of times: the syntax is

For index = start: increment: end

Statements

End

It is possible to nest two or more for loops, as follows:

For index1 = start1:increment1: end

Statemens1

For index2 = start2:increment2: end

Statement2

End

Additional loop1 statements

End

Digital Image Processing

Laboratory Work Book

For example

Count=0;

For k =0:0.1: 1

Count= count +1;

End

While

A while loop execute a group of statements for as long as the expression controlling the loop is true.

While expression

Statements

End

While loop can be nested

While expression1

Statement1

While expression2

Statements2

Digital Image Processing

Laboratory Work Book

End

Additional loop1 statements

End

For example

A=10

B=5

While a

A=a-1;

While b

B=b-1;

End

End

Digital Image Processing

Laboratory Work Book

Lab 7 Introduction to basic image processing \chetechniques in spatial domain


such as histogram and morphological operations.

In this lab we will study two basic image-processing techniques in spatial domain: histogram algorithms and morphology. Histogram techniques allow us to analyze the distribution of gray levels in an image. In this lab we will study histogram, contrast stretching and histogram equalization. Morphology is aimed to study the form and structure of objects in the image. In the lab we will start with binary morphology and then we will continue with grayscale morphology. 1. Preliminary report Part 1 - Histogram 1. Give the definition of histogram. What can a histogram be used for? 2. Give the definition of contrast stretching. What can contrast stretching be used for? 3. Give the definition of histogram equalization. What can histogram equalization are used for? 4. Explain why after histogram equalization the histogram values dont become equal (in other words, they are not lying on a straight line). Part 2 Binary morphology [1,2] 1. What is the structuring element used in morphological operators? 2. Describe operations of erosion, dilation, opening and closing in binary morphology. Implement in Matlab functions that perform opening and closing using Matlabs functions imerode and imdilate. Part 3 Grayscale morphology [1]

Describe operations of erosion, dilation, opening and closing in grayscale morphology. What is a morphological gradient? 1. What is top-hat transformation? 2. What is bottom-hat transformation? Find a binary image and grayscale image (you may use the auxiliary programs from lab 1). These images will be used to test the histogram and morphological operations. Send these images to your university (or other) web mail that you can

Digital Image Processing

Laboratory Work Book

access from the lab. 3. Description of the experiment Part 1 Histogram Use the supplied program hist_demo.m. 1. Observe the following demonstrations: a. b. Contrast stretching. Histogram equalization.

3. Test these demonstrations with the image of your choice. Part 2 Binary morphology Use the supplied program bin_morph_demo.m. 3. Observe the following demonstrations: a. Erosion, b. Dilation, c. Opening, d. Closing. 4. Test these demonstrations with the image of your choice. Change the structure element to a cross, to a bounding box and to a structuring element of your choice. Observe different results for different structuring elements. Part 3 Grayscale morphology Use the supplied program gray_morph_demo.m. 1. Observe the following demonstrations: a. Erosion, b. Dilation, c. Opening, d. Closing, e. Morphological gradient, f. Top-hat transformation, g. Bottom-hat transformation, h. Edge enhancement. 2. Test these demonstrations with the image of your choice. 4. Final report Part 1 Histogram 1. Submit the results of demonstrations from Part 1 with the image of your choice. 2. Suppose the histogram of an image has two sharp peaks. The histogram with two sharp peaks is called bimodal. Explain how bimodal histogram can be used

Digital Image Processing

Laboratory Work Book

for binarization. Part 2 Binary morphology 1. Submit the results of demonstrations from Part 2 with the image of your choice. 2. What is the connection between the box and cross structuring elements and pixel connectivity? Part 3 Grayscale morphology 1. Submit the results of demonstrations from Part 3 with the image of your choice. 2. Explain the implementation of edge enhancement in the program gray_morph_demo.m.

Digital Image Processing

Laboratory Work Book

Lab 8 Introduction to image filtering in spatial and in frequency domains

1. Introduction In the early days of image processing the use of Discrete Fourier Transform (DFT) was very restricted because of its high computational complexity. With the introduction of the FFT algorithm, the complexity of DFT was reduced and DFT became an extremely important practical tool of image processing. In this lab we'll study the properties of DFT and two practical applications: 1. Computation of convolution by two methods direct method (in spatial domain) and indirect method (in frequency domain). 2. Computation of edge enhancement by unsharp masking. 2. Preliminary report 1. Prove the following properties of the Continuous FT: a. Linearity property, b. Scaling property, c. Rotation property, 2. Explain the purpose of Matlabs command fftshift. 3. The magnitude of spectrum usually has a large dynamic range. How do you display the magnitude of spectrum in Matlab? Select a grayscale image of your choice (not of the supplied images) to be used as a test case for the experiments and send it to your university (or other) web mail that you can access from the lab. 3. Description of the experiment Part 1 - DFT Properties Use the supplied program dft_demo.m. 1. Observe the following properties and demonstrations: Matlabs fftshift command. Linearity.

Digital Image Processing

Laboratory Work Book

Scaling.

Rotation.

Exchange between magnitude and phase.

2. Test these properties and demonstrations with the image of your choice. Part 2 Convolution Use the supplied program conv_demo.m. 1. Observe the implementation of convolution in two ways (in spatial domain and in frequency domain). 2. Test the implementation of convolution in two ways with the image of your choice. 3. Implement convolution with an averaging filter using Matlabs commands fspecial (average ) and imfilter (...). Part 3 Unsharp masking Use the supplied program unsharp_masking_demo.m. 1. Test the unsharp masking algorithm with the image of your choice. 2. Implement unsharp masking using Matlabs commands fspecial (unsharp...) and imfilter (...).

Digital Image Processing

Laboratory Work Book

Lab 9 Introduction to image restoration.


1. Introduction In practical imaging systems the acquired image often suffers from effects of blurring and noise. Image restoration algorithms are aimed to restore the original undistorted image from its blurry and noisy version. The lab experiment demonstrates the evolution of restoration algorithms from the simple Inverse Filter,

through its improved variant, the Pseudo Inverse Filter

to the Wiener Filter

where S ff (u,v) is the spectral density of the original signal and S nn (u,v) is the spectral density of the noise. Now lets assume that the noise is white, that is, it has a constant spectral density for all spatial frequencies:

where is a constant. Furthermore, lets assume that the spectral density of the original signal is in inverse proportion to the square of the spatial frequency (the squared distance from an origin in the frequency space):

that is,

Digital Image Processing

Laboratory Work Book

where k is a constant. Substituting two assumptions into the general formula of the Wiener Filter, we obtain:

In the Preliminary report you will be asked to prove one more formula regarding Wiener Filter.

2. Preliminary report Prepare the following tasks and m-files and bring to the lab: 1. Derive the following formula for Wiener filter:

where is the variance of the noise and is a constant. Derive a relation between the constants k and . 2. Explain the differences between Matlab commands randn and imnoise(I,gaussian,...). Try to understand how the imnoise(I,gaussian,...) command utilizes a randn command. 3. Implement in Matlab the image acquisition and degradation process: a) Read image from file. b) Blur the image using a filter of your choice. c) Add Gaussian noise to the blurred image. Hint: The variance argument of the imnoise(I,gaussian,...) command is measured as a fraction of the full dynamic range available for the image [0, ... 255], so for this command it is recommended to use mean 0 and variance argument 0.01 and multiples of 0.01. The real variance is equal to variance argument multiplied by 255. d) Write the resulting images to image files.

Digital Image Processing

Laboratory Work Book

4. Implement the restoration filters mentioned above in Matlab, pay attention to numerical accuracy issues. Choose a grayscale image of your liking to be used for experimenting and send it to your university (or other) web mail that you can access from the lab.
3. Description of the experiment 1. Inverse Filter. a. Test the restoration with the Inverse Filter for deblurring and denoising. b. What is the problem with the inverse filter ? How can this be solved ? 2. Pseudo Inverse Filter. The Root Mean Square (RMS) error of restoration is defined in the following way:

where f (i, j) is the original image, f (i, j) is the restored image and both images are of size M N . a. Test the restoration with the Pseudo Inverse Filter for deblurring and denoising. b. Plot the graph of the RMS error (Y axis) versus the parameter (X axis) c. Now fix the parameter to the default value. Plot the graph of the Root Mean Square (RMS) error of restoration (Y axis) versus the variance of the noise (X axis). Show the result of the best restoration. d. For what maximal value of the variance of noise you still get an acceptable restoration? 3. Wiener Filter. Assume that the variance used in the Wiener filter formula is equal to the variance of the noise

, and both of them are equal to 0.01255 a. Plot the graph of the Root Mean Square (RMS) error of restoration (Y-axis) versus the parameter (X axis). Show the result of the best restoration. b. Compare the result of the best restoration (optimal alpha in the RMS sense) with the results obtained for non-optimal alpha. Compare the visual quality of the obtained images. Do you think that RMS error is a good measure to analyze the visual quality of images? c. Now fix the parameter to the default value .Change the variance of the noise to different values, (Keep the variance of the filter equal to the variance of noise.). For what maximal value of the variance of noise you still get an acceptable restoration? d. Observe the trade-off between edge preservation and denoising.

Lab10 Introduction of principles of the JPEG baseline coding system.

Digital Image Processing

Laboratory Work Book

1. Introduction The JPEG standard provides a powerful compression tool used worldwide for different applications. This standard has been adopted as the leading lossy compression standard for natural images due to its excellent compression capabilities and its configurability. In this lab we will present the basic concepts used for JPEG coding and experiment with different coding parameters. JPEG baseline coding algorithm (simplified version) [1] The JPEG baseline coding algorithm consists of the following steps: 1. The image is divided into 88 non-overlapping blocks. 2. Each block is level-shifted by subtracting 128 from it. 3. Each (level-shifted) block is transformed with Discrete Cosine Transform (DCT). 4. Each block (of DCT coefficients) is quantized using a quantization table. The quantization table is modified by the quality factor that controls the quality of compression. 5. Each block (of quantized DCT coefficients) is reordered in accordance with a zigzag pattern. 6. In each block (of quantized DCT coefficients in zigzag order) all trailing zeros (starting immediately after the last non-zero coefficient and up to the end of the block) are discarded and a special End-Of-Block (EOB) symbol is inserted instead in order to represent them. Remark: In the real JPEG baseline coding, after removal of the trailing zeros, each block is coded with Huffman coding, but this issue is beyond our scope. Furthermore, in each block all zero-runs are coded and not only the final zero-run. Each DC coefficient (the first coefficient in the block) is encoded as a difference from the DC coefficient in a previous block a) (Programming) Implement in Matlab the Discrete Cosine Transform of a 1-D real signal of length N ( N is even) via Discrete Fourier Transform. You have to write a function X_dct = dct_new(x_sig), where the input parameter is x_sig a 1-D real signal of length N ( N is even) that has to be transformed, and the output parameter is X_dct the DCT of x_sig. The use of a 'dct' command is prohibited. You are allowed to use an 'fft' command. b) (Programming) Implement zigzag ordering of a pattern (matrix) of arbitrary size M N. You have a M N pattern and you put sequential numbers (indices) in its entries

Digital Image Processing

Laboratory Work Book

filling row by row. Now you have to extract the indices from the pattern in zigzag order. The order of zigzag must be according to the following figure starting at the upper left corner and moving down.

i. In this Figure the parameters { M= 3, N= 4} were used. You have to write a function Zig = zigzag(M, N), where the input parameters are M number of rows in a pattern, N number of columns in a pattern, and the output parameter is Zig - the row vector (of the size 1 x(MN)) that contains the indices of a pattern in zigzag order.For example, for the Figure above the function call

>> Zig = zigzag(3, 4) ;

has to yield the following vector: Zig = [1 5 2 3 6 9 10 7 4 8 11 12]. Test your program for small values of M and N. Make sure that your program works correctly for the cases { M= 4, N= 4},{ M= 8, 8= N} and{ M=16,N=16 }. Make sure that the result that you get for the case {M= 8, N= 8} coincides with the vector order in the im2jpeg.m program. Choose a grayscale image of your liking to be used for experimenting and send it to your university (or other) web mail that you can access from the lab.

3. Description of the experiment Load the image of Lena and your image. For each image perform the following tasks: 1. Compress the image using the JPEG compression algorithm (use the supplied program im2jpeg.m). Restore the image from its compressed form using the supplied program jpeg2im.m. Observe blocking effects in the restored image. You can use the

Digital Image Processing

Laboratory Work Book

Magnifying Glass (Zoom In feature) in the Figure window. 2. Plot the graph of compression ratio (Y axis) versus a quality parameter of im2jpeg.m (X axis). This graph defines the operational point of the algorithm. Remark: the quality parameter defines the quality of compression and not the quality of restoration. It is more (or equal) than 1. The quality equal to 1 corresponds to the best quality of restoration and the worst quality of compression. 3. The Root Mean Square (RMS) error of restoration is defined in the following way:

4.

where f (i, j) is the original image, f (i, j) is the restored image and both images are of size M N . Plot the graph of Root Mean Square (RMS) Error of restoration (Y axis) versus compression ratio (X axis). This graph is called Rate-Distortion curve. Repeat questions 1 and 2 for block sizes 4 4 and 1616. Use the function zigzag.m that you wrote for the preliminary report. Compare blocking effects for different block sizes. Compare the performance of the algorithm for different block sizes.

Now work with a block size 88 . Repeat questions 1 and 2 for Discrete Fourier Transform and Hadamard Transform (instead of Discrete Cosine Transform). Compare the performance of the algorithm for different transforms. Now work with a block size 88. Repeat questions 1 and 2 for Discrete Fourier Transform and Hadamard Transform (instead of Discrete Cosine Transform). Compare the performance of the algorithm for different transforms. Fourier Transform and Hadamard Transform. Compare the performance of the algorithm for different transforms (Discrete Cosine Transform, Discrete Fourier Transform and Hadamard Transform).
5.

Digital Image Processing

Laboratory Work Book

Lab11 Introduction to Imadjust , IPT tool for intensity transformations of gray scale images.

The simplest form of the transformation T is when the neighborhood in Fig.

is of size 1 X 1 (a single pixel). In this case, the value of g at (x, y) depends only on the intensity of f at that point, and T becomes an intensity gray-level transformation function. These two terms are used interchangeable when dealing with monochrome (i.e., gray-scale) images. When dealing with color images, the term intensity is used to denote color image components certain color spaces. s = T(r) where r denotes the intensity of f and s the intensity of g, both at any corresponding point (x, y) in the images. FUNCTION IMADJUST: Function imadjust is the basic IPT tool for intensity transformations of gray scale images. It has the syntax g=[imadjust(f,[low_in_ high_in],[low_out high_out], gamma)

As illustrated in Fig 1,

Digital Image Processing

Laboratory Work Book

This function maps the intensity values in image to new values in g, such that values between low_in and high_in map to values between low_out and high_out. Values below low_in and above high_in are clipped; that is, values below low_in map to low_out, and those above high_in map to high_out. The input image can be of class uint8, uint16, or double, and the output image has the same class as the input. All inputs to function imadjust, other than f, are specified as values between 0 and 1, regardless of the class of f. If f is of class uint8, imadjust multiplies unit16, values supplied by 255 to determine the actual values to use; if f is of class uint16, the values are multiplied by 65535. Using the empty matrix ([ ]) for [low_in high_in] or for [low_out high_out] results in the default values [0 1]. If high_out is less than low_out, the output intensity is reversed. Parameter gamma specifies the shape of the curve that maps the intensity values in f to create g. If gamma is less than 1, the mapping is weighted toward higher (brighter) output values, as shown in above figure. If gamma is greater than 1, the mapping is weighted toward lower (darker) output values. If it is omitted from the function argument, gamma defaults to 1 (linear mapping). Figure 1(a) is a digital mammogram image, f, showing a small lesion, and Fig. 1(b) is the negative image, obtained using the command This process, which is the digital equivalent of obtaining a photographic negative, is particularly useful for enhancing white or gray detail embedded in a large, predominantly dark region. Note, for example, how much easier it is to analyze the breast tissue in Fig. 1(b). 1be negative of an image can be obtained also with IPT function imcomplement: g=imcomplement (f) Figure 1 (c) is the result of using the command >> g2=imadjust (f,[0.5 0.75],[0 1 ]);

Digital Image Processing

Laboratory Work Book

Which expands the gray scale region between 0.5 and 0.75 to the full [0, 1] range. This type of processing is useful for highlighting an intensity band of interest. Finally, using the command >>g3 = imadjust (f,[ ] ,[ ] ,2); Produces a result similar to (but with more gray tones than) Fig. 1(c) by compressing the low end and expanding the high end of the gray scale [see Fig. 1(d)].

Digital Image Processing

Laboratory Work Book

Lab12 Introduction to Histogram Processing and Function Plotting

Intensity transformation functions based on information extracted from image intensity histograms playa basic role in image processing, in areas such as enhancement, compression, segmentation, and description. Generating and Plotting Image Histograms The histogram of a digital image with L total possible intensity levels in range [0, G] is defined as the discrete function h(rk) = nK where rk is the kth intensity level in the interval [0, G] and nK is the number pixels in the image whose intensity level is rk' The value of G is 255 for images class uint8, 65535 for images of class unit 16, and 1.0 for images of class daub Keep in mind that indices in MATLAB cannot be 0, so rL corresponds to intensity level 0, r2 corresponds to intensity level, and so on, with RL corresponding level G. Note also that G = L - 1 for images of class uint8 and uint16. The core function in the toolbox for dealing with image histograms is imhist, which has the following basic syntax: H=imhist(f,b) Where f is the input image, h is its histogram, h( rk), and b is the number of bins used in forming the histogram (if b is not included in the argument, b = 256 is used by default). A bin is simply a subdivision of the intensity scale. For example, if we are working with uint8 images and we let b = 2, then the intensity is subdivided into two ranges: 0 to 127 and 128 to 255. The resulting histogram will have two values: h (1) equal to the number of pixels in the image with values in the interval [0,127], and h (2) equal to the number of pixels with values in the interval [128,255]. We obtain the normalized histogram simply by using the expression p= imhist (f, b)/numel(f) Function numel (f) gives the number of elements in array f (i.e., the number of pixels in the image) Consider the image, f. The simplest way to plot its histogram is to use imhist with no output specified: >> imhist (f);

Digital Image Processing

Laboratory Work Book

Figure shows the result.

This is the histogram display default in the toolbox. However, there are many other ways to plot a histogram, and we take this opportunity to explain some of the plotting options in MATLAB that are representative of those used in image processing applications. Histograms often are plotted using bar graphs. For this purpose we can use the function Bar (horz,v,width) Where v is a row vector containing the points to be plotted, horz is a vector of the same dimension as v that contains the increments of the horizontal scale, and width is a number between 0 and 1. If horz is omitted, the horizontal axis is divided in units from 0 to length (v). When width is 1, the bars touch; when it is 0, the bars are simply vertical lines as in Fig.1 (a). The default value is 0.8. When plotting a bar graph, it is customary to reduce the resolution of the horizontal axis by dividing it into bands. The following statements produce a bar graph, with the horizontal axis divided into groups of 10 levels

Digital Image Processing

Laboratory Work Book

Figure 1(b) shows the result. The peak located at the high end of the intensity scale in Fig. 1(a) is missing in the bar graph as a result of the larger horizontal increments used in the plot. The fifth statement in the preceding code was used to expand the lower range of the vertical axis for visual analysis, and to set the horizontal axis to same range as in Fig.1 (a). The axis function has the syntax Axis ([horzmin horzmax vertmin vertmax]) This sets the minimum and maximum values in the horizontal and vert axes. In the last two statements, gca means "get current axis," Stem Graph: A stem graph is similar to a bar graph. The syntax is Stem(horz,v,color_linestyle_marker,fill) where v is row vector containing the points to be plotted, and harz is as described for bar. The argument, color_linestyle_marker is a triplet of values from Table . For example, stem (v, r- -s) produces a tern plot where the lines and markers are red, the lines are dashed, and the markers are squares. If f ill is used, and the marker is a circle, square, or diamond, the marker is filled with the color specified in color. The default color black, the line default is solid, and the default marker is a circle. The stem graph in Fig.1(c) was obtained using the statements h = imhist (f); h1 = h (1 : 10: 256) ; >> horz=1:10:256; >> stem(horz,h1, 'fill') >> axis ([0 255 0 15000]) >> set (gca, xtick', [0: 50: 255] ) >> set ( gca,ytick', [0:2000:15000]) Function plot which plots a set of points by linking them with straight lines. The syntax is Plot (horz, v, 'color', 'g' ,line style, 'none', 'marker', 's )

The plot graph in Fig.1(d) was obtained using the statements h = imhist (f); plot (h) >> horz=1:10:256; >> axis ([0 255 0 15000]) >> set (gca, xtick', [0: 50: 255] ) >> set ( gca,ytick', [0:2000:15000])

Digital Image Processing

Laboratory Work Book

Lab13 Computing and Visualizing the 2-D DFT in Matlab.

Introduction: The DFT and its inverse are 'obtained in practice using a fast Fourier transform (FIT) algorithm. The FFT of an M X N image array f is obtained in the toolbox with function fft2, which has the simple syntax: F=fft2(f) This function returns a Fourier transform that is also of size M X N, with the data arranged in the form with the origin of the data at the top left, and with four quarter periods meeting at the center of the frequency rectangle. It is necessary to pad the input image with zeros when the Fourier transform is used for filtering. In this case, the syntax becomes F=fft2(f,P,Q) Visual analysis of the spectrum by displaying it as an image is an important aspect of working in the frequency domain. As an illustration, consider the simple image, f, in Fig. (a). We compute its Fourier transform and display the spectrum using the following sequence of steps: >> F=fft2(f); >> S =abs(F); >>imshow(S , [ ]) Figure (b) shows the result. The four bright spots in the corners of tlit image are due to the periodicity property.

Digital Image Processing

Laboratory Work Book

The following commands perform filtering without padding: [M, N] = size(f); F = fft2(f); sig = 10; H=lpfilter( 'gaussian', M, N, sig); G = H.*F; g = real(ifft2(G)); imshow(g, [])

You might also like