Brown University | Providence, RI 02912| (401) 863-1000 | Send Feedback | © Brown University
EN161 Image Understanding
Matlab lab Session
=======================================================
Matlab 6 introduction
- Matrix Laboratory
. environment for scientific computation
. workspace: commandline, editor, figures
. platform independent
- a tool for mathematical computation
. process matrices, variables, strings
- basic array operations
- multi-dementional arrays
. solve algebra, polynomial, equations
. do optimization, differentiation/intergration,
solve differential equations
- a tool for visualization/GUI (Graphic User Interface)
. 2D/3D plotting
. showing images, grids
. figures, subplots, axis labels
. contour plots, surface plots, volumn visualization
. videos, multimedia/web support
. GUI: mouse interactivity/controls, dialog boxes
- a programming language
. variables, strings
. logical operations
. flow control
- if, for loop, while loop
. function *.m files
- a programming environment
. command line interpreter
. *.m program editor
. debugger, variable watcher
. profiler
. C, FORTRAN, JAVA
=======================================================
Useful Matlab commands/functions
help
help imread (help ANY_FUNCTION)
help complex
doc (same as help, but better)
demo (good starting demonstration)
who (see current variables)
whos (with detailed info)
A=1 (variable name '3A' is not allowed.)
% comment
pi 3.1416
format long
pi 3.14159265358979
ver
path
cd..
pwd
sin, cos, tan, exp, log, log2, sqrt, floor, ceil, round, erf, gamma, dot, cross
imread (image I/O, try 'doc imread')
imwrite
imshow
BASIC OPERATIONS:
54.4 + 23*6
input A
pause
ARRAY OPERATIONS:
A = [1 2 3;4 5 6;7 8 9]
=======================================================
Matlab matrix manipulation:
Use the ':' syntax to speedup computation (avoid loops)
>> A=[1 2 3; 4 5 6]
A =
1 2 3
4 5 6
>> size(A)
ans =
2 3
>> A(2:end) % (column than row)
ans =
4 2 5 3 6
>> A(1:2,2:3) % (part of an array)
ans =
2 3
5 6
>> A(:,2)=7
A =
1 7 3
4 7 6
>> A(:,:)=8
A =
8 8 8
8 8 8
>> A(:) = 9
A =
9 9 9
9 9 9
>> A=7 % (re-assign A)
A =
7
>> B=(0:0.1:1)*pi
B =
Columns 1 through 8
0 0.3142 0.6283 0.9425 1.2566 1.5708 1.8850 2.1991
Columns 9 through 11
2.5133 2.8274 3.1416
ARRAY TRANSPOSE
C=1:5
C'
INITIALIZE AN ARRAY
>> ones(3,4)
ans =
1 1 1 1
1 1 1 1
1 1 1 1
>> zeros(2,3)
ans =
0 0 0
0 0 0
>> d=pi
d =
3.1416
>> D=repmat(d,3,4) % (Replicate matrix, 3x4)
ans =
3.1416 3.1416 3.1416 3.1416
3.1416 3.1416 3.1416 3.1416
3.1416 3.1416 3.1416 3.1416
>> E=reshape(D, 4, 3) % (Reshape to 4x3)
E =
3.1416 3.1416 3.1416
3.1416 3.1416 3.1416
3.1416 3.1416 3.1416
3.1416 3.1416 3.1416
>> E(2:3,1:3)=[1 2 3; 4 5 6] %(process sub-image)
E =
3.1416 3.1416 3.1416
1.0000 2.0000 3.0000
4.0000 5.0000 6.0000
3.1416 3.1416 3.1416
LOGICAL ARRAY
>> B=[5 -3; 2 -4]
B =
5 -3
2 -4
>> x=abs(B)>2
x =
1 1
0 1
>>
>> y=-3:3
y =
-3 -2 -1 0 1 2 3
>> k=find(abs(y)>1)
=
1 2 6 7
>> max(y)
ans =
3
>> [my, index]=max(y) % (return 2 values of a function call)
my =
3
index =
7
>>
=======================================================
Image Manipulation:
- read image from file (JPG, GIF, BMP, TIFF, PNG, PCX...)
- write image to file
- show image on screen, zoom in/out
. get pixel value
- process image as an array of pixels
. UINT8: unsigned 8-bit (0 to 255) % what happens if we subtract the image?
. DOUBLE: double-precision (0 to 1)
. convert between the 2 format: im2double, im2uint8
'whos' to check the image format
% EXAMPLE CODE OF problem1:
% THE SLOW VERSION:
image = imread ('coins.png');
info = imfinfo ('coins.png');
height = info.Height;
width = info.Width;
threshold = 80;
for i=1:height
for j=1:width
if image(i,j) > threshold
image(i,j) = 0;
else image(i,j) = 255;
end
end
end
imshow (image);
imwrite (image, 'problem1.jpg');
% THE FAST VERSION (WITHOUT LOOP):
image = imread ('coins.png');
image = im2double(image);
image = image > 80/255;
imshow (image);
% THE FAST AND NEAT VERSION:
threshold = 80
coins = imread('coins.png');
problem1 = coins < threshold;
subplot(2,1,1)
imshow(coins);
subplot(2,1,2)
imshow(problem1);
imwrite(problem1, 'lab1p1.jpg');
=======================================
problem3:
% BRUTE_FORCE APPROACH:
double for loop, im2double, img=1-img
% CONVERSION APPROACH:
coins = uint8(255-double(coins));
imshow(coins);
% BETTER:
invert_image = bitxor(coins,255);
help format
format hex
>> invert_image(1,2)
ans =
1e 1*16+14=30
>> invert_image(problem3(1,2),255)
ans =
e1
>>