===== Image coordinate system =====
The choice of an image coordinate system is a matter of convention in most cases. As introduced in the lectures, we will use the left handed image coordinate system, with the first axis (//u//) pointing right and the second axis (//v//) pointing down. Coordinates of a point are then written as an algebraic **column** vector (euclidean) (u, v)^\top. In Matlab, we will write e.g.
[u;v]
Since //1-based// indexing is used in Matlab, the **centre** of the top left pixel has coordinates ''[1;1]'' and the centre of the bottom right pixel has coordinates ''[count_u; count_v ]'', where ''count_u'' is number of image columns and ''count_v'' is number of image rows (both in pixels). See .
{{:courses:a4m33tdv:cviceni:image_coords.png}}
When drawing points or lines in Matlab, correct orientation of ordinate must be set.
plot( u, v );
set( gca, 'ydir', 'reverse' );
It is also possible to draw a bitmap image first, and then draw points or lines over the bitmap. Correct orientation is then set automatically by imaging the bitmap.
im = imread( 'image.jpg' );
image( im );
hold on
plot( u, v );
hold off
Matlab considers images as ordinary matrices, so the standard matrix indexation (row, column) is used. Let ''[u;v]'' be the integer coordinates in the grayscale image (centre of a pixel). Then the intensity of the pixel is obtained as
im(v,u)
===== Matlab Help for Typical Situations in Homeworks ======
=== Some recommendations for the fastest progress ===
- Do not trust any results unless you verified them.
- Always verify your results.
- Try to visualize your results
- Each Matlab command has help. E.g. for ''plot''help plot % text version
doc plot % html version
- Try to encapsulate general tasks into a functions and reuse them.
- Remind the rule 1.
== Debugging ==
Matlab has a powerful debugger. Either put breakpoints everywhere you want, or use the command ''keyboard'' in your code to stop processing at the place. Exit the debugging mode:
dbquit
You can also start debugging automatically in case of error by turning on
dbstop error
=== Vectors and its transformations ===
Vectors are stored as column matrices.
u = [1;2];
X = [1;2;3];
Xmore = [1 2 3; 4 5 6]'; % transpose at the end
Vectors are multiplied by a matrices on the left:
P = [1 0 0 -5; 0 1 0 -6; 0 0 1 1]; % a camera
ux_homog = P * [X;1]; % projection
=== Special matrices: Identity, Zeros, Ones ===
I = eye(3); % 3x3 identity
I2 = diag( [1 1 1] ); % same result
Z = zeros(3); % 3x3 matrix of zeroes
O = ones(3); % 3x3 matrix of ones
=== Euclidean distance of two 3D points ===
X1 = [1;2;3];
X2 = [4;5;6];
d2 = norm(X1-X2); % cannot be used for more vectors
d2 = sqrt(sum((X1-X2).^2)); % for matrices with points stored in columns
=== Dot (scalar) product ===
u1 = [4;5;1];
u2 = [7;8;1];
dot12 = u1' * u2;
=== Cross product ===
u1 = [4;5;1];
u2 = [7;8;1];
u12x = cross(u1,u2);
% verification of orthogonality by dot product
% (remember the recommendations 1 and 2)
u12x' * u1 % should be zero
u12x' * u2 % should be zero