You are on page 1of 27

April 21, 2010

Varun K. Nagaraja
Final Year, Dept of ECE
NITK Surathkal

Basics of Image Processing using MATLAB

Computer Vision and Related Fields

Basics of Image Processing using MATLAB

Basics of Image Processing using MATLAB

Activity Recognition

Image Stitching

Basics of Image Processing using MATLAB

Medical Image Enhancement

Image Morphing

Basics of Image Processing using MATLAB

Basic operation with Matrices


% Use colon at the end to suppress
% output

% Transpose of a matrix
A_trans = A

% To enter a matrix with real elements


A = [5 3 7; 8 9 2; 1 4.2 6e-2]

A_trans =
5.0000
3.0000
7.0000

A =
5.0000
8.0000
1.0000

3.0000
9.0000
4.2000

7.0000
2.0000
0.0600

% To enter a matrix with complex


% elements
X = [5+3*j 7+8j; 9+2j 1+4j;]
X =
5.0000 + 3.0000i
9.0000 + 2.0000i

7.0000 + 8.0000i
1.0000 + 4.0000i

8.0000
9.0000
2.0000

1.0000
4.2000
0.0600

% Matrix addition
C = A + A_trans
C =
10.0000
11.0000
8.0000

11.0000
18.0000
6.2000

8.0000
6.2000
0.1200

Basics of Image Processing using MATLAB

Basic operation with Matrices


% Matrix multiplication (element wise)
C = A .* A_trans
C =
25.0000
24.0000
7.0000

24.0000
81.0000
8.4000

7.0000
8.4000
0.0036

% Matrix multiplication
C = A * A_trans
C =
83.0000
81.0000
18.0200

81.0000
149.0000
45.9200

18.0200
45.9200
18.6436

These commands or functions can be run in the


MATLAB command prompt or as Script files (.m)
Either
type edit <filename>.m in MATLAB command
prompt to open the editor or
go File - New - Blank M File

Basics of Image Processing using MATLAB

A Simple Character Recognition Code

Detect only particular characters and


numbers in an image.
Characters are in white and of a fixed
size.
Background is black in color.
The image is in binary format.
We will explore various concepts as we
implement this.

Basics of Image Processing using MATLAB

Reading images in MATLAB


% Set working directory to directory
% containing this tutorial
% Reading an image
% A = IMREAD(FILENAME,FMT) or
% A = IMREAD('FILENAME.FMT')
im=imread('.\char recog\testimage.bmp');
% It is better to suppress outputs when
% reading images. Try once without the
% colon at the end of command
% Displaying an image
imshow(im)
% To open a separate window for the
% figure and not overwrite in the
% existing window
figure
imshow(im)
figure, imshow(im)

Basics of Image Processing using MATLAB

Reading images in MATLAB


Now read the image same color.jpg and display it on a window.
Once the image is displayed in the window, select Tools Data Cursor or select the shortcut
toolbar.

on the

Click on point A as shown, on the image. It displays three values (RGB) since it is a color image. You
can try reading pixel values for the previous image. It will be either 0/1 since it is binary image.
Hold Alt and Click on point B. This creates something called as a new datatip.

Now for some fun

B
A

Basics of Image Processing using MATLAB

Reading images in MATLAB


Now read the image same color.jpg and display it on a window.
Once the image is displayed in the window, select Tools Data Cursor or select the shortcut
toolbar.

on the

Click on point A as shown, on the image. It displays three values (RGB) since it is a color image. You
can try reading pixel values for the previous image. It will be either 0/1 since it is binary image.
Hold Alt and Click on point B. This creates something called as a new datatip.

Now for some fun


What are the RGB values at the two points?

B
A

Adelson's checker shadow illusion (http://en.wikipedia.org/wiki/Same_color_illusion)

Basics of Image Processing using MATLAB

Writing functions in MATLAB


Lets write a function charrec(im)which when called with an image file, will
display the characters as shown earlier
>> im=imread('.\char recog\testimage.bmp');
>> imshow(im);
>> charrec(im);
The digits found in the image are:
0
3
5
The letters found in the image are:
L
N

Basics of Image Processing using MATLAB

Writing functions in MATLAB


Few examples of functions in MATLAB
% Function returning no output
function sample(ip1,ip2,ip3,)
.
.
.
end
% Function with outputs
function [op1,op2,]=sample(ip1,ip2,ip3,)
.
.
.
End
% save the code as sample.m. Function name
% and m-file name should be the same

Basics of Image Processing using MATLAB

The Algorithm
Dilation

adds pixels to the boundaries of objects in an image.


number of pixels added from the objects in an image
depends on the size and shape of the structuring element
function strel() can be used to generate the SEs.
>> SE = strel('diamond', 1)
SE =
Flat STREL object containing 5 neighbors.
Neighborhood:
0
1
1
1
0
1

0
1
0

Basics of Image Processing using MATLAB

>> SE = strel('square',3)
SE =
Flat STREL object containing 9 neighbors.

Neighborhood:
1
1
1
1
1
1

1
1
1

Check out help on strel for


various combinations

>> SE = strel('line', 7, 45)


SE =
Flat STREL object containing 5 neighbors.
Neighborhood:
0
0
0
0
0
0
0
1
1
0

0
0
1
0
0

0
1
0
0
0

1
0
0
0
0

Basics of Image Processing using MATLAB

Dilation does not necessarily mean dilation of the holes also. The holes get
contracted as shown above.
Also try image erosion. Use MATLABs help.

Basics of Image Processing using MATLAB

Continuing with The Algorithm

When the dilated image of the character us subtracted from the original we get
something like

Next we create such images for all the characters that we


want to recognize. (For all those individual character
images in the folder)
>>
>>
>>
>>
>>

N = imread ('.\char recog\N.bmp');


SE = strel('square',3);
N1 = imdilate(N,SE);
N2 = N1 - N;
figure,imshow(N2)

Basics of Image Processing using MATLAB

Continuing with The Algorithm


Function, bwhitmiss is employed to check if a particular character is present in
the given image.
bwhitmiss(BW1,SE1,SE2) performs the hitmiss operation defined by the

structuring elements SE1 and SE2. The hitmiss operation preserves pixels
whose neighborhoods match the shape of SE1 and don't match the shape of SE2.
If the matrix returned by bwhitmiss contains non zero elements, then the
character is found in the image.
>> if ~isempty(nonzeros(bwhitmiss(im,N,N2)))
disp('N');
end

Also note the use of functions isempty and nonzeros


You can now use charrec.m to recognize few characters in a crude way.

Basics of Image Processing using MATLAB

Image Segmentation
Global Thresholding Method

>> im=imread('automata.jpg');
>> im_gray=rgb2gray(im);
% im2bw converts grayscale image to binary
% image using a global threshold
>> bw1=im2bw(im_gray);
>> bw2=im2bw(im_gray, threshold);
%
%
%
%

if no threshold is specified, it uses a


function graythresh to calculate the
threshold. Otsus method is implemented in
graythresh function.

Basics of Image Processing using MATLAB

Image Segmentation
Global Thresholding Method
Disadvantage is when there are multiple colors for objects and backgrounds.

Result with global thresholding one of the blocks is lost

Basics of Image Processing using MATLAB

Image Segmentation
Local Thresholding Method: Niblacks Method

255 if I( x, y ) T ( x, y )

R( x, y ) 100 if I( x, y ) T ( x, y )
0

otherwise

T ( x, y) N k N

k and N are to be empirically determined

>>
>>
>>
>>

im=imread('blocks.jpg');
im_gray=rgb2gray(im);
imt=niblack(im_gray,0.5,201);
figure,imshow(imt,[])

% Here k=0.5 and N=201(preferably odd)

% think about effects of values of N on


% processing time and k on thresholding
% level

Basics of Image Processing using MATLAB

Image Segmentation
Local Thresholding Method: Niblacks Method
% Since our objects of interest are white pixels,
% we will consider those equal to 255
>> imwhite=(imt==255);
% observe how the above command works. It checks
% pixel by pixel for the condition and returns a
% matrix
>> figure, imshow(imwhite)
% Now we need to clear the noisier regions. We
% use an erosion process followed by reconstruction
>> im_eroded=imerode(imwhite,strel('square',51));
>> im_recon=imreconstruct(im_eroded,imwhite);
>> figure, imshow(im_recon)

Basics of Image Processing using MATLAB

Connected Components

%
%
%
%

You can see pixels connected to each other


form objects in the image. These are
called connected components. Read more
about 4-connectivity and 8-connectivity

% Label the connected components i.e. assign


% a particular number as pixel value to one CC
>> [bw_labelled num]=bwlabel(im_recon);
>> figure,imshow(bw_labelled,[])
% We can use regionprops() to extract some
% properties of the CCs
>> areas = regionprops(bw_labelled,'Area')
% Here areas is a struct variable
% Try experimenting with other properties and
% explore what property can be used to
% distinguish between CCs

Basics of Image Processing using MATLAB

% We will convert to struct to a normal array for easy operation


>> areas1=[];
>> for i=1:length(areas)
areas1=[areas1; areas(i,1).Area];
end
>> areas1
areas1 =
415711
26440
10350
8630
17971
8282
5243
% We are interested in objects (the squares) with area in range 8000% 9000
>> index=find(areas1>8000 & areas1<9000);
>> finalimg=zeros(size(bw_labelled));
>> for i=1:length(index)
finalimg=finalimg+(bw_labelled==index(i));
end

Basics of Image Processing using MATLAB

>> figure,imshow(finalimg,[])

This was again a very crude way, since we are depending only on value of
area which might not remain constant if camera changes position.
Most of the times the standard features available with regionprops() is
not sufficient. We will have to write our own code to extract features.
Also we used hard thresholds for areas to classify CCs. Again most of the
times, this is not followed. Classifiers using Pattern Recognition techniques
are employed.

Basics of Image Processing using MATLAB

Few Other Stuff


You can try
Edge detection
>>
>>
>>
>>

im=imread('ouch.jpg');
im_gray=rgb2gray(im);
imedge=edge(im_gray,'canny',[0.1 0.2]);
figure,imshow(imedge)

% Try different edge operators and


% threshold levels

and
Removing Noise By Median Filtering
(MATLAB Help)

There is more to learn in Image Processing. All the Best

Basics of Image Processing using MATLAB