# 代做CSE 473 Computer Vision and Image

- 首页 >> Algorithm 算法University at Buffalo

Department of Computer Science and Engineering

CSE 473/573 - Computer Vision and Image Processing

Fall 2023

Project #1

Due Date: 10/16/2023, 11:59PM

1 Rotation Matrix (4 points)

Figure 1 illustrates the transformation from coordinate xyz to XYZ: 1) rotate around z axis with α

(the current coordinate is x’y’z’); 2) rotate around x′ axis with β (the current coordinate is x”y”z”);

3) rotate around z′′ axis with γ (the current coordinate is XYZ). α, β, and γ are all given in angles

(not radians), and 0◦ < α, β, γ < 90◦

.

• Design a program to get the rotation matrix from xyz to XYZ. (2 points)

• Design a program to get the rotation matrix from XYZ to xyz. (2 points)

Figure 1: Illustration of Eular angles

We may test your code using different α, β, and γs in grading.

2 Camera Calibration (6 points)

Preliminary.1.

The projection from world coordinate to image plane can be indicated by intrinsic parameters

/(Camera) and extrinsic parameters(World). From world coordinate to camera coordinate, the

extrinsic parameters can be used as

M = Min · Mex =

fx 0 ox

0 fy oy

0 0 1

·

r11 r12 r13 Tx

r21 r22 r23 Ty

r31 r32 r33 Tz

m11 m12 m13 m14

m21 m22 m23 m24

m31 m32 m33 m34

=

fxr11 + oxr31 fxr12 + oxr32 fxr13 + oxr33 fxTx + oxTz

fyr21 + oyr31 fyr22 + oyr32 fyr23 + oyr33 fyTy + oyTz

r31 r32 r33 Tz

.

(1)

Here, M is projection matrix. Let’s define m1 = (m11, m12, m13)

T

, m2 = (m21, m22, m23)

T

, m3 =

(m31, m32, m33)

T

, m4 = (m14, m24, m34)

T

. Also define r1 = (r11, r12, r13)

T

, r2 = (r21, r22, r23)

T

, r3 =

(r31, r32, r33)

T

. Observe that (r1, r2, r3) is the rotation matrix, then

(r1, r2, r3)

r

T

1

r

T

2

r

T

3

=

1 0 0

0 1 0

0 0 1

.

Then we have r

T

i

ri = 1, r

T

i

rj = 0 (i ̸= j). In other words, ||r3|| = ||m3|| = 1.

From M we have

mT

1 m3 = r31(fxr11 + oxr31) + r32(fxr12 + oxr32) + r33(fxr13 + oxr33)

= fx(r11r31 + r12r32 + r13r33) + ox(r

2

31 + r

2

32 + r

2

33)

= fx(r

T

1

r3) + ox(r

T

3

r3)

= ox

(2)

Similarly, Next, from M we have

mT

1 m1 = (fxr11 + oxr31)

2 + (fxr12 + oxr32)

2 + (fxr13 + oxr33)

2

= f

2

x

· r1

T

r1 + 2fxox · r1

T

r3 + o

2

x

· r3

T

r3 = f

2

x + o

2

x

(3)

So fx =

p

mT

1 m1 − o

2

x

. Similarly we have oy = mT

2 m3, fy =

q

mT

2 m2 − o

2

y

. Overall, we come to

the conclusion as follows

ox = mT

1 m3 oy = mT

2 m3 (4)

fx =

q

mT

1 m1 − o

2

x

fy =

q

mT

2 m2 − o

2

y

(5)

Preliminary.2.

Let XwYwZw be the world coordinate and xy be the image coordinate, we have the transformation

matrix M ∈ R

3×4

:

s

x

y

1

=

m11 m12 m13 m14

m21 m22 m23 m24

m31 m32 m33 m34

·

Xw

Yw

Zw

1

(6)

/sx = m11Xw + m12Yw + m13Zw + m14,

sy = m21Xw + m22Yw + m23Zw + m24,

s = m31Xw + m32Yw + m33Zw + m34.

(7)

We can solve mij with the equation below:

where the first matrix is with size 2n × 12 (n is the number of available points).

We apply Equation (9) to calculate m = {mij}. Specifically, x = λm denotes the direction of

m, where ∥x∥ = 1. If we know the values of λ and x, we can get m. To obtain the value of x,

applying Equation (9). To obtain the value of λ, we have ||m3|| = || 1

λ

x3|| = 1.

Preliminary.3.

Solve the homogeneous linear equation Ax = 0, where x is the vector of N unknowns, and A is the

matrix of M × N coefficients. A quick observation is that there are infinite solutions for Ax = 0,

since we can randomly scale x with a scalar λ such that A(λx) = 0. Therefore, we assume ∥x∥ = 1.

Solving the equation can be converted to

min ∥Ax∥ (9)

The minimization problem can be solved with Singular Value Decomposition (SVD). Assume that

A can be decomposed to UΣVT

, we have

min ∥Ax∥ = ∥UΣVT x∥ = ∥ΣVT x∥. (10)

Note that ∥VT x∥ = ∥x∥ = 1, then let y = VT x, so we have

min ∥Ax∥ = ∥Σy∥

Question

Figure 2 shows an image of the checkerboard, where XY Z is the world coordinate and xy is marked

as the image coordinate. The edge length of each grid on the checkerboard is 10mm in reality.

Suppose one pixel of the image is equivalent to 1mm. You can calculate the projection matrix from

world coordinate to image coordinate based on the 32 corners (marked points) on the checkerboard

(16 corners in each side of the checkerboard). From the projection matrix you can get the intrinsic

matrix which is indicated as

fx 0 ox

0 fy oy

0 0 1

(fx and fy are not necessarily be equal).

• Design a function to get the image coordinates of the 32 corners from the image. You can

decide the order of output points for yourself. (2 point)

• Manually (or design a program) to get the world coordinate of the 32 corners. Note that the

output order should be the SAME with the last question. (1 point)

• Design a function to get the intrinsic parameters fx, fy, ox, oy from the image coordinates

and world coordinates acquired above. (2 points)

• Design a function to get the extrinsic parameters R, T from the image coordinates and world

coordinates acquired above. (1 points)

Figure 2: Image of the checkerboard

Instructions (Please read this very carefully!):

• You are only allow to use OpenCV version 4.5.4 for this project.

/• Please implement all your code in file “UB Geometry.py”. Please do NOT make any

changes to any file except “UB Geometry.py”.

• To submit your code and result, Please run “pack submission.sh ” to pack your code and

result into a zip file. You can find the command line in “README.md” Note that when

packing your submission, the script would run your code before packing. The resulting zip

file is only file you need to submit. You should upload the resulting zip file in Brightspace

(UBlearns).

• The packed submission file should be named “submission < Y our UBIT name >.zip”,

and it should contain 3 files, named “result task1.json”, “result task2.json”, and

“UB Geometry.py”. If not, there is something wrong with your code/filename, please go

back and check.

• You are ONLY allowed to use the library that are already imported in the script.

• We grade this project based on the results we get from running your code. If you do not give

correct final results, you are very likely to get NO partial points for that step, even if it may

because you did the former parts wrong.

• Late submissions are NOT accepted.

• Anyone whose raise “RuntimeError”, your grade will be 0 for that task.

• Anyone whose code is evaluated as plagiarism, your grade will be 0 for this project.