3D Computer Vision
Programming Assignment 2 – Epipolar Geometry
You will upload your codes and a short report (PDF) in a zip file to the NewE3 system. Grading will be done
at demo time (face-to-face or Skype).
A C++ Visual Studio project is provided. To build the code, install VS 2019 (Community). When open the
solution file (project2.sln), be sure NOT to upgrade the Windows SDK Version nor the Platform Toolset:
The project should be buildable and runnable on a Windows system. Your tasks are:
- [2p] For the test stereo images (pictures/stereo1_left.png , stereo1_right.png), find 8 matching pairs of
2D points. List them as g_matching_left and g_matching_right. Note: x and y are in [-1,1] range. You
can define the matching manually or
[Bonus: +1~2p to mid-term] use off-the-shelf matching methods (such as OpenGL feature matching or
others). The bonus amount depends on how well you understood and explains your matching method. - [5p] Implement the normalized eight-point method in EpipolarGeometry() to calculate the fundamental
matrix (same as essential matrix). Remember to fill your result in g_epipolar_E To verify your result, the
eight“*multiply:”stdout should output values very close to zero (around e-6 ~ e-7). The rendering
should look like:
(Here the 8 matching are the 8 vertices of the“cube”. But your matching can be anything.) - [1p] Explain what line 382-389 do? What does the“multiply”result means? Why should all the multiply
values be (close to) zero? - [3p] Download the OpenCV sfm module source code at https://github.com/opencv/ope… Go
to \modules\sfm\src\libmv_light\libmv\multiview. Explain the following functions:
FundamentalFromEssential () in fundamental.cc [1p].
MotionFromEssential() in fundamental.cc [1p].
P_From_KRt () in projection.cc [1p].
Note:“HZ”means the textbook“Multiple View Geometry in Computer Vision”by Richard Hartley and
Andrew Zisserman and a pdf is provided for your reference.