├── .gitignore
├── Chapter 1 - Overview.md
├── Chapter 10 - RANSAC & Bundle Adjustment.ipynb
├── Chapter 11 - Visual Odometry Visual SLAM.ipynb
├── Chapter 12 - Feature Tracking.ipynb
├── Chapter 13 - Dense 3D Reconstruction.ipynb
├── Chapter 14 - Place Recognition.ipynb
├── Chapter 16 - Visual inertial fusion.ipynb
├── Chapter 17 - Event based vision.ipynb
├── Chapter 2 - Optics.ipynb
├── Chapter 3 - Camera Projection.ipynb
├── Chapter 4 - Camera Calibration.ipynb
├── Chapter 4 - Camera Calibration.md
├── Chapter 5 - Image Filtering.ipynb
├── Chapter 6 - Point Feature Detection.ipynb
├── Chapter 7 - Point Feature Description & Matching (FAST, SIFT, SURF).ipynb
├── Chapter 8 - Stereovision Trinagulation Feature Correspondance Disparity Map.ipynb
├── Chapter 9 - Structure from Motion.ipynb
├── Exam_Questions.ipynb
├── LICENSE
├── Lexicon.md
├── README.md
├── img
├── chapter_1
│ ├── feature_detection.png
│ ├── feature_matching.png
│ ├── input.png
│ ├── motion_estimation.png
│ └── sfm_vslam_vo.png
├── chapter_10
│ ├── 10_hubner_and_tukey.png
│ ├── 1_matching_example.png
│ ├── 2_outliers_on_motion_estimation.png
│ ├── 3_random_sampling.png
│ ├── 4_repeating_process.png
│ ├── 5_outlier_ratio_vs_iterations.png
│ ├── 6_planar_motion.png
│ ├── 7_planar_motion_epipolar.png
│ ├── 7_planar_motion_epipolar2.png
│ ├── 8_circular_motion.png
│ ├── 8_circular_motion2.png
│ └── 9_multi_view_ba.png
├── chapter_11
│ ├── 10_adjacent_frames.png
│ ├── 11_non_adjacent_frames.png
│ ├── 12_bundle_adjustment.png
│ ├── 13_loop_closing.png
│ ├── 14_feature_base.png
│ ├── 15_direct.png
│ ├── 16_sparse_to_dense.png
│ ├── 17_distance_between_frames.png
│ ├── 18_algo_comparison.png
│ ├── 19_metrics.png
│ ├── 1_hierarchical_sfm.png
│ ├── 20_ATE.png
│ ├── 2_vo_flow.png
│ ├── 3_2d_to_2d.png
│ ├── 4_3d_to_2d.png
│ ├── 5_3d_to_3d.png
│ ├── 6_bootstrapping.png
│ ├── 7_skipping_keyframes.png
│ ├── 8_localisation.png
│ └── 9_mapping.png
├── chapter_12
│ ├── aperture_problem.png
│ ├── delta_p_hessian_matrix.png
│ ├── derivation_of_lukas_kanade.png
│ ├── gradiant_partial_derivatives.png
│ ├── img_1.jpg
│ ├── influence_of_determinant_on_feature_quality.png
│ ├── jacobian.png
│ ├── jacobians_of_transformations.png
│ ├── lucas-kanade-workflow.png
│ ├── matrix_equation_for_min_ssd.png
│ ├── motion_vector_ssd.png
│ ├── optical_flow.png
│ ├── partial_derivatives_for_min_ssd.png
│ ├── point_tracking_example.png
│ ├── sift_image_feature_tracking.png
│ ├── template_tracking.png
│ ├── template_warping.png
│ └── transformations_table.png
├── chapter_13
│ ├── 3D_reconstruction_example.png
│ ├── aggregated_photometric_error.png
│ ├── baseline_depth_estimation.png
│ ├── calculate_entries_of_disparity_space_image.png
│ ├── depth_calculation_function.png
│ ├── depth_estimation_for_different_features.png
│ ├── increasing_lambda.png
│ ├── influence_of_patch_size_on_depth_map.png
│ ├── regularization_relative_to_gradient.png
│ └── regularization_term.png
├── chapter_14
│ ├── 1_image_query.png
│ ├── 2_descriptor_space.png
│ ├── 3_clustering.png
│ ├── 4_summary.png
│ ├── 5_hierarchical_clustering.png
│ ├── 6_more_words_better.png
│ └── 7_branchfactor.png
├── chapter_16
│ ├── Gyroscope.png
│ ├── IMU_pre_iteration.png
│ ├── acceleration_measurement.png
│ ├── accelorometer.png
│ ├── angular_velocity_measurement.png
│ ├── closed_form_solution_1D.png
│ ├── imu_camera_calibration.png
│ ├── imu_cost_function.png
│ ├── imu_mode_integration.png
│ ├── interial_measurement_unit.png
│ ├── loosely_coupled_approach.png
│ ├── matrix_A.png
│ ├── smoothing_formula.png
│ ├── smoothing_methods.png
│ └── tightly_coupled_approach.png
├── chapter_17
│ ├── aggregated_event_image.png
│ ├── cameras_filming_rotating_plate.png
│ ├── difference_in_sampling.png
│ ├── event_based_camera_picture.png
│ ├── event_time_space_room_with_voxels.png
│ ├── focus_maximization_framework.png
│ ├── gradient_and_movement.png
│ ├── high_speed_camera_comparison.png
│ ├── moving_edge.png
│ └── sharpen_image_using_events.png
├── chapter_2
│ ├── 1_pinhole_camera.png
│ ├── 2_thin_lens_equation.png
│ ├── 3_blur_circle.png
│ ├── 4_pinhole_approximation.png
│ ├── 5_ration_fow_focal_length.png
│ ├── 6_vanishing_points_and_lines.png
│ ├── lense.png
│ ├── limes_of_vanishing_lines.png
│ └── parallel_lines.png
├── chapter_3
│ ├── 1_world_and_pixel_coordinates.png
│ ├── 2_world_to_camera_coordinates.png
│ ├── 3_camera_to_frame_coordinates.png
│ ├── 4_camera_to_pixel_coordinates.png
│ ├── 5_world_to_pixel_coordinates.png
│ ├── 6_normalized_image_coordinates.png
│ ├── distortion.png
│ ├── img_0001.jpg
│ ├── img_0001_dist.jpg
│ └── perspective.png
├── chapter_4
│ ├── 0_P1P.png
│ ├── 10_planar_perspective_part2.png
│ ├── 11_planar_matrix_equation.png
│ ├── 12_planar_matrix_equation_part2.png
│ ├── 13_planar_matrix_equation_part3.png
│ ├── 14_types_of_2d_transformations.png
│ ├── 15_omnidir_camera.png
│ ├── 16_noncentral_catadipotric.png
│ ├── 17_central_catadipotric.png
│ ├── 18_equivalence_omnidir_perspective.png
│ ├── 1_projection_equation.png
│ ├── 2_projection_equation_part2.png
│ ├── 3_homogeneous_to_pixel.png
│ ├── 4_matrix_equation.png
│ ├── 5_matrix_equation_part2.png
│ ├── 6_matrix_equation_part3.png
│ ├── 7_M_to_K_part1.png
│ ├── 8_M_to_K_part2.png
│ ├── 9_planar_perspective.png
│ ├── P3P.png
│ ├── Unified_Omnidirectional_Camera_Model.png
│ ├── angle_from_f.png
│ ├── ani.gif
│ ├── camera.gif
│ ├── detected_corners.txt
│ ├── detected_corners_vector.pkl
│ └── img_0001.jpg
├── chapter_5
│ ├── 10_image_first_derivative_demonstration.png
│ ├── 11_partial_derivative_filters.png
│ ├── 12_prewitt_sobel_filter.png
│ ├── 13_individual_processing_steps_for_edge_detection.png
│ ├── 14_gaussian_smoothing_and_derivative_filter.png
│ ├── 15_difference_of_gaussians_filter.png
│ ├── 16_canny_edge_detection.png
│ ├── 17_gaussian_filter_comparison.png
│ ├── 18_laplacian_of_gaussian.png
│ ├── 1_different_noise_types.png
│ ├── 2_smoothed_signal.png
│ ├── 3_convolution_vs_cross-correlation.png
│ ├── 4_before_filtering_image_with_box_filter.png
│ ├── 5_after_filtering_image_with_box_filter.png
│ ├── 6_gaussian_filter.png
│ ├── 7_gaussian_filter_comparison.png
│ ├── 8_median_filtered_image.png
│ └── 9_billateral_filter_demonstration.png
├── chapter_6
│ ├── census_transform.png
│ ├── cross_correlation.png
│ ├── elipses.png
│ ├── harris_1.jpg
│ ├── harris_2.jpg
│ ├── harris_corner_detector_eigenvalues.png
│ ├── harris_corner_detector_eigenvector.png
│ ├── harris_corner_detector_matrix.png
│ ├── harris_corner_detector_matrix_decomposition.png
│ ├── harris_vs_shitomasi.png
│ ├── harris_workflow.png
│ ├── moravec_corner_detector.png
│ ├── panorama_stitching.png
│ ├── ssd_harris_corner_detector.png
│ ├── ssd_moravec_corner_detector.png
│ ├── sum_of_absolute_differences.png
│ ├── sum_of_squared_differences.png
│ ├── template_matching.png
│ └── zero_mean_similarities.png
├── chapter_7
│ ├── affine_warping.png
│ ├── automatic_scale_selection.png
│ ├── detector_descriptor_overvie_table.png
│ ├── difference_of_gaussians_pyramid.png
│ ├── harris_1.jpg
│ ├── harris_2.jpg
│ ├── histogram_of_oriented_gradient.png
│ ├── img_1.jpg
│ ├── img_2.jpg
│ ├── laplacian_of_gaussian.png
│ ├── roto_translation_warping.png
│ ├── scale_change.png
│ ├── scale_invariant_feature_transform.png
│ ├── sift_affine_illumination_changes.png
│ ├── sift_detector_octaves.png
│ └── sift_space_scale_detector.png
├── chapter_8
│ ├── 10_reprojection_error.png
│ ├── 11_epipolar_line.png
│ ├── 12_epipolar_plane.png
│ ├── 13_epipolar_examples.png
│ ├── 14_stereo_rectification.png
│ ├── 15_projection_equation.png
│ ├── 15_projection_equation_left_and_right.png
│ ├── 16_new_cameras.png
│ ├── 17_homography.png
│ ├── 18_rectification_example.png
│ ├── 19_correspondence_matching.png
│ ├── 1_projection_and_stereo.png
│ ├── 2_stereogram.png
│ ├── 3_stereo_cases.png
│ ├── 4_stereo_vision_simple.png
│ ├── 5_large_and_small_baseline.png
│ ├── 6_linear_approximation.png
│ ├── 7_skew_symmetric_matrix.png
│ ├── 8_triangulation_equation_1.png
│ ├── 8_triangulation_equation_2.png
│ ├── 9_shortest_segment.png
│ └── data
│ │ ├── K.txt
│ │ ├── left
│ │ ├── 000000.png
│ │ ├── 000001.png
│ │ ├── 000002.png
│ │ ├── 000003.png
│ │ ├── 000004.png
│ │ ├── 000005.png
│ │ ├── 000006.png
│ │ ├── 000007.png
│ │ ├── 000008.png
│ │ ├── 000009.png
│ │ ├── 000010.png
│ │ ├── 000011.png
│ │ ├── 000012.png
│ │ ├── 000013.png
│ │ ├── 000014.png
│ │ ├── 000015.png
│ │ ├── 000016.png
│ │ ├── 000017.png
│ │ ├── 000018.png
│ │ ├── 000019.png
│ │ ├── 000020.png
│ │ ├── 000021.png
│ │ ├── 000022.png
│ │ ├── 000023.png
│ │ ├── 000024.png
│ │ ├── 000025.png
│ │ ├── 000026.png
│ │ ├── 000027.png
│ │ ├── 000028.png
│ │ ├── 000029.png
│ │ ├── 000030.png
│ │ ├── 000031.png
│ │ ├── 000032.png
│ │ ├── 000033.png
│ │ ├── 000034.png
│ │ ├── 000035.png
│ │ ├── 000036.png
│ │ ├── 000037.png
│ │ ├── 000038.png
│ │ ├── 000039.png
│ │ ├── 000040.png
│ │ ├── 000041.png
│ │ ├── 000042.png
│ │ ├── 000043.png
│ │ ├── 000044.png
│ │ ├── 000045.png
│ │ ├── 000046.png
│ │ ├── 000047.png
│ │ ├── 000048.png
│ │ ├── 000049.png
│ │ ├── 000050.png
│ │ ├── 000051.png
│ │ ├── 000052.png
│ │ ├── 000053.png
│ │ ├── 000054.png
│ │ ├── 000055.png
│ │ ├── 000056.png
│ │ ├── 000057.png
│ │ ├── 000058.png
│ │ ├── 000059.png
│ │ ├── 000060.png
│ │ ├── 000061.png
│ │ ├── 000062.png
│ │ ├── 000063.png
│ │ ├── 000064.png
│ │ ├── 000065.png
│ │ ├── 000066.png
│ │ ├── 000067.png
│ │ ├── 000068.png
│ │ ├── 000069.png
│ │ ├── 000070.png
│ │ ├── 000071.png
│ │ ├── 000072.png
│ │ ├── 000073.png
│ │ ├── 000074.png
│ │ ├── 000075.png
│ │ ├── 000076.png
│ │ ├── 000077.png
│ │ ├── 000078.png
│ │ ├── 000079.png
│ │ ├── 000080.png
│ │ ├── 000081.png
│ │ ├── 000082.png
│ │ ├── 000083.png
│ │ ├── 000084.png
│ │ ├── 000085.png
│ │ ├── 000086.png
│ │ ├── 000087.png
│ │ ├── 000088.png
│ │ ├── 000089.png
│ │ ├── 000090.png
│ │ ├── 000091.png
│ │ ├── 000092.png
│ │ ├── 000093.png
│ │ ├── 000094.png
│ │ ├── 000095.png
│ │ ├── 000096.png
│ │ ├── 000097.png
│ │ ├── 000098.png
│ │ └── 000099.png
│ │ ├── poses.txt
│ │ ├── right
│ │ ├── 000000.png
│ │ ├── 000001.png
│ │ ├── 000002.png
│ │ ├── 000003.png
│ │ ├── 000004.png
│ │ ├── 000005.png
│ │ ├── 000006.png
│ │ ├── 000007.png
│ │ ├── 000008.png
│ │ ├── 000009.png
│ │ ├── 000010.png
│ │ ├── 000011.png
│ │ ├── 000012.png
│ │ ├── 000013.png
│ │ ├── 000014.png
│ │ ├── 000015.png
│ │ ├── 000016.png
│ │ ├── 000017.png
│ │ ├── 000018.png
│ │ ├── 000019.png
│ │ ├── 000020.png
│ │ ├── 000021.png
│ │ ├── 000022.png
│ │ ├── 000023.png
│ │ ├── 000024.png
│ │ ├── 000025.png
│ │ ├── 000026.png
│ │ ├── 000027.png
│ │ ├── 000028.png
│ │ ├── 000029.png
│ │ ├── 000030.png
│ │ ├── 000031.png
│ │ ├── 000032.png
│ │ ├── 000033.png
│ │ ├── 000034.png
│ │ ├── 000035.png
│ │ ├── 000036.png
│ │ ├── 000037.png
│ │ ├── 000038.png
│ │ ├── 000039.png
│ │ ├── 000040.png
│ │ ├── 000041.png
│ │ ├── 000042.png
│ │ ├── 000043.png
│ │ ├── 000044.png
│ │ ├── 000045.png
│ │ ├── 000046.png
│ │ ├── 000047.png
│ │ ├── 000048.png
│ │ ├── 000049.png
│ │ ├── 000050.png
│ │ ├── 000051.png
│ │ ├── 000052.png
│ │ ├── 000053.png
│ │ ├── 000054.png
│ │ ├── 000055.png
│ │ ├── 000056.png
│ │ ├── 000057.png
│ │ ├── 000058.png
│ │ ├── 000059.png
│ │ ├── 000060.png
│ │ ├── 000061.png
│ │ ├── 000062.png
│ │ ├── 000063.png
│ │ ├── 000064.png
│ │ ├── 000065.png
│ │ ├── 000066.png
│ │ ├── 000067.png
│ │ ├── 000068.png
│ │ ├── 000069.png
│ │ ├── 000070.png
│ │ ├── 000071.png
│ │ ├── 000072.png
│ │ ├── 000073.png
│ │ ├── 000074.png
│ │ ├── 000075.png
│ │ ├── 000076.png
│ │ ├── 000077.png
│ │ ├── 000078.png
│ │ ├── 000079.png
│ │ ├── 000080.png
│ │ ├── 000081.png
│ │ ├── 000082.png
│ │ ├── 000083.png
│ │ ├── 000084.png
│ │ ├── 000085.png
│ │ ├── 000086.png
│ │ ├── 000087.png
│ │ ├── 000088.png
│ │ ├── 000089.png
│ │ ├── 000090.png
│ │ ├── 000091.png
│ │ ├── 000092.png
│ │ ├── 000093.png
│ │ ├── 000094.png
│ │ ├── 000095.png
│ │ ├── 000096.png
│ │ ├── 000097.png
│ │ ├── 000098.png
│ │ └── 000099.png
│ │ └── tmp_func.py
└── chapter_9
│ ├── 10_hartley_scaling.png
│ ├── 11_directional_error.png
│ ├── 12_epipolar_line_distance.png
│ ├── 13_reprojection_error.png
│ ├── 1_scale_ambiguity.png
│ ├── 2_epipolar_constraint.png
│ ├── 3_rectified_case.png
│ ├── 4_essentail_matrix.png
│ ├── 5_Q_and_E.png
│ ├── 6_four_solutions.png
│ ├── 7_K_and_normalized_image_vector.png
│ ├── 8_fundamental_matrix.png
│ ├── 9_normalizing_8_point.png
│ └── relative_translation_2DOF.png
└── torus.png
/.gitignore:
--------------------------------------------------------------------------------
1 | # Byte-compiled / optimized / DLL files
2 | __pycache__/
3 | *.py[cod]
4 | *$py.class
5 |
6 | # C extensions
7 | *.so
8 |
9 | # Distribution / packaging
10 | .Python
11 | build/
12 | develop-eggs/
13 | dist/
14 | downloads/
15 | eggs/
16 | .eggs/
17 | lib/
18 | lib64/
19 | parts/
20 | sdist/
21 | var/
22 | wheels/
23 | *.egg-info/
24 | .installed.cfg
25 | *.egg
26 | MANIFEST
27 |
28 | # PyInstaller
29 | # Usually these files are written by a python script from a template
30 | # before PyInstaller builds the exe, so as to inject date/other infos into it.
31 | *.manifest
32 | *.spec
33 |
34 | # Installer logs
35 | pip-log.txt
36 | pip-delete-this-directory.txt
37 |
38 | # Unit test / coverage reports
39 | htmlcov/
40 | .tox/
41 | .coverage
42 | .coverage.*
43 | .cache
44 | nosetests.xml
45 | coverage.xml
46 | *.cover
47 | .hypothesis/
48 | .pytest_cache/
49 |
50 | # Translations
51 | *.mo
52 | *.pot
53 |
54 | # Django stuff:
55 | *.log
56 | local_settings.py
57 | db.sqlite3
58 |
59 | # Flask stuff:
60 | instance/
61 | .webassets-cache
62 |
63 | # Scrapy stuff:
64 | .scrapy
65 |
66 | # Sphinx documentation
67 | docs/_build/
68 |
69 | # PyBuilder
70 | target/
71 |
72 | # Jupyter Notebook
73 | .ipynb_checkpoints
74 |
75 | # pyenv
76 | .python-version
77 |
78 | # celery beat schedule file
79 | celerybeat-schedule
80 |
81 | # SageMath parsed files
82 | *.sage.py
83 |
84 | # Environments
85 | .env
86 | .venv
87 | env/
88 | venv/
89 | ENV/
90 | env.bak/
91 | venv.bak/
92 |
93 | # Spyder project settings
94 | .spyderproject
95 | .spyproject
96 |
97 | # Rope project settings
98 | .ropeproject
99 |
100 | # mkdocs documentation
101 | /site
102 |
103 | # mypy
104 | .mypy_cache/
105 |
106 | .idea
107 | .ipynb_checkpoints
108 |
--------------------------------------------------------------------------------
/Chapter 1 - Overview.md:
--------------------------------------------------------------------------------
1 | # Chapter 1 - Overview
2 |
3 | This is the first of a whole series of articles about Visual Odometry and Visual Algorithms. The goal of these series
4 | is to give deeper insights into how visual algorithms can be used to estimate the cameras position and movement from
5 | its images only. Such algorithms can then be used in robots, cars and drones to enable autonomous movement.
6 |
7 | So what is Visual Odometry all about? In simple words Visual Odometry estimates the position and orientation of the
8 | camera in a iterative manner just by analyzing the images. From the change on the estimated poses the motion can be
9 | derived. In contrast to most other approaches which are based on some sensors data or other mechanical data the
10 | visual approach is not affected as much by uncertainties. For Wheel odometry it is a huge problem when the wheels
11 | are slipping or for gps obstruction landscape of buildings are a problem. Inertial measurement units (IMU) are prone
12 | to shift when small discrepancies are introduce they hardly are able to recover.
13 |
14 | However also Visual Odometry can not always be applied and some assumptions have to be met enabling reasonable results.
15 | First of all since VO is based on image input, a sufficient illumination is needed so that representative images can be
16 | produced. Next up for deriving the motion of a vehicle a large portion of the image should originate from a static
17 | scenery. The motion is constructed by looking at the difference of subsequent images, therefore the images should
18 | contain enough texture so that the object on the images can be match to each other. Obviously there have to be a
19 | certain overlap in consecutive frames so the the relation between then is not lost.
20 |
21 | ## History of Visual Odometry
22 |
23 | The field of VO originates from research of the NASA. The first known application of VO was made by Hans Moraveck
24 | in 1980 who used a sliding stereo camera in his PhD thesis which was part of the development of the mars rovers.
25 | Up to 2000 most VO research originated from NASA in preparation of the Mars missions. In 2004 David Nister wrote a
26 | paper called "Visual Odometry" which popularize the term.
27 |
28 | ## Some terminology
29 |
30 | There are different versions of visual algorithms which tackles different aspects of the overall problems. It is
31 | important to understand the difference of these algorithms and what the goal of them is. Here some of the are explained
32 | and are put into relation.
33 |
34 | ### Structure from Motion (SFM)
35 |
36 | The first term that we want to explain is "Structure from Motion" (SFM). SFM is more general
37 | than Visual Odometry because it only tackles the problem of estimating the pose and not the motion. So the Goal of the
38 | SMF is to estimate 6 different degrees of freedom, three for the position and three for the orientation. Also in
39 | contrast to VO which works with a sequence of images, SFM is applied to a set of unordered images. An example for SFM
40 | can be read about int he paper "Building Rome in a Day" in which the the authors construct a 2D model of romes city
41 | center by butting together the pose estimation of millions of photos taken by tourists. Due to the fact that the images
42 | for SFM are unordered is becomes clear that for SFM real time applications are barely possible. SFM is more a post
43 | processing task.
44 |
45 | ### Visual SLAM (VSLAM)
46 |
47 | Another extension the the basic VO is the Visual SLAM (VSLAM) where SLAM stands for "**S**imultaneous **L**ocalization
48 | **A**nd **M**apping". Since VO only guarantees local consistency it can happen that all the small error add up which
49 | then becomes well visible in closed loop motion when start and endpoint should line up but won't with basic VO. SLAM
50 | adjusts the model in a way so that it consistently checks if it recognized the surrounding so that if it does it can
51 | try to close the loop and therefore adjust the previous estimation. In simple words SLAM enables global consistency
52 | using loop detection and loop closure.
53 |
54 | 
55 |
56 | So we can say VO is part of VSLAM which itself is part of SFM.
57 |
58 | All Visual Odometry algorithms follow the same process model. An image sequence or a unordered image set is used as input.
59 | Then the algorithm detects features, which are certain points in the image which it can recognize. These points are than
60 | tracked throught the sequence/ set of images. From the translation on the images of these features the 3D relation
61 | between then can be estimated as well as the motion of the camera. In the end the estimations are optimized using local
62 | optimisation methods. The the basic workflow of Vo is:
63 |
64 | 1. Reading Image Sequence
65 | 2. Feature detection
66 | 3. Feature matching and tracking
67 | 4. Motion estimation
68 | 5. Local optimisation
69 |
70 | 
71 |
72 | 
73 |
74 | 
75 |
76 | 
77 |
78 |
79 |
--------------------------------------------------------------------------------
/Chapter 13 - Dense 3D Reconstruction.ipynb:
--------------------------------------------------------------------------------
1 | {
2 | "cells": [
3 | {
4 | "cell_type": "markdown",
5 | "metadata": {},
6 | "source": [
7 | "# Chapter 13 - Dense 3D Reconstruction\n",
8 | "\n",
9 | "In all previous chapters, we focused on sparse features: Small but easily recognizable, characteristic features in our scene. We tracked and matches such sparse features for pose estimations and structure from motion, to name a few applications. However, in this chapter, we will focus on Dense reconstruction. This means that we will not only track special feature points but every single pixel. If we could successfully match every pixel between two images from the same object, we could generate a nearly perfect 3D representation since we knew for every pixel its depth value.\n",
10 | "For a successfull 3D reconstruction, we need calibrated cameras *(K is given)* and their viewport positions *(R, t)*.\n",
11 | "\n",
12 | "\n",
13 | "*Figure 1: 3D Reconstructions using multiple images of the same Object. [source](http://rpg.ifi.uzh.ch/docs/teaching/2019/12a_3D_reconstruction.pdf)*\n",
14 | "\n",
15 | "The degree to which the viewport changes highly influences our depth estimation. If we have a very large baseline, we have a clear projection location of where the points depth might lay. However, it is difficult to find the correspondance point in the reference image. On the contrast, small baselines give us a good chance of finding the correspondance point, but the depth error might be quite large since we stil have quite a large range of possible depths that would result in nearly the same view. The solution is to take relatively small baselines (we prefer finding the correspondance) and take a new reference frame whenever the angle between new frames with respect to the reference image becomes too large. This will of course start to 3D reconstruct a new object which we will have to marge with the previous ones. \n",
16 | "\n",
17 | "\n",
18 | "*Figure 2: Depth uncertainty with differente viewport changes. [source](http://rpg.ifi.uzh.ch/docs/teaching/2019/12a_3D_reconstruction.pdf)*\n",
19 | "\n",
20 | "For a 3D reconstruction, we need a depth evaluation for every single pixel. We therefore take one image as the reference image, every other image than acts as a new matching partner to find out new depth estimations for every pixel in the reference image. Note that pixel mappings reveals several problems that we did not have when dealing with sparese features. Sparese features were specifically choosen to be matchable and recognizable. They are mostly blobs or corners. Now that we match pixels, we have to match edges and flat regions as well, giving a high degree of ambiguity that we have to overcome. \n",
21 | "\n",
22 | "To overcome this challenge, we will perform two sequential steps. First, we will use **local methods** to estimate the depth for each pixel independently. Of course, the quality of this estimation will heavily depend on the quality of the underlaying patch. In a second step, we will fix bad estimations using **global methods**: We'll refine the depth map as a whole by making sure it is smooth and does not have abrupt changes. This is called regularization. "
23 | ]
24 | },
25 | {
26 | "cell_type": "markdown",
27 | "metadata": {},
28 | "source": [
29 | "## Local Method: Aggregated Photometric Error\n",
30 | "\n",
31 | "First, let's focus on the local methods. Given two images and their relative positions [R,t], we can of course construct an epipolar line for each pixel that hints us where the we can find the pixels reference in the second image. The position on the epipolar-line corresponds to the depth. \n",
32 | "Let's assume we have a base image to our left and a subsequent frame taken to it's right. The camera would therefore be at the left side of the epipolar line, as seen from the subequent frame. The further to the right we travel on the epipolar line, the farther away we go from the reference camera. The position on the epipolar line on which we find the match therefore defines the depth.\n",
33 | "\n",
34 | "Given one Pixel on the reference Image, we can therefore loop over all subsequent frames and compute for each position on the epipolar line the correspondance. The sum of all correspondances of all subsequent frames is called the *Aggregated Photometric Error*. To simplyfy the problem a little bit, we only search for correspondances at fixed depth levels, e.g. at fixed positions along the epipolar line. We therefore get a correspondance depth estimation from every subsequential frames at the same pixel locations, making it easier to us to find the optimal depth value later on. It also drastically reduces the computation power since we can define the min- and max search depth we want to explore, as well as how many different depth values we want to try out between the minimum and maximum. If we have good a-priori knowledge about the scene, we can speed up the computation by a high degree.\n",
35 | "\n",
36 | "\n",
37 | "*Figure 3: Aggregated Photometric Error. [source](http://rpg.ifi.uzh.ch/docs/teaching/2019/12a_3D_reconstruction.pdf)*\n",
38 | "\n",
39 | "Let's say we want to explore 100 depth values between 0m and 1m for a set of 240x180 pixel images. For each pixel, we get 100 x n depth estimations (where n is the number of images - 1). If we take the aggregated pixel values, we get 100 depth estimations, for depths [0.00, 0.01, 0.02, ..., 0.99, 1.00]. We can represent these values in a tensor of dimension 240x180x100. This tensor is often called the **Disparity Space Image**, or short **DSI**. \n",
40 | "Low values in the DSI correspond to a good estimate (low error), while large values in the DSI imply bad estimates (high error). \n",
41 | "\n",
42 | "The Disparity Space Image has three dimensions, (u, v, d), where d is of course the depth hypothesis. For a given image point (u,v) with depth hypothesis d, the Aggregated Photometric Error with respect to the reference frame can now be accessed via C(U, V, d). C here is just a new notation for DSI. The values in the DSI can be calculated by calculating the photometric error (like SSD, L1, L1, Hubert norm etc.) of the reference image IRef(u, v) and all other images Ik(u', v', d), where (u', v') is the location on the epipolar line that, using depth d, correspond to (u, v) in the reference image. \n",
43 | "\n",
44 | "Remember how we get (u', v') given the epipolar line and a depth d? We first need to project the point (u,v) from the reference image into the world. Since we have the depth *d* given, we can multiply the projection $\\pi$R-1 (u, v) * d to get a fixed point in the world coordinate system. We then need to translate the point into the coordinate system of the k'th frame using the backprojection function $\\pi$k. Voila, we get coordinates (u', v') in the Image Ik given distance *d*. \n",
45 | "\n",
46 | "\n",
47 | "*Figure 4: Calculate Disparity Space Image. [source](http://rpg.ifi.uzh.ch/docs/teaching/2019/12a_3D_reconstruction.pdf)*\n",
48 | "\n",
49 | "Do find the best depth-guess of all values in the DSI for each pixel, we only need a function that minimizes the aggregated depth errors at each pixel level (u, v). The easiest solution is to just take the smallest of all values, since at this depth we have had the smallest error. \n",
50 | "\n",
51 | "\n",
52 | "*Figure 5: Calculate final depth using DSI. [source](http://rpg.ifi.uzh.ch/docs/teaching/2019/12a_3D_reconstruction.pdf)*\n",
53 | "\n",
54 | "Note that we do NOT compare single pixels here. When we speak of I(u,v), we do NOT mean the pixel at I(u,v), but rather the **patch** around (u,v). The patch can have variable size, and it changes the effect of our results to a great extend. The smaller we choose the patch, the more detailed results we get, but we also have many outliers and a ton of noise. However, if we choose the patch to be large, we have to deal with less noise and smoother disparity maps, but our map will lack details.\n",
55 | "\n",
56 | "\n",
57 | "*Figure 6: Influence of Path on Depth Map. [source](http://rpg.ifi.uzh.ch/docs/teaching/2019/12a_3D_reconstruction.pdf)*\n",
58 | "\n",
59 | "We talked about the quality of our depth estimation depending on the feature quality. While corners can of course be matched with high clarity, even edges can be hard to match, not even speaking of the ambiguity introduced by flat regions. We can show this when we plot the individual Photometric Error values over depth d: For flat regions, the response is very random and no clear minimum can be found for the aggregated Photometric Error. However, for clear corners, we find a clear and sharp depth response in the aggregated Photometric Error. \n",
60 | "\n",
61 | "\n",
62 | "*Figure 7: (Aggregated) Photometric Error for different features. [source](http://rpg.ifi.uzh.ch/docs/teaching/2019/12a_3D_reconstruction.pdf)*"
63 | ]
64 | },
65 | {
66 | "cell_type": "markdown",
67 | "metadata": {},
68 | "source": [
69 | "## Global Method: Regularization\n",
70 | "\n",
71 | "Now that we have a valid depth estimation map, we have to remove all the noise generated by bad features like flat regions. A comfortable way to do this is by penalize non-smooth changes in the 3D depth map by adding a regularization to the optimization. So instead of just taking the minimum value of all depth values at a given pixel position, we do piecewie smoothing first. We look at the global scope, not just the local scope, and can therefore detect too abrupt changes or outliers.\n",
72 | "\n",
73 | "The regularization term is added to the function that chooses which depth value to take from the DSI. Previously, we have just taken the minimum argument. Now, we add a regularization term to it, parametrized by the regularization factor lambda *l*. With increasing *l*, we increase the influence of the regularization, which leads to a smoother outcome.\n",
74 | "\n",
75 | "\n",
76 | "*Figure 8: Regularization term. [source](http://rpg.ifi.uzh.ch/docs/teaching/2019/12a_3D_reconstruction.pdf)*\n",
77 | "\n",
78 | "\n",
79 | "*Figure 9: Depth map change with increasing lambda. [source](http://rpg.ifi.uzh.ch/docs/teaching/2019/12a_3D_reconstruction.pdf)*\n",
80 | "\n",
81 | "We choose the regularization function in a way that ensrues that we do in fact not destroy real discontinuitites and sharp edges in our scene by using the fact that *depth* discontinuities often coincide with *intensity* discontinuities. Since depth dictontinuitits will often appear on smooth surfaces, but smooth surfaces often do NOT imply a change in 3D shape, we regularize these heavily. However, if we observe a sharp depth change that comes together with a sudden change in color intensity, we assume this is a real object surface change and apply only small regularization. \n",
82 | "\n",
83 | "We can therefore make the regularization term dependent on the image gradient: The higher the gradient, the smaller the regularization. We can do so by the squared partial derivatives before the regularization term, surrounded by a monotonically decreasing function (small to high, high to small). \n",
84 | "\n",
85 | "\n",
86 | "*Figure 10: Regularization relative to gradient. [source](http://rpg.ifi.uzh.ch/docs/teaching/2019/12a_3D_reconstruction.pdf)*"
87 | ]
88 | },
89 | {
90 | "cell_type": "markdown",
91 | "metadata": {},
92 | "source": [
93 | "## GPU for 3D reconstructions\n",
94 | "\n",
95 | "Compared to CPUs, GPUs are slow in sequential tasks but can perform tousands of tasks in parallel since they have a large number of cores. This makes GPUs very efficient for parallizable taks such as image manipulations, matrix operations etc. \n",
96 | "\n",
97 | "In dense 3D reconstruction, GPUs can perform a lot of the important tasks:\n",
98 | "- Image processing (Filtering, Feature extraction, Warping)\n",
99 | "- Multiple-view geometry (correspondance-search, Aggregated Photometric Error)\n",
100 | "- Global optimization (Regularization)\n",
101 | "\n"
102 | ]
103 | }
104 | ],
105 | "metadata": {
106 | "kernelspec": {
107 | "display_name": "Python 3",
108 | "language": "python",
109 | "name": "python3"
110 | },
111 | "language_info": {
112 | "codemirror_mode": {
113 | "name": "ipython",
114 | "version": 3
115 | },
116 | "file_extension": ".py",
117 | "mimetype": "text/x-python",
118 | "name": "python",
119 | "nbconvert_exporter": "python",
120 | "pygments_lexer": "ipython3",
121 | "version": "3.7.3"
122 | }
123 | },
124 | "nbformat": 4,
125 | "nbformat_minor": 2
126 | }
127 |
--------------------------------------------------------------------------------
/Chapter 14 - Place Recognition.ipynb:
--------------------------------------------------------------------------------
1 | {
2 | "cells": [
3 | {
4 | "cell_type": "markdown",
5 | "metadata": {},
6 | "source": [
7 | "# Chapter 14 - Place Recognition\n",
8 | "\n",
9 | "In this chapter we will dive into the field of place recognition. In the context of visual odometry place recognition is importent for recognizin when arriving at a already visited location so that loops can be closed. In order to be able to efficiently recognize locations we need a efficient representation of the features of a imgae whicih then can be clustered and seaeched for similar ones. Obviously place recognition can also be used for other application for example image retrieval where we want to find similar images to a given one.\n"
10 | ]
11 | },
12 | {
13 | "cell_type": "markdown",
14 | "metadata": {},
15 | "source": [
16 | "We will now show how imprtant a efficient representation of a image is for image retrieval. Lets say we have a database with 100 million images. How can we search through all of those images to find a matching one in about 6 secounds?\n",
17 | "\n",
18 | "\n",
19 | "*Figure 1: Image Querying. [source](http://rpg.ifi.uzh.ch/docs/teaching/2019/12b_recognition.pdf)*\n",
20 | "\n"
21 | ]
22 | },
23 | {
24 | "cell_type": "markdown",
25 | "metadata": {},
26 | "source": [
27 | "So our general goal is to query a database with $N$ images. If we extract $M$ features from each image then if we compare our query image with all the others we have iterate over each image ($O(N)$) and then compare each feature of our query image with each feature of the image from the database ($O(M^2)$). This means that the total complexity is $N \\cdot M^2$. T get an impression of this lets assume we have 100 million images in the database and we extract 1'000 features from each image. Then we would need to run 100'000'000'000'000 feature comparison. As a reference if each comparison takes 0.1 ms, then the image query would take 317 years!\n",
28 | "\n",
29 | "So how can we reduce this complexity? Well the answer is - inverted file index - we need to use a representation where we only iterarte over the features and not the images like this we reduce the complexity to $O(M)$"
30 | ]
31 | },
32 | {
33 | "cell_type": "markdown",
34 | "metadata": {},
35 | "source": [
36 | "### Indexing local features\n",
37 | "\n",
38 | "Indexing of visual features works similar to the index of a text document where most often at the end of the book there is a list listing which word appears on which page. For the visual context we want to finde the images that contain a certain feature. However compared to the example with text for image feature we have infinite different features whereas for text we most often have at least a boundend number of words. To reduce the number we can define Visual words as well a a vocabulay of such visual words. This approach is called **Bag if Words (BOW)**.\n",
39 | "\n",
40 | "How can we extract such visual words from the feature descriptors? To get a reasonable vocabulary we need plenty of data and therefora a large enought dataset. Then for each image the features and descripors are extracted and mapped into the descriptor space which depends on the representation of the descriptor. Then the descriptor space is clustered into $K$ clustes where $K$ is the number of visual words we want to have. For each cluster the centerpoint (centroid) is derived and represents the visual word. Usually the centroid is derived by thaking the arithmetic average of all desriptors in the cluster.\n",
41 | "\n",
42 | "\n",
43 | "*Figure 2: Descriptor Space. [source](http://rpg.ifi.uzh.ch/docs/teaching/2019/12b_recognition.pdf)*\n",
44 | "\n"
45 | ]
46 | },
47 | {
48 | "cell_type": "markdown",
49 | "metadata": {},
50 | "source": [
51 | "### Clustering\n",
52 | "\n",
53 | "How exactly do we cluster the descriptor space? The usual algorithm for that is the **k-means clustering**. This algorithm partitions $n$ datapoints into $k$ (user defined number) clusters, where each cluster has a center /centroid $m_i$. It minimizes the squared euclidean distance between the descriptor points and the nearest clustercenter $m_i$.\n",
54 | "\n",
55 | "\\begin{align*}\n",
56 | "D(X,M) = \\sum_{i=1}^{k} \\sum_{x \\in S_i} (x-m_i)^2\n",
57 | "\\end{align*}\n",
58 | "\n",
59 | "where $S_i$ is the the cluster $i$\n",
60 | "\n",
61 | "The k-means algorithm starts out with $k$ randomly choosen cluster centers. The it starts iterting. In each iteration if first assigns all points to their neares clustercenter. Then it updates the clustercenter based on the assigned points, so it takes the mean position of all assigned points.\n",
62 | "\n",
63 | "\n",
64 | "*Figure 3: Clustering. [source](http://rpg.ifi.uzh.ch/docs/teaching/2019/12b_recognition.pdf)*"
65 | ]
66 | },
67 | {
68 | "cell_type": "markdown",
69 | "metadata": {},
70 | "source": [
71 | "### Applying Visual Words to Image Retrieval\n",
72 | "\n",
73 | "From the clustering we get the vocabolary of the domain, meaning all possible visual words. The inverted file index now lists all visual words from that vocabulary. For each word we add those images that contain this visual word to a list. By feeding new images into that process we call full more images into that index list. Now when we search using a query image we look which wvisual words appear in that query image. For each of the appearing words we check which other images have the same word. For those iamges we add one to a counter in the voting array. The voting array is a list with one entry for each image containing a counter variable. In the end we select the image with the higherst counter value in the voting array as the match for the query image. Using this inverted file index quering an image is independent of the number of images in the database. However every feature in the query image still needs to be compared against all visual words in the vocabolary. Given that we still have 1000 features per image and a vocabulary of 1'000'000 visual words this results in 1'000'000'000 comparisons. This process would run for 28 hours if each comarison takes 0.1 ms. Therefore the goal of achieveing a time under 6 seconds is still not reached. "
74 | ]
75 | },
76 | {
77 | "cell_type": "markdown",
78 | "metadata": {},
79 | "source": [
80 | "### Hierarchical clustering\n",
81 | "\n",
82 | "The soltion to making the process even faster is the hierarchical clustering. Instead of clustering into $k$ clusters one can cluster into $b$ clusters and then cluster each of thos clusters again into $b$ clusters and so forth. Like this we are getting a treelike structure which makes the feature-visual word comparison faster. For each feature we go down this cluster tree to get to the leaf node which then descibes the visual word. This however means that we do not have to campare each feature with each visual word. This process of going down the tree is the same for building the index as well as retireving a match.\n",
83 | "now we calculate how long it takes when we now want to query in a datbase with 100'000'000 images and have 1000 features per image and we assume 1'000'000 visual words. Lets say we structure our hierarchical clustering to have 10 clusters on each level. So first we cluster into 10 clusters and the we cluster each clustaer again into 10 clusters and repeat this in total 6 time. Then we have 10 branches ($b$) each level and 6 depth levels ($l$). This results in $b^L = 1'000'000$ visual words.\n",
84 | "We have to compare each feature with 10 clusters each level. Therefore the number of comparisons is $M \\cdot b \\cdot L = 1000 \\cdot 10 \\cdot 6 = 60'000$. If we again assume 0.1 ms per comparison a query would need 6 seconds. \n",
85 | "\n",
86 | "\n",
87 | "*Figure 4: Hierarchical clustering. [source](http://rpg.ifi.uzh.ch/docs/teaching/2019/12b_recognition.pdf)*\n"
88 | ]
89 | },
90 | {
91 | "cell_type": "markdown",
92 | "metadata": {},
93 | "source": [
94 | "### Robustnes\n",
95 | "\n",
96 | "Onw downside this approach has is that it looses spatial imformation in the images. The matching is pure feature based which for the most part does not have any geometrical information. This is especially unfortunate if there are multiple possible matches which are reasonable but one of is always picked since it scores slighly better. In such a case it is beneficial to find a valid methods to differentiate the possible solutions to the find the best one. We can overcome this if we include the geomertic imformation as well. This we can achieve by using the 5 or 8 point algorithm to get the geometrical orientation of the iamge. then we can apply this to the most similar iamges and compare the reprocetion error.\n",
97 | "\n",
98 | "For now we have more or less arbitrarely choosen the number of words in our vocabularely. But how much does it matter how many words we have. Well the more words the better we can differentiate the images. But we would also need more branches or levels, so the query times grows. In general we can say t the larger the number of words we use is the less of an improvement it give to add even more words.\n",
99 | "\n",
100 | "\n",
101 | "*Figure 5: Number of Words. [source](http://rpg.ifi.uzh.ch/docs/teaching/2019/12b_recognition.pdf)*\n",
102 | "\n",
103 | "We can also variate the branchfactor for a give number of words we then just have to adjust the depth.\n",
104 | "\n",
105 | "\n",
106 | "*Figure 6: Branch Factor. [source](http://rpg.ifi.uzh.ch/docs/teaching/2019/12b_recognition.pdf)*\n"
107 | ]
108 | },
109 | {
110 | "cell_type": "markdown",
111 | "metadata": {},
112 | "source": [
113 | "## summary\n",
114 | "\n",
115 | "\n",
116 | "*Figure 5: summary. [source](http://rpg.ifi.uzh.ch/docs/teaching/2019/12b_recognition.pdf)*"
117 | ]
118 | }
119 | ],
120 | "metadata": {
121 | "kernelspec": {
122 | "display_name": "Python 3",
123 | "language": "python",
124 | "name": "python3"
125 | },
126 | "language_info": {
127 | "codemirror_mode": {
128 | "name": "ipython",
129 | "version": 3
130 | },
131 | "file_extension": ".py",
132 | "mimetype": "text/x-python",
133 | "name": "python",
134 | "nbconvert_exporter": "python",
135 | "pygments_lexer": "ipython3",
136 | "version": "3.7.3"
137 | }
138 | },
139 | "nbformat": 4,
140 | "nbformat_minor": 2
141 | }
142 |
--------------------------------------------------------------------------------
/Chapter 2 - Optics.ipynb:
--------------------------------------------------------------------------------
1 | {
2 | "cells": [
3 | {
4 | "cell_type": "markdown",
5 | "metadata": {
6 | "pycharm": {
7 | "metadata": false
8 | }
9 | },
10 | "source": [
11 | "# Chapter 2 - Optics\n",
12 | "\n",
13 | "In this article, we are going to find out how an image is formed on an image plane. \n"
14 | ]
15 | },
16 | {
17 | "cell_type": "markdown",
18 | "metadata": {
19 | "pycharm": {
20 | "metadata": false
21 | }
22 | },
23 | "source": [
24 | "The overall principle is quite basic: An object reflects light that falls on an Image sensor, which captures the lights intensity and\n",
25 | "therefore, forms an image. To ensure that every part of the scenery only falls onto the optical sensor at one spot only, we can introduce\n",
26 | "an optical barrier with a hole in it which ensures that - for each point in our scene - only light rays with a particular \n",
27 | "angle fall onto the image plane.\n",
28 | "We can therefore create an upside-down copy of the scenery on our optical sensor. The smaller the barriers hole, the more angle-selective\n",
29 | "our camera becomes, the sharper the image appears. The hole is also known as aperture, or pinhole. \n",
30 | "\n",
31 | "\n",
32 | "*Figure 1: Concept of a Pinhole camera. [source](http://rpg.ifi.uzh.ch/docs/teaching/2019/01_introduction.pdf)*"
33 | ]
34 | },
35 | {
36 | "cell_type": "markdown",
37 | "metadata": {
38 | "pycharm": {
39 | "metadata": false
40 | }
41 | },
42 | "source": [
43 | "An ideal pinhole camera has - mathematically - an infinitely small pinhole to have an infinitely sharp image. In practice, this comes in\n",
44 | "hand with two problems: The smaller the pinhole, the less light we can capture on our sensor. Further, a pinhole smaller than 0.3mm will\n",
45 | "cause light wave interferences, making the image blurry again due to diffraction effects. \n"
46 | ]
47 | },
48 | {
49 | "cell_type": "markdown",
50 | "metadata": {
51 | "pycharm": {
52 | "metadata": false
53 | }
54 | },
55 | "source": [
56 | "To combat these issues, lenses are used. They have the property that they bundle light rays coming from the same point in our scenery\n",
57 | "into a (preferably) single spot on the optical sensor. Lenses must fulfill two characteristics to be fitting camera lenses:\n",
58 | "- 1. Light rays that travel through the optical center of the lens will not be deviated\n",
59 | "- 2. Light rays that fall parallel to the optical axis into the lens are focused in a so called \"focal point\" *f* behind the lens. \n",
60 | "\n",
61 | "\n",
62 | "*Figure 2: Lens. [source](http://rpg.ifi.uzh.ch/docs/teaching/2019/01_introduction.pdf)*"
63 | ]
64 | },
65 | {
66 | "cell_type": "markdown",
67 | "metadata": {
68 | "pycharm": {
69 | "metadata": false
70 | }
71 | },
72 | "source": [
73 | "With combining these two properties, we can derive the **thin lens equation**: From a single object in our scene at distance *z* and height *A*\n",
74 | "in front of our lens, we can construct two light rays: One passing through the optical center, the other entering the lens parallel\n",
75 | "to the optical axis. \n"
76 | ]
77 | },
78 | {
79 | "cell_type": "markdown",
80 | "metadata": {
81 | "pycharm": {
82 | "metadata": false
83 | }
84 | },
85 | "source": [
86 | "To make the object appear sharp, we have to ensure that both light rays fall onto the same point on our optical sensor. Since the\n",
87 | "focal point is given by the lens properties, we cannot vary the focal length *f* (distance between focal point and lens). What we \n",
88 | "can change is the position of the optical sensor: We can either bring it closer or farther to lens. We call the distance to the\n",
89 | "optical sensor *e*. \n"
90 | ]
91 | },
92 | {
93 | "cell_type": "markdown",
94 | "metadata": {
95 | "pycharm": {
96 | "metadata": false
97 | }
98 | },
99 | "source": [
100 | "With looking back at similarity triangles principles, we can see that The objects elevation *A* in respect to the position of the sensor crossing point *B* must be the same as the distance to the object *z* in respect to the distance from the lens to the image sensor *e*. We therefore conduct that *B/A = e/z*. \n",
101 | "As a second equation, we can conduct that *B/A* must also be equal to the ratio *e-f/f*. To simplify, we can also write\n",
102 | "*B/A = e/f - 1*.\n",
103 | "\n",
104 | "\n",
105 | "*Figure 2: Thin lens equation model visualization. [source](http://rpg.ifi.uzh.ch/docs/teaching/2019/01_introduction.pdf)*"
106 | ]
107 | },
108 | {
109 | "cell_type": "markdown",
110 | "metadata": {
111 | "pycharm": {
112 | "metadata": false
113 | }
114 | },
115 | "source": [
116 | "With combining these two equations, we get that *e/f - 1 = e/z* and finally **1/f = 1/z + 1/e**. Therefore, for a given\n",
117 | "distance *z*, the object only appears sharp if the optical sensor is distance *e* away from the lens.\n"
118 | ]
119 | },
120 | {
121 | "cell_type": "markdown",
122 | "metadata": {
123 | "pycharm": {
124 | "metadata": false
125 | }
126 | },
127 | "source": [
128 | "It becomes clear that if we move an object further away (increasing *z*), the distance *e* must be changed to make the object appear\n",
129 | "sharp again. \n",
130 | "When the thin lens equation is not satisfied, the light rays do not intersect at the optical sensor, creating a blur circle which\n",
131 | "is perceived as \"unsharp\". Only a blur circle with radius less than 1 Pixel gives a sharp image. \n"
132 | ]
133 | },
134 | {
135 | "cell_type": "markdown",
136 | "metadata": {
137 | "pycharm": {
138 | "metadata": false
139 | }
140 | },
141 | "source": [
142 | "The distance between the focal plane (where the light rays at this distance actually meet) and the image plane (optical sensor)\n",
143 | "is called δ, the diameter of a pinhole is referred to as *L*. For simple pinhole cameras, this gives us a blur circle \n",
144 | "radius of:\n",
145 | "\n",
146 | "\\begin{align*}\n",
147 | "\\dfrac{L/2}{R}=\\dfrac{e}{\\delta} \\implies R = \\dfrac{L \\cdot \\delta}{2 \\cdot e} \n",
148 | "\\end{align*}\n",
149 | "\n",
150 | "\n",
151 | "*Figure 3: Blur circle. [source](http://rpg.ifi.uzh.ch/docs/teaching/2019/01_introduction.pdf)*"
152 | ]
153 | },
154 | {
155 | "cell_type": "markdown",
156 | "metadata": {
157 | "pycharm": {
158 | "metadata": false
159 | }
160 | },
161 | "source": [
162 | "Why is this relevant? Well, for large distances to our object *z* we can approximate our lens-based camera model with a pinhole camera,\n",
163 | "since the distance to any world object is much much larger than the focal length or the lens size. Typically, smartphone cameras\n",
164 | "have focal lengths of 1.7mm and lens sizes of < 1 cm. We can therefore focus at objects at infinity. This implies that the \n",
165 | "focal plane for objects that are infinitely far away moves to the focal point. \n"
166 | ]
167 | },
168 | {
169 | "cell_type": "markdown",
170 | "metadata": {
171 | "pycharm": {
172 | "metadata": false
173 | }
174 | },
175 | "source": [
176 | "We can therefore safely approximate that the focal length *f* is equal to the optical sensor distance *e : e ≈ f*. This makes the \n",
177 | "relation between our objects elevation *A* and the point on the image plane *B* even simpler: We don't have to consider two\n",
178 | "lightrays but just one falling straight throught the pinhole. This also leaves us with a simpler equation to\n",
179 | "find the point *B* where a object at distce *z* and elevation *A* would fall on the image sensor: *B/A = f/z*, or *B = f/z ∙ A*. \n",
180 | "Therefore, objects twice as far away appear half as large in on the optical sensor. \n",
181 | "\n",
182 | "\n",
183 | "*Figure 4: Pinhole approximation. [source](http://rpg.ifi.uzh.ch/docs/teaching/2019/01_introduction.pdf)*"
184 | ]
185 | },
186 | {
187 | "cell_type": "markdown",
188 | "metadata": {
189 | "pycharm": {
190 | "metadata": false
191 | }
192 | },
193 | "source": [
194 | "The distance range in which an object appears sharp (R < 1 pixel) is called the Depth of Field (DoF). The smaller the apperture, \n",
195 | "the larger the Depth of Field, but the less light we have left for the image sensor. \n",
196 | "Further, the lens size at a fixed focal length defines the biggest angle the camera can perceive, the Field of View (FoV). \n",
197 | "We can also increase/decrease the FoV by changing the focal length: Larger focal lengths intuitively result in a more narrow\n",
198 | "viewing angle. The ratio between the focal length *f*, lenswidth *W* and the FoV angle *θ* can be simply expressed via a tangential relation:\n",
199 | "*tan(θ/2) = W/(2∙f)*\n",
200 | "\n",
201 | "\n",
202 | "*Figure 5: Ratio between Field of View and Focal length. [source](http://rpg.ifi.uzh.ch/docs/teaching/2019/01_introduction.pdf)*"
203 | ]
204 | },
205 | {
206 | "cell_type": "markdown",
207 | "metadata": {
208 | "pycharm": {
209 | "metadata": false
210 | }
211 | },
212 | "source": [
213 | "An interesting consequence of perspective projection is that parallel lines in the 3D world are no longer perceived as parallel on the 2D image\n",
214 | "plane. Neither are angles preserved. Further, it seems that parallel lines in an image will cross at some point, the so called\n",
215 | "vanishing point. With tracking all these vanishing points, we can fit a vanishing line through them: A line on which all vanishing\n",
216 | "points land. We observe two vanishing lines: one for horizontal and one for vertical parallel lines. \n"
217 | ]
218 | },
219 | {
220 | "cell_type": "markdown",
221 | "metadata": {
222 | "pycharm": {
223 | "metadata": false
224 | }
225 | },
226 | "source": [
227 | "\n",
228 | "*Figure 6: Vanishing Lines and Points. [source](http://rpg.ifi.uzh.ch/docs/teaching/2019/01_introduction.pdf)*\n",
229 | "\n",
230 | "We can mathematically proof that parallel vanishing lines will intersect at a vanishing point (xVP, yVP) in the camera frame. Note that this vanishing point must NOT be on the visible part of the image frame. \n",
231 | "Let's consider the perspective equations in camera metric coordinates. We know that x = f * (X/Z) and y = f * (Y/Z). This is given by the previously seen similarity triangle principles. \n",
232 | "\n",
233 | "We can now define two parallel lines in parametric equations. A line is described via a point, a direction and a direction-scalar that can be changed to reach any point in the system. To make two parallel lines, we choose different base points but the same directions. \n",
234 | "\n",
235 | "\n",
236 | "*Figure 7: Two parallel lines. [source](http://rpg.ifi.uzh.ch/docs/teaching/2019/01_introduction.pdf)*\n",
237 | "\n",
238 | "To proof that at infinity, the lines will cross at a specific point (xVP, yVP), we look at both x and y dimensions seperately and take the limes from s to infinity. \n",
239 | "First of all, the X/Z part becomes irrelevantly small, so it can be neglected. We are left with the term f * sl/sn, from which we can cancel out the *s*. We finally get a point xVP that is only dependent on the direction of the line. The same holds true for yVP. We have found the image coordinates of the vanishing point. \n",
240 | "\n",
241 | "\n",
242 | "*Figure 8: Taking the limes of the vanishing line. [source](http://rpg.ifi.uzh.ch/docs/teaching/2019/01_introduction.pdf)*"
243 | ]
244 | },
245 | {
246 | "cell_type": "code",
247 | "execution_count": null,
248 | "metadata": {},
249 | "outputs": [],
250 | "source": []
251 | }
252 | ],
253 | "metadata": {
254 | "kernelspec": {
255 | "display_name": "Python 3",
256 | "language": "python",
257 | "name": "python3"
258 | },
259 | "language_info": {
260 | "codemirror_mode": {
261 | "name": "ipython",
262 | "version": 3
263 | },
264 | "file_extension": ".py",
265 | "mimetype": "text/x-python",
266 | "name": "python",
267 | "nbconvert_exporter": "python",
268 | "pygments_lexer": "ipython3",
269 | "version": "3.7.2"
270 | },
271 | "stem_cell": {
272 | "cell_type": "raw",
273 | "metadata": {
274 | "pycharm": {
275 | "metadata": false
276 | }
277 | },
278 | "source": ""
279 | }
280 | },
281 | "nbformat": 4,
282 | "nbformat_minor": 1
283 | }
284 |
--------------------------------------------------------------------------------
/Chapter 4 - Camera Calibration.md:
--------------------------------------------------------------------------------
1 | # Chapter 4 - Camera Calibration
2 |
3 | This article discusses how one can derive the perspective of a camera by the given landmarks. Also, it explains how
4 | many of such landmarks are needed to be able to get the correct perspective and also explains the different methods
5 | for calibrated and uncalibrated cameras. Uncalibrated cameras are ones for which we don't know the accurate intrinsic
6 | parameters. We explain how camera calibration works, so how we can find the intrinsics and what aspects are important
7 | for this.
8 |
9 |
10 | ## Perspective from *n* Points (PnP Problem)
11 |
12 | The goal of Perspective from n Points algorithms is to find the pose of the camera in respect to the world reference
13 | frame. This means we want to find the six degrees of freedom describing the position and orientation of the camera.
14 | As input we have the landmarks in the world reference frame as well as their images on the the camera plane.
15 | In the case of a uncalibrated camera we additionally want to find out the camera's intrinsic parameters which we have
16 | discussed already in chapter >>>XY<<<.
17 |
18 | Let's now find out how many point we need to get a unique solution. First we look into the case of a calibrated camera.
19 |
20 | First for only one point for which we know the position in the world and the position on the image plane of the camera
21 | we have infinite possible solution. This is because the camera can be placed all around that point in the world
22 | with any distance from it.
23 |
24 | ![image for only one point and inf solutions]
25 |
26 | For two points we know the actual distance between the points in the world as well as for the ones on the image plane.
27 | Because of the fixed focal length of the camera we know the angle between the two points in the image plan and the
28 | camera. Therefore the camera can only be at places where the world points lie on the two lines connecting the camera point
29 | with the two image points. As a result we know the geometric figure describing all possible position for the
30 | camerapoints has to be rotationally symmetrical around the axis described by the line that intersects both world points.
31 | To find the exact geometrical figure we now inspect the figure that is rotated. The only figure that fulfills
32 | the condition that the angle of the lines connetcing the world points with the camera points through the image point on
33 | a plane is the circle. Therefore we have now found the correct geometrical figure in 3D that describes the possible
34 | location the camera can have when we have given 2 points. It is called "spindel torus".
35 | For a chitinous reference frame this results still in a infinite number of possible positions but at least we
36 | know that it is bounded.
37 |
38 | Let us now try it with three points. Again we draw lines from the points in the world reference frame through tier
39 | image on the camera plane. Dependent on where we place the camera these lines can intersect each other. In the case
40 | where all three lines intersect in one single point we have found a valid place for the camera point to be. To derive
41 | how many soultions there are and how to find them we take advantage of the law of cosine. In the previously described
42 | sotiution situation we hav three different triangles with their cornes at two of the worl-points and one at the camera
43 | center. Also for these triangles two edges intersect the cameraplane at the image-points.The law of cosine states
44 | that for each trinagle the distance between the two image points is equal to the sum of the squared distance both edges conneting the image
45 | points with the camera center substracing the twice the product of the times the cosine of the angle at the cameracenter.
46 |
47 |
48 |
49 |
50 |
51 |
52 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2019 Joel Barmettler
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/Lexicon.md:
--------------------------------------------------------------------------------
1 |
2 |
3 | **Lecture 2**
4 | - Camera obscura
5 | - Pinhole camera
6 | - Aperture / Aperture Size
7 | - Diffraction effects
8 | - Optical Center / Center of Projection
9 | - Lens / Converging Lens
10 | - Optical Axis
11 | - Focal point / Focal length / Focal plane
12 | - Thin lens equation
13 | - Blur circle
14 | - Perspective Effect / Perspective Projection
15 | - Ames Room
16 | - Vanishing points / Vanishing lines
17 | - Depth of Field
18 | - Field of View
19 | - Aperture effect
20 | - Bayer Grid
21 | - Rolling / Global Shutter
22 | - Principal Point
23 | - Pixel Coordinates / Image Plane Coordinates / World Coordinates
24 | - Homogeneous Coordinates
25 | - Calibratin Matrix / Matrix of Intrinsic Parameters
26 | - Matrix of Extrinsic Parameters
27 | - Projection Matrix
28 | - Perspective Projection Equation
29 | - Adimensional
30 | - Lens distortion
31 | - Radial distortion / Barrel distortion / Pincushion distortion
32 |
33 | **Lecture 3**
34 | - Pnp
35 | - P3P
36 | - Direct Linear Transform (DLT)
37 | - Omnidirectional cameras
38 | - 3D Landmarks
39 | - Dimensionality of Freedom (DoF)
40 | - Carnot's Theorem
41 | - Single Value Decomposition (SVD)
42 | - Degenerate Configurations
43 | - QR Factorization
44 | - Skew & Residuals
45 | - Homographies
46 | - Collinear
47 | - Choleski Decomposition
48 | - Translation Transformation
49 | - Rigi Transformation
50 | - Similarity Transformation
51 | - Affine Transformation
52 | - Projective Transformation
53 | - Catodioptric Cameras
54 | - Fisheye Camreas
55 | - Dioptric Cameras
56 | - Surface of revolution of a conic
57 |
58 | **Lecture 4**
59 | - Low-pass Filter / High-pass Filter
60 | - Image Noise (Salt & Pepper, Impulse, Gaussian)
61 | - Convolution
62 | - Kernel / Mask / Filter
63 | - Cross-correlation
64 | - Box Filter
65 | - Aliasing
66 | - Infinie support (Gaussian Filter)
67 | - Variance of a Filter
68 | - Boundary isue (zero padding, warp around, copy edge, reflect across edge)
69 | - Median Filter
70 | - Bilateral Filter
71 | - Prewitt Filter, Sobel filter
72 | - Image Gradient
73 | - Derivative Filter
74 | - Canny edge detection
75 | - Derivative of Gaussian filter
76 | - Laplacian of Gaussian
77 | -
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # PyVisualOdometry
2 | Python implementation of Visual Odometry algorithms from http://rpg.ifi.uzh.ch/
3 |
4 | # Chapter 1 - Overview
5 | @mhoegger
6 | [Lecture 1](http://rpg.ifi.uzh.ch/docs/teaching/2019/01_introduction.pdf) Slides 54 - 78
7 | - Definition of Visual Odometry
8 | - Differences between VO, VSLAM and SFM
9 | - Needed assumptions for VO
10 | - Illustrate building blocks
11 |
12 | # Chapter 2 - Optics
13 | @joelbarmettlerUZH
14 | [Lecture 2](http://rpg.ifi.uzh.ch/docs/teaching/2019/02_image_formation_1.pdf) Slides 1 - 48
15 | - What is a blur circle
16 | - Derive thin lense equation and perform the pinhole approximation
17 | - Define vanishing points and lines
18 | - Prove that parallel lines intersect at vanishing points
19 | - How to build an Ames room
20 | - Derive a relation between field of view and focal length
21 |
22 | # Chapter 3 - Camera Projection
23 | @joelbarmettlerUZH
24 | [Lecture 2](http://rpg.ifi.uzh.ch/docs/teaching/2019/02_image_formation_1.pdf) Slides 48 - 66
25 | - Perspective projection equation
26 | - lense distortion
27 | - World to camera projection
28 |
29 | # Chapter 4 - Camera Calibration
30 | @mhoegger
31 | [Lecture 3](http://rpg.ifi.uzh.ch/docs/teaching/2019/03_image_formation_2.pdf) Slides 1 - 64
32 | - Describe the general PnP problem and derive the behavior of its solutions
33 | - Explain the working principle of the P3P algorithm
34 | - Explain and derive the DLT & the minimum number of point correspondences it requires
35 | - Define central and non central omnidirectional cameras
36 | - What kind of mirrors ensure central projection
37 |
38 | # Chapter 5 - Image Filtering
39 | @joelbarmettlerUZH
40 | [Lecture 4](http://rpg.ifi.uzh.ch/docs/teaching/2019/04_filtering.pdf) Slides 1 - 63
41 | - Explain the differences between convolution and correlation.
42 | - Explain the differences between a box filter and a Gaussian filter.
43 | - Explain why should one increase the size of the kernel of a Gaussian filter if is
44 | large (i.e. close to the size of the filter kernel.
45 | - Explain when would we need a median & bilateral filter.
46 | - Explain how to handle boundary issues.
47 | - Explain the working principle of edge detection with a 1𝐷 signal.
48 | - Explain how noise does affect this procedure.
49 | - Explain the differential property of convolution.
50 | - Show how to compute the first derivative of an image intensity function along 𝑥
51 | and 𝑦?
52 | - Explain why the Laplacian of Gaussian operator is useful.
53 | - List the properties of smoothing and derivative filters.
54 | - Illustrate the Canny edge detection algorithm.
55 | - Explain what non-maxima suppression is and how it is implemented.
56 |
57 | # Chapter 6 - Point Feature Detection (Harris & Shi-Tomasi)
58 | @joelbarmettlerUZH
59 | [Lecture 5](http://rpg.ifi.uzh.ch/docs/teaching/2019/05_feature_detection_1.pdf) Slides 1 - 65
60 | - Explain what is template matching and how it is implemented?
61 | - Explain what are the limitations of template matching? Can you use it to
62 | recognize cars?
63 | - Illustrate the similarity metrics SSD, SAD, NCC, and Census transform?
64 | - What is the intuitive explanation behind SSD and NCC?
65 | - Explain what are good features to track? In particular, can you explain what are
66 | corners and blobs together with their pros and cons?
67 | - Explain the Harris corner detector? In particular:
68 | - - Use the Moravec definition of corner, edge and flat region.
69 | - - Show how to get the second moment matrix from the definition of SSD and first order
70 | approximation (show that this is a quadratic expression) and what is the intrinsic
71 | interpretation of the second moment matrix using an ellipse?
72 | - - What is the M matrix like for an edge, for a flat region, for an axis-aligned 90-degree
73 | corner and for a non-axis—aligned 90-degree corner?
74 | - - What do the eigenvalues of M reveal?
75 | - - Can you compare Harris detection with Shi-Tomasi detection?
76 | - - Can you explain whether the Harris detector is invariant to illumination or scale
77 | changes? Is it invariant to view point changes?
78 | - - What is the repeatability of the Harris detector after rescaling by a factor of 2?
79 |
80 | # Chapter 7 - Point Feature Description & Matching (FAST, SIFT, SURF)
81 | @joelbarmettlerUZH
82 | [Lecture 6](http://rpg.ifi.uzh.ch/docs/teaching/2019/06_feature_detection_2.pdf) Slides 1 - 79
83 | - How does automatic scale selection work?
84 | - What are the good and the bad properties that a function for automatic scale
85 | selection should have or not have?
86 | - How can we implement scale invariant detection efficiently? (show that we can
87 | do this by resampling the image vs rescaling the kernel).
88 | - What is a feature descriptor? (patch of intensity value vs histogram of oriented
89 | gradients). How do we match descriptors?
90 | - How is the keypoint detection done in SIFT and how does this differ from Harris?
91 | - How does SIFT achieve orientation invariance?
92 | - How is the SIFT descriptor built?
93 | - What is the repeatability of the SIFT detector after a rescaling of 2? And for a 50
94 | degrees viewpoint change?
95 | - Illustrate the 1st to 2nd closest ratio of SIFT detection: what’s the intuitive
96 | reasoning behind it? Where does the 0.8 factor come from?
97 |
98 | # Chapter 8 - Stereovision, Trinagulation, Feature Correspondance, Disparity Map
99 | @mhoegger
100 | [Lecture 7](http://rpg.ifi.uzh.ch/docs/teaching/2019/07_multiple_view_geometry_1.pdf) Slides 1 - 74
101 | - Can you relate Structure from Motion to 3D reconstruction? In what they differ?
102 | - Can you define disparity in both the simplified and the general case?
103 | - Can you provide a mathematical expression of depth as a function of the baseline, the disparity and the focal
104 | length?
105 | - Can you apply error propagation to derive an expression for depth uncertainty? How can we improve the
106 | uncertainty?
107 | - Can you analyze the effects of a large/small baseline?
108 | - What is the closest depth that a stereo camera can measure?
109 | - Are you able to show mathematically how to compute the intersection of two lines (linearly and non-linearly)?
110 | - What is the geometric interpretation of the linear and non-linear approaches and what error do they minimize?
111 | - Are you able to provide a definition of epipole, epipolar line and epipolar plane?
112 | - Are you able to draw the epipolar lines for two converging cameras, for a forward motion situation, and for a
113 | side-moving camera?
114 | - Are you able to define stereo rectification and to derive mathematically the rectifying homographies?
115 | - How is the disparity map computed?
116 | - How can one establish stereo correspondences with subpixel accuracy?
117 | - Describe one or more simple ways to reject outliers in stereo correspondences.
118 | - Is stereo vision the only way of estimating depth information? If not, are you able to list alternative options?
119 |
120 | # Chapter 9 - Structure from Motion
121 | @mhoegger
122 | [Lecture 8](http://rpg.ifi.uzh.ch/docs/teaching/2019/08_multiple_view_geometry_2.pdf) Slides 1 - 43
123 | - What's the minimum number of correspondences required for calibrated SFM and why?
124 | - Are you able to derive the epipolar constraint?
125 | - Are you able to define the essential matrix?
126 | - Are you able to derive the 8-point algorithm?
127 | - How many rotation-translation combinations can the essential matrix be decomposed into?
128 | - Are you able to provide a geometrical interpretation of the epipolar constraint?
129 | - Are you able to describe the relation between the essential and the fundamental matrix?
130 | - Why is it important to normalize the point coordinates in the 8-point algorithm?
131 | - Describe one or more possible ways to achieve this normalization.
132 | - Are you able to describe the normalized 8-point algorithm?
133 | - Are you able to provide quality metrics for the essential matrix estimation?
134 |
135 | # Chapter 10 - RANSAC & Bundle Adjustment
136 | @mhoegger
137 | [Lecture 8](http://rpg.ifi.uzh.ch/docs/teaching/2019/08_multiple_view_geometry_2.pdf) Slides 44 - 88
138 | [Lecture 9](http://rpg.ifi.uzh.ch/docs/teaching/2019/09_multiple_view_geometry_3.pdf) Slides 1 - 7
139 | - Why do we need RANSAC?
140 | - What is the theoretical maximum number of combinations to explore?
141 | - After how many iterations can RANSAC be stopped to guarantee a given success probability?
142 | - What is the trend of RANSAC vs. iterations, vs. the fraction of outliers, vs. the number of points
143 | to estimate the model?
144 | How do we apply RANSAC to the 8-point algorithm, DLT, P3P?
145 | - How can we reduce the number of RANSAC iterations for the SFM problem?
146 |
147 | # Chapter 11 - Visual Odometry / Visual SLAM
148 | @mhoegger
149 | [Lecture 9](http://rpg.ifi.uzh.ch/docs/teaching/2019/09_multiple_view_geometry_3.pdf) Slides 8 - 61
150 | [Lecture 10](http://rpg.ifi.uzh.ch/docs/teaching/2019/10_multiple_view_geometry_4.pdf) Slides 1 - 29
151 | - Are you able to define Bundle Adjustment (via mathematical expression and
152 | illustration)?
153 | - Are you able to describe hierarchical and sequential SFM for monocular VO?
154 | - What are keyframes? Why do we need them and how can we select them?
155 | - Are you able to define loop closure detection? Why do we need loops?
156 | - Are you able to provide a list of the most popular open source VO and VSLAM
157 | algorithms?
158 | - Are you able to describe the differences between feature-based methods and
159 | direct methods?
160 | - How do we benchmark VO/SLAM algorithms?
161 | - Along which axes can we evaluate them?
162 | - Benchmarking accuracy: Can we use the end pose error? What are ATE and RTE?
163 | - How can we quantify Efficiency? And Robustness?
164 |
165 | # Chapter 12 - Feature Trackings
166 | @joelbarmettlerUZH
167 | [Lecture 11](http://rpg.ifi.uzh.ch/docs/teaching/2019/11_tracking.pdf) Slides 1 - 76
168 | - Are you able to illustrate tracking with block matching?
169 | - Are you able to explain the underlying assumptions behind differential methods,
170 | derive their mathematical expression and the meaning of the M matrix?
171 | - When is this matrix invertible and when not?
172 | What is the aperture problem and how can we overcome it?
173 | - What is optical flow?
174 | - Can you list pros and cons of block-based vs. differential methods for tracking?
175 | - Are you able to describe the working principle of KLT?
176 | - Are you able to derive the main mathematical expression for KLT?
177 | - What is the Hessian matrix and for which warping function does it coincide to
178 | that used for point tracking?
179 | - Can you list Lukas-Kanade failure cases and how to overcome them?
180 | - How does one get the initial guess?
181 | - Can you illustrate the coarse-to-fine Lucas-Kanade implementation?
182 | - Can you illustrate alternative tracking procedures using point features?
183 |
184 | # Chapter 13 - Dense 3D Reconstruction
185 | @joelbarmettlerUZH
186 | [Lecture 12a](http://rpg.ifi.uzh.ch/docs/teaching/2019/12a_3D_reconstruction.pdf) Slides 1 - 47
187 | - Are you able to describe the multi-view stereo working principle?
188 | (aggregated photometric error)
189 | - What are the differences in the behavior of the aggregated photometric
190 | error for corners, flat regions, and edges?
191 | What is the disparity space image (DSI) and how is it built in practice?
192 | - How do we extract the depth from the DSI?
193 | - How do we enforce smoothness (regularization) and how do we
194 | incorporate depth discontinuities (mathematical expressions)?
195 | - What happens if we increase lambda (the regularization term)? What if
196 | lambda is 0? And if lambda is too big?
197 | - What is the optimal baseline for multi-view stereo?
198 | - What are the advantages of GPUs?
199 |
200 | # Chapter 14 - Place Recognition
201 | @mhoegger
202 | [Lecture 12b](http://rpg.ifi.uzh.ch/docs/teaching/2019/12b_recognition.pdf) Slides 1 - 51
203 | - What is an inverted file index?
204 | - What is a visual word?
205 | - How does K-means clustering work?
206 | - Why do we need hierarchical clustering?
207 | - Explain and illustrate image retrieval using Bag of Words.
208 | - Discussion on place recognition: what are the open challenges and what
209 | solutions have been proposed?
210 |
211 | # Chapter 15 - Deep Learning
212 | @None
213 | [Lecture 12c](http://rpg.ifi.uzh.ch/docs/teaching/2019/12c_Deep_Learning_Tutorial.pdf) Slides 1 - 71
214 |
215 | # Chapter 16 - Visual inertial fusion
216 | @mhoegger
217 | [Lecture 13](http://rpg.ifi.uzh.ch/docs/teaching/2019/13_visual_inertial_fusion.pdf) Slides 1 - 50
218 | - Why is it recommended to use an IMU for Visual Odometry?
219 | - Why not just an IMU?
220 | - How does a MEMS IMU work?
221 | - What is the drift of an industrial IMU?
222 | - What is the IMU measurement model?
223 | - What causes the bias in an IMU?
224 | - How do we model the bias?
225 | - How do we integrate the acceleration to get the position formula?
226 | - What is the definition of loosely coupled and tightly coupled visual inertial
227 | fusions?
228 | - How can we use non-linear optimization-based approaches to solve for visual
229 | inertial fusion?
230 |
231 | # Chapter 17 - Event based vision
232 | @joelbarmettlerUZH
233 | [Lecture 14](http://rpg.ifi.uzh.ch/docs/teaching/2019/14_event_based_vision.pdf) Slides 1 - 72
234 | - What is a DVS and how does it work?
235 | - What are its pros and cons vs. standard cameras?
236 | - Can we apply standard camera calibration techniques?
237 | - How can we compute optical flow with a DVS?
238 | - Could you intuitively explain why we can reconstruct the intensity?
239 | - What is the generative model of a DVS and how to derive it?
240 | - What is a DAVIS sensor?
241 | - What is the focus maximization framework and how does it work? What is its
242 | advantage compared with the generative model?
243 | - How can we get color events?
244 |
245 | By the way, I am an [AI Engineer from Zurich](https://joelbarmettler.xyz/) and do [AI research](https://joelbarmettler.xyz/research/), [AI Keynote Speeches](https://joelbarmettler.xyz/auftritte/) and [AI Webinars](https://joelbarmettler.xyz/auftritte/webinar-2024-rewind-2025-ausblick/) in Zurich, Switzerland! I also have an [AI Podcast in swiss german](https://joelbarmettler.xyz/podcast/)!
246 |
--------------------------------------------------------------------------------
/img/chapter_1/feature_detection.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_1/feature_detection.png
--------------------------------------------------------------------------------
/img/chapter_1/feature_matching.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_1/feature_matching.png
--------------------------------------------------------------------------------
/img/chapter_1/input.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_1/input.png
--------------------------------------------------------------------------------
/img/chapter_1/motion_estimation.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_1/motion_estimation.png
--------------------------------------------------------------------------------
/img/chapter_1/sfm_vslam_vo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_1/sfm_vslam_vo.png
--------------------------------------------------------------------------------
/img/chapter_10/10_hubner_and_tukey.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_10/10_hubner_and_tukey.png
--------------------------------------------------------------------------------
/img/chapter_10/1_matching_example.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_10/1_matching_example.png
--------------------------------------------------------------------------------
/img/chapter_10/2_outliers_on_motion_estimation.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_10/2_outliers_on_motion_estimation.png
--------------------------------------------------------------------------------
/img/chapter_10/3_random_sampling.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_10/3_random_sampling.png
--------------------------------------------------------------------------------
/img/chapter_10/4_repeating_process.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_10/4_repeating_process.png
--------------------------------------------------------------------------------
/img/chapter_10/5_outlier_ratio_vs_iterations.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_10/5_outlier_ratio_vs_iterations.png
--------------------------------------------------------------------------------
/img/chapter_10/6_planar_motion.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_10/6_planar_motion.png
--------------------------------------------------------------------------------
/img/chapter_10/7_planar_motion_epipolar.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_10/7_planar_motion_epipolar.png
--------------------------------------------------------------------------------
/img/chapter_10/7_planar_motion_epipolar2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_10/7_planar_motion_epipolar2.png
--------------------------------------------------------------------------------
/img/chapter_10/8_circular_motion.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_10/8_circular_motion.png
--------------------------------------------------------------------------------
/img/chapter_10/8_circular_motion2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_10/8_circular_motion2.png
--------------------------------------------------------------------------------
/img/chapter_10/9_multi_view_ba.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_10/9_multi_view_ba.png
--------------------------------------------------------------------------------
/img/chapter_11/10_adjacent_frames.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_11/10_adjacent_frames.png
--------------------------------------------------------------------------------
/img/chapter_11/11_non_adjacent_frames.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_11/11_non_adjacent_frames.png
--------------------------------------------------------------------------------
/img/chapter_11/12_bundle_adjustment.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_11/12_bundle_adjustment.png
--------------------------------------------------------------------------------
/img/chapter_11/13_loop_closing.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_11/13_loop_closing.png
--------------------------------------------------------------------------------
/img/chapter_11/14_feature_base.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_11/14_feature_base.png
--------------------------------------------------------------------------------
/img/chapter_11/15_direct.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_11/15_direct.png
--------------------------------------------------------------------------------
/img/chapter_11/16_sparse_to_dense.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_11/16_sparse_to_dense.png
--------------------------------------------------------------------------------
/img/chapter_11/17_distance_between_frames.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_11/17_distance_between_frames.png
--------------------------------------------------------------------------------
/img/chapter_11/18_algo_comparison.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_11/18_algo_comparison.png
--------------------------------------------------------------------------------
/img/chapter_11/19_metrics.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_11/19_metrics.png
--------------------------------------------------------------------------------
/img/chapter_11/1_hierarchical_sfm.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_11/1_hierarchical_sfm.png
--------------------------------------------------------------------------------
/img/chapter_11/20_ATE.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_11/20_ATE.png
--------------------------------------------------------------------------------
/img/chapter_11/2_vo_flow.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_11/2_vo_flow.png
--------------------------------------------------------------------------------
/img/chapter_11/3_2d_to_2d.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_11/3_2d_to_2d.png
--------------------------------------------------------------------------------
/img/chapter_11/4_3d_to_2d.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_11/4_3d_to_2d.png
--------------------------------------------------------------------------------
/img/chapter_11/5_3d_to_3d.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_11/5_3d_to_3d.png
--------------------------------------------------------------------------------
/img/chapter_11/6_bootstrapping.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_11/6_bootstrapping.png
--------------------------------------------------------------------------------
/img/chapter_11/7_skipping_keyframes.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_11/7_skipping_keyframes.png
--------------------------------------------------------------------------------
/img/chapter_11/8_localisation.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_11/8_localisation.png
--------------------------------------------------------------------------------
/img/chapter_11/9_mapping.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_11/9_mapping.png
--------------------------------------------------------------------------------
/img/chapter_12/aperture_problem.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_12/aperture_problem.png
--------------------------------------------------------------------------------
/img/chapter_12/delta_p_hessian_matrix.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_12/delta_p_hessian_matrix.png
--------------------------------------------------------------------------------
/img/chapter_12/derivation_of_lukas_kanade.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_12/derivation_of_lukas_kanade.png
--------------------------------------------------------------------------------
/img/chapter_12/gradiant_partial_derivatives.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_12/gradiant_partial_derivatives.png
--------------------------------------------------------------------------------
/img/chapter_12/img_1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_12/img_1.jpg
--------------------------------------------------------------------------------
/img/chapter_12/influence_of_determinant_on_feature_quality.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_12/influence_of_determinant_on_feature_quality.png
--------------------------------------------------------------------------------
/img/chapter_12/jacobian.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_12/jacobian.png
--------------------------------------------------------------------------------
/img/chapter_12/jacobians_of_transformations.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_12/jacobians_of_transformations.png
--------------------------------------------------------------------------------
/img/chapter_12/lucas-kanade-workflow.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_12/lucas-kanade-workflow.png
--------------------------------------------------------------------------------
/img/chapter_12/matrix_equation_for_min_ssd.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_12/matrix_equation_for_min_ssd.png
--------------------------------------------------------------------------------
/img/chapter_12/motion_vector_ssd.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_12/motion_vector_ssd.png
--------------------------------------------------------------------------------
/img/chapter_12/optical_flow.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_12/optical_flow.png
--------------------------------------------------------------------------------
/img/chapter_12/partial_derivatives_for_min_ssd.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_12/partial_derivatives_for_min_ssd.png
--------------------------------------------------------------------------------
/img/chapter_12/point_tracking_example.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_12/point_tracking_example.png
--------------------------------------------------------------------------------
/img/chapter_12/sift_image_feature_tracking.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_12/sift_image_feature_tracking.png
--------------------------------------------------------------------------------
/img/chapter_12/template_tracking.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_12/template_tracking.png
--------------------------------------------------------------------------------
/img/chapter_12/template_warping.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_12/template_warping.png
--------------------------------------------------------------------------------
/img/chapter_12/transformations_table.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_12/transformations_table.png
--------------------------------------------------------------------------------
/img/chapter_13/3D_reconstruction_example.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_13/3D_reconstruction_example.png
--------------------------------------------------------------------------------
/img/chapter_13/aggregated_photometric_error.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_13/aggregated_photometric_error.png
--------------------------------------------------------------------------------
/img/chapter_13/baseline_depth_estimation.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_13/baseline_depth_estimation.png
--------------------------------------------------------------------------------
/img/chapter_13/calculate_entries_of_disparity_space_image.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_13/calculate_entries_of_disparity_space_image.png
--------------------------------------------------------------------------------
/img/chapter_13/depth_calculation_function.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_13/depth_calculation_function.png
--------------------------------------------------------------------------------
/img/chapter_13/depth_estimation_for_different_features.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_13/depth_estimation_for_different_features.png
--------------------------------------------------------------------------------
/img/chapter_13/increasing_lambda.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_13/increasing_lambda.png
--------------------------------------------------------------------------------
/img/chapter_13/influence_of_patch_size_on_depth_map.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_13/influence_of_patch_size_on_depth_map.png
--------------------------------------------------------------------------------
/img/chapter_13/regularization_relative_to_gradient.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_13/regularization_relative_to_gradient.png
--------------------------------------------------------------------------------
/img/chapter_13/regularization_term.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_13/regularization_term.png
--------------------------------------------------------------------------------
/img/chapter_14/1_image_query.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_14/1_image_query.png
--------------------------------------------------------------------------------
/img/chapter_14/2_descriptor_space.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_14/2_descriptor_space.png
--------------------------------------------------------------------------------
/img/chapter_14/3_clustering.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_14/3_clustering.png
--------------------------------------------------------------------------------
/img/chapter_14/4_summary.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_14/4_summary.png
--------------------------------------------------------------------------------
/img/chapter_14/5_hierarchical_clustering.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_14/5_hierarchical_clustering.png
--------------------------------------------------------------------------------
/img/chapter_14/6_more_words_better.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_14/6_more_words_better.png
--------------------------------------------------------------------------------
/img/chapter_14/7_branchfactor.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_14/7_branchfactor.png
--------------------------------------------------------------------------------
/img/chapter_16/Gyroscope.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_16/Gyroscope.png
--------------------------------------------------------------------------------
/img/chapter_16/IMU_pre_iteration.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_16/IMU_pre_iteration.png
--------------------------------------------------------------------------------
/img/chapter_16/acceleration_measurement.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_16/acceleration_measurement.png
--------------------------------------------------------------------------------
/img/chapter_16/accelorometer.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_16/accelorometer.png
--------------------------------------------------------------------------------
/img/chapter_16/angular_velocity_measurement.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_16/angular_velocity_measurement.png
--------------------------------------------------------------------------------
/img/chapter_16/closed_form_solution_1D.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_16/closed_form_solution_1D.png
--------------------------------------------------------------------------------
/img/chapter_16/imu_camera_calibration.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_16/imu_camera_calibration.png
--------------------------------------------------------------------------------
/img/chapter_16/imu_cost_function.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_16/imu_cost_function.png
--------------------------------------------------------------------------------
/img/chapter_16/imu_mode_integration.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_16/imu_mode_integration.png
--------------------------------------------------------------------------------
/img/chapter_16/interial_measurement_unit.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_16/interial_measurement_unit.png
--------------------------------------------------------------------------------
/img/chapter_16/loosely_coupled_approach.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_16/loosely_coupled_approach.png
--------------------------------------------------------------------------------
/img/chapter_16/matrix_A.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_16/matrix_A.png
--------------------------------------------------------------------------------
/img/chapter_16/smoothing_formula.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_16/smoothing_formula.png
--------------------------------------------------------------------------------
/img/chapter_16/smoothing_methods.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_16/smoothing_methods.png
--------------------------------------------------------------------------------
/img/chapter_16/tightly_coupled_approach.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_16/tightly_coupled_approach.png
--------------------------------------------------------------------------------
/img/chapter_17/aggregated_event_image.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_17/aggregated_event_image.png
--------------------------------------------------------------------------------
/img/chapter_17/cameras_filming_rotating_plate.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_17/cameras_filming_rotating_plate.png
--------------------------------------------------------------------------------
/img/chapter_17/difference_in_sampling.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_17/difference_in_sampling.png
--------------------------------------------------------------------------------
/img/chapter_17/event_based_camera_picture.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_17/event_based_camera_picture.png
--------------------------------------------------------------------------------
/img/chapter_17/event_time_space_room_with_voxels.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_17/event_time_space_room_with_voxels.png
--------------------------------------------------------------------------------
/img/chapter_17/focus_maximization_framework.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_17/focus_maximization_framework.png
--------------------------------------------------------------------------------
/img/chapter_17/gradient_and_movement.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_17/gradient_and_movement.png
--------------------------------------------------------------------------------
/img/chapter_17/high_speed_camera_comparison.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_17/high_speed_camera_comparison.png
--------------------------------------------------------------------------------
/img/chapter_17/moving_edge.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_17/moving_edge.png
--------------------------------------------------------------------------------
/img/chapter_17/sharpen_image_using_events.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_17/sharpen_image_using_events.png
--------------------------------------------------------------------------------
/img/chapter_2/1_pinhole_camera.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_2/1_pinhole_camera.png
--------------------------------------------------------------------------------
/img/chapter_2/2_thin_lens_equation.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_2/2_thin_lens_equation.png
--------------------------------------------------------------------------------
/img/chapter_2/3_blur_circle.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_2/3_blur_circle.png
--------------------------------------------------------------------------------
/img/chapter_2/4_pinhole_approximation.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_2/4_pinhole_approximation.png
--------------------------------------------------------------------------------
/img/chapter_2/5_ration_fow_focal_length.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_2/5_ration_fow_focal_length.png
--------------------------------------------------------------------------------
/img/chapter_2/6_vanishing_points_and_lines.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_2/6_vanishing_points_and_lines.png
--------------------------------------------------------------------------------
/img/chapter_2/lense.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_2/lense.png
--------------------------------------------------------------------------------
/img/chapter_2/limes_of_vanishing_lines.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_2/limes_of_vanishing_lines.png
--------------------------------------------------------------------------------
/img/chapter_2/parallel_lines.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_2/parallel_lines.png
--------------------------------------------------------------------------------
/img/chapter_3/1_world_and_pixel_coordinates.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_3/1_world_and_pixel_coordinates.png
--------------------------------------------------------------------------------
/img/chapter_3/2_world_to_camera_coordinates.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_3/2_world_to_camera_coordinates.png
--------------------------------------------------------------------------------
/img/chapter_3/3_camera_to_frame_coordinates.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_3/3_camera_to_frame_coordinates.png
--------------------------------------------------------------------------------
/img/chapter_3/4_camera_to_pixel_coordinates.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_3/4_camera_to_pixel_coordinates.png
--------------------------------------------------------------------------------
/img/chapter_3/5_world_to_pixel_coordinates.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_3/5_world_to_pixel_coordinates.png
--------------------------------------------------------------------------------
/img/chapter_3/6_normalized_image_coordinates.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_3/6_normalized_image_coordinates.png
--------------------------------------------------------------------------------
/img/chapter_3/distortion.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_3/distortion.png
--------------------------------------------------------------------------------
/img/chapter_3/img_0001.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_3/img_0001.jpg
--------------------------------------------------------------------------------
/img/chapter_3/img_0001_dist.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_3/img_0001_dist.jpg
--------------------------------------------------------------------------------
/img/chapter_3/perspective.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_3/perspective.png
--------------------------------------------------------------------------------
/img/chapter_4/0_P1P.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_4/0_P1P.png
--------------------------------------------------------------------------------
/img/chapter_4/10_planar_perspective_part2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_4/10_planar_perspective_part2.png
--------------------------------------------------------------------------------
/img/chapter_4/11_planar_matrix_equation.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_4/11_planar_matrix_equation.png
--------------------------------------------------------------------------------
/img/chapter_4/12_planar_matrix_equation_part2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_4/12_planar_matrix_equation_part2.png
--------------------------------------------------------------------------------
/img/chapter_4/13_planar_matrix_equation_part3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_4/13_planar_matrix_equation_part3.png
--------------------------------------------------------------------------------
/img/chapter_4/14_types_of_2d_transformations.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_4/14_types_of_2d_transformations.png
--------------------------------------------------------------------------------
/img/chapter_4/15_omnidir_camera.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_4/15_omnidir_camera.png
--------------------------------------------------------------------------------
/img/chapter_4/16_noncentral_catadipotric.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_4/16_noncentral_catadipotric.png
--------------------------------------------------------------------------------
/img/chapter_4/17_central_catadipotric.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_4/17_central_catadipotric.png
--------------------------------------------------------------------------------
/img/chapter_4/18_equivalence_omnidir_perspective.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_4/18_equivalence_omnidir_perspective.png
--------------------------------------------------------------------------------
/img/chapter_4/1_projection_equation.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_4/1_projection_equation.png
--------------------------------------------------------------------------------
/img/chapter_4/2_projection_equation_part2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_4/2_projection_equation_part2.png
--------------------------------------------------------------------------------
/img/chapter_4/3_homogeneous_to_pixel.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_4/3_homogeneous_to_pixel.png
--------------------------------------------------------------------------------
/img/chapter_4/4_matrix_equation.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_4/4_matrix_equation.png
--------------------------------------------------------------------------------
/img/chapter_4/5_matrix_equation_part2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_4/5_matrix_equation_part2.png
--------------------------------------------------------------------------------
/img/chapter_4/6_matrix_equation_part3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_4/6_matrix_equation_part3.png
--------------------------------------------------------------------------------
/img/chapter_4/7_M_to_K_part1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_4/7_M_to_K_part1.png
--------------------------------------------------------------------------------
/img/chapter_4/8_M_to_K_part2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_4/8_M_to_K_part2.png
--------------------------------------------------------------------------------
/img/chapter_4/9_planar_perspective.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_4/9_planar_perspective.png
--------------------------------------------------------------------------------
/img/chapter_4/P3P.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_4/P3P.png
--------------------------------------------------------------------------------
/img/chapter_4/Unified_Omnidirectional_Camera_Model.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_4/Unified_Omnidirectional_Camera_Model.png
--------------------------------------------------------------------------------
/img/chapter_4/angle_from_f.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_4/angle_from_f.png
--------------------------------------------------------------------------------
/img/chapter_4/ani.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_4/ani.gif
--------------------------------------------------------------------------------
/img/chapter_4/camera.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_4/camera.gif
--------------------------------------------------------------------------------
/img/chapter_4/detected_corners_vector.pkl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_4/detected_corners_vector.pkl
--------------------------------------------------------------------------------
/img/chapter_4/img_0001.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_4/img_0001.jpg
--------------------------------------------------------------------------------
/img/chapter_5/10_image_first_derivative_demonstration.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_5/10_image_first_derivative_demonstration.png
--------------------------------------------------------------------------------
/img/chapter_5/11_partial_derivative_filters.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_5/11_partial_derivative_filters.png
--------------------------------------------------------------------------------
/img/chapter_5/12_prewitt_sobel_filter.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_5/12_prewitt_sobel_filter.png
--------------------------------------------------------------------------------
/img/chapter_5/13_individual_processing_steps_for_edge_detection.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_5/13_individual_processing_steps_for_edge_detection.png
--------------------------------------------------------------------------------
/img/chapter_5/14_gaussian_smoothing_and_derivative_filter.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_5/14_gaussian_smoothing_and_derivative_filter.png
--------------------------------------------------------------------------------
/img/chapter_5/15_difference_of_gaussians_filter.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_5/15_difference_of_gaussians_filter.png
--------------------------------------------------------------------------------
/img/chapter_5/16_canny_edge_detection.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_5/16_canny_edge_detection.png
--------------------------------------------------------------------------------
/img/chapter_5/17_gaussian_filter_comparison.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_5/17_gaussian_filter_comparison.png
--------------------------------------------------------------------------------
/img/chapter_5/18_laplacian_of_gaussian.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_5/18_laplacian_of_gaussian.png
--------------------------------------------------------------------------------
/img/chapter_5/1_different_noise_types.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_5/1_different_noise_types.png
--------------------------------------------------------------------------------
/img/chapter_5/2_smoothed_signal.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_5/2_smoothed_signal.png
--------------------------------------------------------------------------------
/img/chapter_5/3_convolution_vs_cross-correlation.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_5/3_convolution_vs_cross-correlation.png
--------------------------------------------------------------------------------
/img/chapter_5/4_before_filtering_image_with_box_filter.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_5/4_before_filtering_image_with_box_filter.png
--------------------------------------------------------------------------------
/img/chapter_5/5_after_filtering_image_with_box_filter.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_5/5_after_filtering_image_with_box_filter.png
--------------------------------------------------------------------------------
/img/chapter_5/6_gaussian_filter.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_5/6_gaussian_filter.png
--------------------------------------------------------------------------------
/img/chapter_5/7_gaussian_filter_comparison.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_5/7_gaussian_filter_comparison.png
--------------------------------------------------------------------------------
/img/chapter_5/8_median_filtered_image.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_5/8_median_filtered_image.png
--------------------------------------------------------------------------------
/img/chapter_5/9_billateral_filter_demonstration.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_5/9_billateral_filter_demonstration.png
--------------------------------------------------------------------------------
/img/chapter_6/census_transform.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_6/census_transform.png
--------------------------------------------------------------------------------
/img/chapter_6/cross_correlation.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_6/cross_correlation.png
--------------------------------------------------------------------------------
/img/chapter_6/elipses.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_6/elipses.png
--------------------------------------------------------------------------------
/img/chapter_6/harris_1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_6/harris_1.jpg
--------------------------------------------------------------------------------
/img/chapter_6/harris_2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_6/harris_2.jpg
--------------------------------------------------------------------------------
/img/chapter_6/harris_corner_detector_eigenvalues.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_6/harris_corner_detector_eigenvalues.png
--------------------------------------------------------------------------------
/img/chapter_6/harris_corner_detector_eigenvector.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_6/harris_corner_detector_eigenvector.png
--------------------------------------------------------------------------------
/img/chapter_6/harris_corner_detector_matrix.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_6/harris_corner_detector_matrix.png
--------------------------------------------------------------------------------
/img/chapter_6/harris_corner_detector_matrix_decomposition.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_6/harris_corner_detector_matrix_decomposition.png
--------------------------------------------------------------------------------
/img/chapter_6/harris_vs_shitomasi.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_6/harris_vs_shitomasi.png
--------------------------------------------------------------------------------
/img/chapter_6/harris_workflow.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_6/harris_workflow.png
--------------------------------------------------------------------------------
/img/chapter_6/moravec_corner_detector.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_6/moravec_corner_detector.png
--------------------------------------------------------------------------------
/img/chapter_6/panorama_stitching.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_6/panorama_stitching.png
--------------------------------------------------------------------------------
/img/chapter_6/ssd_harris_corner_detector.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_6/ssd_harris_corner_detector.png
--------------------------------------------------------------------------------
/img/chapter_6/ssd_moravec_corner_detector.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_6/ssd_moravec_corner_detector.png
--------------------------------------------------------------------------------
/img/chapter_6/sum_of_absolute_differences.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_6/sum_of_absolute_differences.png
--------------------------------------------------------------------------------
/img/chapter_6/sum_of_squared_differences.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_6/sum_of_squared_differences.png
--------------------------------------------------------------------------------
/img/chapter_6/template_matching.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_6/template_matching.png
--------------------------------------------------------------------------------
/img/chapter_6/zero_mean_similarities.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_6/zero_mean_similarities.png
--------------------------------------------------------------------------------
/img/chapter_7/affine_warping.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_7/affine_warping.png
--------------------------------------------------------------------------------
/img/chapter_7/automatic_scale_selection.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_7/automatic_scale_selection.png
--------------------------------------------------------------------------------
/img/chapter_7/detector_descriptor_overvie_table.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_7/detector_descriptor_overvie_table.png
--------------------------------------------------------------------------------
/img/chapter_7/difference_of_gaussians_pyramid.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_7/difference_of_gaussians_pyramid.png
--------------------------------------------------------------------------------
/img/chapter_7/harris_1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_7/harris_1.jpg
--------------------------------------------------------------------------------
/img/chapter_7/harris_2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_7/harris_2.jpg
--------------------------------------------------------------------------------
/img/chapter_7/histogram_of_oriented_gradient.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_7/histogram_of_oriented_gradient.png
--------------------------------------------------------------------------------
/img/chapter_7/img_1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_7/img_1.jpg
--------------------------------------------------------------------------------
/img/chapter_7/img_2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_7/img_2.jpg
--------------------------------------------------------------------------------
/img/chapter_7/laplacian_of_gaussian.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_7/laplacian_of_gaussian.png
--------------------------------------------------------------------------------
/img/chapter_7/roto_translation_warping.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_7/roto_translation_warping.png
--------------------------------------------------------------------------------
/img/chapter_7/scale_change.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_7/scale_change.png
--------------------------------------------------------------------------------
/img/chapter_7/scale_invariant_feature_transform.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_7/scale_invariant_feature_transform.png
--------------------------------------------------------------------------------
/img/chapter_7/sift_affine_illumination_changes.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_7/sift_affine_illumination_changes.png
--------------------------------------------------------------------------------
/img/chapter_7/sift_detector_octaves.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_7/sift_detector_octaves.png
--------------------------------------------------------------------------------
/img/chapter_7/sift_space_scale_detector.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_7/sift_space_scale_detector.png
--------------------------------------------------------------------------------
/img/chapter_8/10_reprojection_error.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/10_reprojection_error.png
--------------------------------------------------------------------------------
/img/chapter_8/11_epipolar_line.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/11_epipolar_line.png
--------------------------------------------------------------------------------
/img/chapter_8/12_epipolar_plane.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/12_epipolar_plane.png
--------------------------------------------------------------------------------
/img/chapter_8/13_epipolar_examples.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/13_epipolar_examples.png
--------------------------------------------------------------------------------
/img/chapter_8/14_stereo_rectification.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/14_stereo_rectification.png
--------------------------------------------------------------------------------
/img/chapter_8/15_projection_equation.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/15_projection_equation.png
--------------------------------------------------------------------------------
/img/chapter_8/15_projection_equation_left_and_right.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/15_projection_equation_left_and_right.png
--------------------------------------------------------------------------------
/img/chapter_8/16_new_cameras.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/16_new_cameras.png
--------------------------------------------------------------------------------
/img/chapter_8/17_homography.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/17_homography.png
--------------------------------------------------------------------------------
/img/chapter_8/18_rectification_example.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/18_rectification_example.png
--------------------------------------------------------------------------------
/img/chapter_8/19_correspondence_matching.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/19_correspondence_matching.png
--------------------------------------------------------------------------------
/img/chapter_8/1_projection_and_stereo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/1_projection_and_stereo.png
--------------------------------------------------------------------------------
/img/chapter_8/2_stereogram.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/2_stereogram.png
--------------------------------------------------------------------------------
/img/chapter_8/3_stereo_cases.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/3_stereo_cases.png
--------------------------------------------------------------------------------
/img/chapter_8/4_stereo_vision_simple.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/4_stereo_vision_simple.png
--------------------------------------------------------------------------------
/img/chapter_8/5_large_and_small_baseline.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/5_large_and_small_baseline.png
--------------------------------------------------------------------------------
/img/chapter_8/6_linear_approximation.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/6_linear_approximation.png
--------------------------------------------------------------------------------
/img/chapter_8/7_skew_symmetric_matrix.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/7_skew_symmetric_matrix.png
--------------------------------------------------------------------------------
/img/chapter_8/8_triangulation_equation_1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/8_triangulation_equation_1.png
--------------------------------------------------------------------------------
/img/chapter_8/8_triangulation_equation_2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/8_triangulation_equation_2.png
--------------------------------------------------------------------------------
/img/chapter_8/9_shortest_segment.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/9_shortest_segment.png
--------------------------------------------------------------------------------
/img/chapter_8/data/K.txt:
--------------------------------------------------------------------------------
1 | 7.188560000000e+02 0 6.071928000000e+02
2 | 0 7.188560000000e+02 1.852157000000e+02
3 | 0 0 1
4 |
--------------------------------------------------------------------------------
/img/chapter_8/data/left/000000.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/left/000000.png
--------------------------------------------------------------------------------
/img/chapter_8/data/left/000001.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/left/000001.png
--------------------------------------------------------------------------------
/img/chapter_8/data/left/000002.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/left/000002.png
--------------------------------------------------------------------------------
/img/chapter_8/data/left/000003.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/left/000003.png
--------------------------------------------------------------------------------
/img/chapter_8/data/left/000004.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/left/000004.png
--------------------------------------------------------------------------------
/img/chapter_8/data/left/000005.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/left/000005.png
--------------------------------------------------------------------------------
/img/chapter_8/data/left/000006.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/left/000006.png
--------------------------------------------------------------------------------
/img/chapter_8/data/left/000007.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/left/000007.png
--------------------------------------------------------------------------------
/img/chapter_8/data/left/000008.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/left/000008.png
--------------------------------------------------------------------------------
/img/chapter_8/data/left/000009.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/left/000009.png
--------------------------------------------------------------------------------
/img/chapter_8/data/left/000010.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/left/000010.png
--------------------------------------------------------------------------------
/img/chapter_8/data/left/000011.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/left/000011.png
--------------------------------------------------------------------------------
/img/chapter_8/data/left/000012.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/left/000012.png
--------------------------------------------------------------------------------
/img/chapter_8/data/left/000013.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/left/000013.png
--------------------------------------------------------------------------------
/img/chapter_8/data/left/000014.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/left/000014.png
--------------------------------------------------------------------------------
/img/chapter_8/data/left/000015.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/left/000015.png
--------------------------------------------------------------------------------
/img/chapter_8/data/left/000016.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/left/000016.png
--------------------------------------------------------------------------------
/img/chapter_8/data/left/000017.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/left/000017.png
--------------------------------------------------------------------------------
/img/chapter_8/data/left/000018.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/left/000018.png
--------------------------------------------------------------------------------
/img/chapter_8/data/left/000019.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/left/000019.png
--------------------------------------------------------------------------------
/img/chapter_8/data/left/000020.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/left/000020.png
--------------------------------------------------------------------------------
/img/chapter_8/data/left/000021.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/left/000021.png
--------------------------------------------------------------------------------
/img/chapter_8/data/left/000022.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/left/000022.png
--------------------------------------------------------------------------------
/img/chapter_8/data/left/000023.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/left/000023.png
--------------------------------------------------------------------------------
/img/chapter_8/data/left/000024.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/left/000024.png
--------------------------------------------------------------------------------
/img/chapter_8/data/left/000025.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/left/000025.png
--------------------------------------------------------------------------------
/img/chapter_8/data/left/000026.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/left/000026.png
--------------------------------------------------------------------------------
/img/chapter_8/data/left/000027.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/left/000027.png
--------------------------------------------------------------------------------
/img/chapter_8/data/left/000028.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/left/000028.png
--------------------------------------------------------------------------------
/img/chapter_8/data/left/000029.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/left/000029.png
--------------------------------------------------------------------------------
/img/chapter_8/data/left/000030.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/left/000030.png
--------------------------------------------------------------------------------
/img/chapter_8/data/left/000031.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/left/000031.png
--------------------------------------------------------------------------------
/img/chapter_8/data/left/000032.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/left/000032.png
--------------------------------------------------------------------------------
/img/chapter_8/data/left/000033.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/left/000033.png
--------------------------------------------------------------------------------
/img/chapter_8/data/left/000034.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/left/000034.png
--------------------------------------------------------------------------------
/img/chapter_8/data/left/000035.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/left/000035.png
--------------------------------------------------------------------------------
/img/chapter_8/data/left/000036.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/left/000036.png
--------------------------------------------------------------------------------
/img/chapter_8/data/left/000037.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/left/000037.png
--------------------------------------------------------------------------------
/img/chapter_8/data/left/000038.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/left/000038.png
--------------------------------------------------------------------------------
/img/chapter_8/data/left/000039.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/left/000039.png
--------------------------------------------------------------------------------
/img/chapter_8/data/left/000040.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/left/000040.png
--------------------------------------------------------------------------------
/img/chapter_8/data/left/000041.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/left/000041.png
--------------------------------------------------------------------------------
/img/chapter_8/data/left/000042.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/left/000042.png
--------------------------------------------------------------------------------
/img/chapter_8/data/left/000043.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/left/000043.png
--------------------------------------------------------------------------------
/img/chapter_8/data/left/000044.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/left/000044.png
--------------------------------------------------------------------------------
/img/chapter_8/data/left/000045.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/left/000045.png
--------------------------------------------------------------------------------
/img/chapter_8/data/left/000046.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/left/000046.png
--------------------------------------------------------------------------------
/img/chapter_8/data/left/000047.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/left/000047.png
--------------------------------------------------------------------------------
/img/chapter_8/data/left/000048.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/left/000048.png
--------------------------------------------------------------------------------
/img/chapter_8/data/left/000049.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/left/000049.png
--------------------------------------------------------------------------------
/img/chapter_8/data/left/000050.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/left/000050.png
--------------------------------------------------------------------------------
/img/chapter_8/data/left/000051.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/left/000051.png
--------------------------------------------------------------------------------
/img/chapter_8/data/left/000052.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/left/000052.png
--------------------------------------------------------------------------------
/img/chapter_8/data/left/000053.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/left/000053.png
--------------------------------------------------------------------------------
/img/chapter_8/data/left/000054.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/left/000054.png
--------------------------------------------------------------------------------
/img/chapter_8/data/left/000055.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/left/000055.png
--------------------------------------------------------------------------------
/img/chapter_8/data/left/000056.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/left/000056.png
--------------------------------------------------------------------------------
/img/chapter_8/data/left/000057.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/left/000057.png
--------------------------------------------------------------------------------
/img/chapter_8/data/left/000058.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/left/000058.png
--------------------------------------------------------------------------------
/img/chapter_8/data/left/000059.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/left/000059.png
--------------------------------------------------------------------------------
/img/chapter_8/data/left/000060.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/left/000060.png
--------------------------------------------------------------------------------
/img/chapter_8/data/left/000061.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/left/000061.png
--------------------------------------------------------------------------------
/img/chapter_8/data/left/000062.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/left/000062.png
--------------------------------------------------------------------------------
/img/chapter_8/data/left/000063.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/left/000063.png
--------------------------------------------------------------------------------
/img/chapter_8/data/left/000064.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/left/000064.png
--------------------------------------------------------------------------------
/img/chapter_8/data/left/000065.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/left/000065.png
--------------------------------------------------------------------------------
/img/chapter_8/data/left/000066.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/left/000066.png
--------------------------------------------------------------------------------
/img/chapter_8/data/left/000067.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/left/000067.png
--------------------------------------------------------------------------------
/img/chapter_8/data/left/000068.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/left/000068.png
--------------------------------------------------------------------------------
/img/chapter_8/data/left/000069.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/left/000069.png
--------------------------------------------------------------------------------
/img/chapter_8/data/left/000070.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/left/000070.png
--------------------------------------------------------------------------------
/img/chapter_8/data/left/000071.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/left/000071.png
--------------------------------------------------------------------------------
/img/chapter_8/data/left/000072.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/left/000072.png
--------------------------------------------------------------------------------
/img/chapter_8/data/left/000073.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/left/000073.png
--------------------------------------------------------------------------------
/img/chapter_8/data/left/000074.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/left/000074.png
--------------------------------------------------------------------------------
/img/chapter_8/data/left/000075.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/left/000075.png
--------------------------------------------------------------------------------
/img/chapter_8/data/left/000076.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/left/000076.png
--------------------------------------------------------------------------------
/img/chapter_8/data/left/000077.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/left/000077.png
--------------------------------------------------------------------------------
/img/chapter_8/data/left/000078.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/left/000078.png
--------------------------------------------------------------------------------
/img/chapter_8/data/left/000079.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/left/000079.png
--------------------------------------------------------------------------------
/img/chapter_8/data/left/000080.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/left/000080.png
--------------------------------------------------------------------------------
/img/chapter_8/data/left/000081.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/left/000081.png
--------------------------------------------------------------------------------
/img/chapter_8/data/left/000082.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/left/000082.png
--------------------------------------------------------------------------------
/img/chapter_8/data/left/000083.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/left/000083.png
--------------------------------------------------------------------------------
/img/chapter_8/data/left/000084.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/left/000084.png
--------------------------------------------------------------------------------
/img/chapter_8/data/left/000085.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/left/000085.png
--------------------------------------------------------------------------------
/img/chapter_8/data/left/000086.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/left/000086.png
--------------------------------------------------------------------------------
/img/chapter_8/data/left/000087.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/left/000087.png
--------------------------------------------------------------------------------
/img/chapter_8/data/left/000088.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/left/000088.png
--------------------------------------------------------------------------------
/img/chapter_8/data/left/000089.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/left/000089.png
--------------------------------------------------------------------------------
/img/chapter_8/data/left/000090.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/left/000090.png
--------------------------------------------------------------------------------
/img/chapter_8/data/left/000091.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/left/000091.png
--------------------------------------------------------------------------------
/img/chapter_8/data/left/000092.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/left/000092.png
--------------------------------------------------------------------------------
/img/chapter_8/data/left/000093.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/left/000093.png
--------------------------------------------------------------------------------
/img/chapter_8/data/left/000094.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/left/000094.png
--------------------------------------------------------------------------------
/img/chapter_8/data/left/000095.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/left/000095.png
--------------------------------------------------------------------------------
/img/chapter_8/data/left/000096.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/left/000096.png
--------------------------------------------------------------------------------
/img/chapter_8/data/left/000097.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/left/000097.png
--------------------------------------------------------------------------------
/img/chapter_8/data/left/000098.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/left/000098.png
--------------------------------------------------------------------------------
/img/chapter_8/data/left/000099.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/left/000099.png
--------------------------------------------------------------------------------
/img/chapter_8/data/poses.txt:
--------------------------------------------------------------------------------
1 | 1.000000e+00 9.043680e-12 2.326809e-11 5.551115e-17 9.043683e-12 1.000000e+00 2.392370e-10 3.330669e-16 2.326810e-11 2.392370e-10 9.999999e-01 -4.440892e-16
2 | 9.999978e-01 5.272628e-04 -2.066935e-03 -4.690294e-02 -5.296506e-04 9.999992e-01 -1.154865e-03 -2.839928e-02 2.066324e-03 1.155958e-03 9.999971e-01 8.586941e-01
3 | 9.999910e-01 1.048972e-03 -4.131348e-03 -9.374345e-02 -1.058514e-03 9.999968e-01 -2.308104e-03 -5.676064e-02 4.128913e-03 2.312456e-03 9.999887e-01 1.716275e+00
4 | 9.999796e-01 1.566466e-03 -6.198571e-03 -1.406429e-01 -1.587952e-03 9.999927e-01 -3.462706e-03 -8.515762e-02 6.193102e-03 3.472479e-03 9.999747e-01 2.574964e+00
5 | 9.999637e-01 2.078471e-03 -8.263498e-03 -1.874858e-01 -2.116664e-03 9.999871e-01 -4.615826e-03 -1.135202e-01 8.253797e-03 4.633149e-03 9.999551e-01 3.432648e+00
6 | 9.999433e-01 2.586172e-03 -1.033094e-02 -2.343818e-01 -2.645881e-03 9.999798e-01 -5.770163e-03 -1.419150e-01 1.031581e-02 5.797170e-03 9.999299e-01 4.291335e+00
7 | 9.999184e-01 3.088363e-03 -1.239599e-02 -2.812195e-01 -3.174350e-03 9.999710e-01 -6.922975e-03 -1.702743e-01 1.237425e-02 6.961759e-03 9.998991e-01 5.148987e+00
8 | 9.998890e-01 3.586305e-03 -1.446384e-02 -3.281178e-01 -3.703403e-03 9.999605e-01 -8.077186e-03 -1.986703e-01 1.443430e-02 8.129853e-03 9.998627e-01 6.007777e+00
9 | 9.998551e-01 4.078705e-03 -1.652913e-02 -3.749547e-01 -4.231669e-03 9.999484e-01 -9.229794e-03 -2.270290e-01 1.649063e-02 9.298401e-03 9.998207e-01 6.865477e+00
10 | 9.998167e-01 4.566671e-03 -1.859652e-02 -4.218367e-01 -4.760342e-03 9.999347e-01 -1.038342e-02 -2.554151e-01 1.854788e-02 1.047004e-02 9.997731e-01 7.724036e+00
11 | 9.997738e-01 5.049868e-03 -2.066463e-02 -4.687329e-01 -5.289072e-03 9.999194e-01 -1.153730e-02 -2.838096e-01 2.060470e-02 1.164399e-02 9.997198e-01 8.582886e+00
12 | 9.997264e-01 5.527315e-03 -2.272922e-02 -5.155474e-01 -5.816781e-03 9.999025e-01 -1.268908e-02 -3.121547e-01 2.265686e-02 1.281782e-02 9.996611e-01 9.440275e+00
13 | 9.996745e-01 6.000540e-03 -2.479692e-02 -5.624310e-01 -6.345160e-03 9.998840e-01 -1.384246e-02 -3.405416e-01 2.471098e-02 1.399530e-02 9.995966e-01 1.029896e+01
14 | 9.996182e-01 6.468772e-03 -2.686440e-02 -6.093087e-01 -6.873365e-03 9.998639e-01 -1.499561e-02 -3.689250e-01 2.676374e-02 1.517453e-02 9.995266e-01 1.115757e+01
15 | 9.995562e-01 7.058450e-03 -2.894213e-02 -6.562052e-01 -7.530449e-03 9.998399e-01 -1.623192e-02 -3.973964e-01 2.882292e-02 1.644266e-02 9.994492e-01 1.201541e+01
16 | 9.995095e-01 5.595311e-03 -3.081450e-02 -7.018788e-01 -6.093682e-03 9.998517e-01 -1.610315e-02 -4.239119e-01 3.071983e-02 1.628303e-02 9.993953e-01 1.286965e+01
17 | 9.994226e-01 7.842768e-03 -3.306167e-02 -7.498241e-01 -8.456089e-03 9.997940e-01 -1.845198e-02 -4.540039e-01 3.291014e-02 1.872089e-02 9.992829e-01 1.373146e+01
18 | 9.993587e-01 8.704386e-03 -3.473400e-02 -7.992511e-01 -9.439421e-03 9.997338e-01 -2.105422e-02 -4.840770e-01 3.454149e-02 2.136859e-02 9.991747e-01 1.460026e+01
19 | 9.992482e-01 1.235688e-02 -3.674849e-02 -8.546642e-01 -1.320676e-02 9.996488e-01 -2.297477e-02 -5.155070e-01 3.645169e-02 2.344282e-02 9.990604e-01 1.547957e+01
20 | 9.991826e-01 1.352279e-02 -3.809783e-02 -9.072868e-01 -1.439161e-02 9.996404e-01 -2.262373e-02 -5.464705e-01 3.777819e-02 2.315352e-02 9.990178e-01 1.636940e+01
21 | 9.991241e-01 1.328777e-02 -3.967996e-02 -9.609163e-01 -1.412604e-02 9.996813e-01 -2.092052e-02 -5.783595e-01 3.938933e-02 2.146271e-02 9.989934e-01 1.726896e+01
22 | 9.990604e-01 1.351433e-02 -4.118029e-02 -1.011589e+00 -1.432436e-02 9.997084e-01 -1.943894e-02 -6.092403e-01 4.090558e-02 2.001055e-02 9.989626e-01 1.817318e+01
23 | 9.990174e-01 1.304822e-02 -4.235654e-02 -1.066256e+00 -1.386115e-02 9.997242e-01 -1.895579e-02 -6.387363e-01 4.209752e-02 1.952427e-02 9.989227e-01 1.908411e+01
24 | 9.989383e-01 1.325999e-02 -4.411963e-02 -1.118651e+00 -1.413494e-02 9.997084e-01 -1.957870e-02 -6.686219e-01 4.384715e-02 2.018154e-02 9.988343e-01 1.999722e+01
25 | 9.989120e-01 1.152857e-02 -4.518863e-02 -1.171840e+00 -1.247777e-02 9.997062e-01 -2.077977e-02 -6.990778e-01 4.493579e-02 2.132101e-02 9.987623e-01 2.091368e+01
26 | 9.988800e-01 1.128892e-02 -4.595003e-02 -1.224279e+00 -1.218132e-02 9.997417e-01 -1.918760e-02 -7.287421e-01 4.572155e-02 1.972584e-02 9.987594e-01 2.184042e+01
27 | 9.988593e-01 1.299421e-02 -4.594914e-02 -1.280807e+00 -1.370812e-02 9.997896e-01 -1.525610e-02 -7.604717e-01 4.574123e-02 1.586857e-02 9.988272e-01 2.277432e+01
28 | 9.988876e-01 1.379030e-02 -4.509495e-02 -1.334841e+00 -1.432558e-02 9.998304e-01 -1.156850e-02 -7.929673e-01 4.492776e-02 1.220164e-02 9.989157e-01 2.370953e+01
29 | 9.989649e-01 1.285173e-02 -4.363580e-02 -1.385747e+00 -1.325687e-02 9.998715e-01 -9.007757e-03 -8.209244e-01 4.351442e-02 9.576906e-03 9.990068e-01 2.465175e+01
30 | 9.990298e-01 1.265253e-02 -4.218321e-02 -1.436633e+00 -1.299403e-02 9.998849e-01 -7.831284e-03 -8.456208e-01 4.207926e-02 8.371815e-03 9.990791e-01 2.559694e+01
31 | 9.990746e-01 1.289592e-02 -4.103309e-02 -1.487044e+00 -1.333334e-02 9.998570e-01 -1.040438e-02 -8.702127e-01 4.089305e-02 1.094186e-02 9.991036e-01 2.654471e+01
32 | 9.990967e-01 1.391010e-02 -4.015465e-02 -1.538025e+00 -1.454998e-02 9.997711e-01 -1.568743e-02 -8.971121e-01 3.992724e-02 1.625751e-02 9.990703e-01 2.749627e+01
33 | 9.991533e-01 1.320645e-02 -3.896502e-02 -1.586551e+00 -1.396325e-02 9.997178e-01 -1.921474e-02 -9.254151e-01 3.870026e-02 1.974255e-02 9.990558e-01 2.845466e+01
34 | 9.992105e-01 1.079096e-02 -3.823584e-02 -1.633363e+00 -1.148611e-02 9.997718e-01 -1.800793e-02 -9.555630e-01 3.803279e-02 1.843289e-02 9.991064e-01 2.942293e+01
35 | 9.992215e-01 9.086312e-03 -3.839229e-02 -1.680971e+00 -9.596057e-03 9.998679e-01 -1.311391e-02 -9.838377e-01 3.826806e-02 1.347211e-02 9.991766e-01 3.039839e+01
36 | 9.992105e-01 5.838117e-03 -3.929763e-02 -1.728893e+00 -6.198498e-03 9.999398e-01 -9.054940e-03 -1.011772e+00 3.924239e-02 9.291377e-03 9.991865e-01 3.137765e+01
37 | 9.991830e-01 -1.840283e-03 -4.037463e-02 -1.768976e+00 1.460769e-03 9.999545e-01 -9.427292e-03 -1.036363e+00 4.039014e-02 9.360611e-03 9.991401e-01 3.235714e+01
38 | 9.991063e-01 -4.894794e-03 -4.198475e-02 -1.815834e+00 4.337365e-03 9.999014e-01 -1.335777e-02 -1.059789e+00 4.204599e-02 1.316373e-02 9.990289e-01 3.333631e+01
39 | 9.990442e-01 -4.076714e-03 -4.352240e-02 -1.870663e+00 3.306848e-03 9.998370e-01 -1.774634e-02 -1.088016e+00 4.358766e-02 1.758545e-02 9.988948e-01 3.432021e+01
40 | 9.989620e-01 -3.501086e-03 -4.541814e-02 -1.929780e+00 2.639355e-03 9.998156e-01 -1.901940e-02 -1.129880e+00 4.547635e-02 1.887978e-02 9.987869e-01 3.533097e+01
41 | 9.989126e-01 -3.564847e-03 -4.648700e-02 -1.993748e+00 2.782576e-03 9.998536e-01 -1.688161e-02 -1.194548e+00 4.654037e-02 1.673390e-02 9.987762e-01 3.638751e+01
42 | 9.988708e-01 -2.386257e-04 -4.750925e-02 -2.061112e+00 -4.151975e-04 9.999053e-01 -1.375168e-02 -1.249881e+00 4.750803e-02 1.375587e-02 9.987761e-01 3.742850e+01
43 | 9.988085e-01 2.160348e-06 -4.880145e-02 -2.126953e+00 -6.257569e-04 9.999183e-01 -1.276297e-02 -1.305052e+00 4.879743e-02 1.277830e-02 9.987269e-01 3.847151e+01
44 | 9.987592e-01 8.809214e-04 -4.979299e-02 -2.190967e+00 -1.403287e-03 9.999443e-01 -1.045676e-02 -1.349142e+00 4.978101e-02 1.051366e-02 9.987048e-01 3.950365e+01
45 | 9.987569e-01 4.894213e-04 -4.984526e-02 -2.256115e+00 -8.210333e-04 9.999776e-01 -6.632571e-03 -1.393047e+00 4.984090e-02 6.665250e-03 9.987349e-01 4.053855e+01
46 | 9.987132e-01 6.466500e-03 -5.030151e-02 -2.329940e+00 -6.722014e-03 9.999653e-01 -4.912121e-03 -1.426813e+00 5.026800e-02 5.243927e-03 9.987219e-01 4.156111e+01
47 | 9.987143e-01 6.952179e-03 -5.021498e-02 -2.399728e+00 -7.192513e-03 9.999635e-01 -4.606971e-03 -1.460731e+00 5.018112e-02 4.962219e-03 9.987278e-01 4.258303e+01
48 | 9.987083e-01 6.676282e-03 -5.037160e-02 -2.465214e+00 -7.006772e-03 9.999550e-01 -6.387280e-03 -1.489501e+00 5.032669e-02 6.731971e-03 9.987101e-01 4.359302e+01
49 | 9.987013e-01 8.983148e-03 -5.015069e-02 -2.535885e+00 -9.456170e-03 9.999129e-01 -9.202712e-03 -1.522850e+00 5.006365e-02 9.664992e-03 9.986992e-01 4.459790e+01
50 | 9.986535e-01 8.808468e-03 -5.112439e-02 -2.600016e+00 -9.296065e-03 9.999135e-01 -9.307503e-03 -1.559885e+00 5.103798e-02 9.770225e-03 9.986489e-01 4.559882e+01
51 | 9.986012e-01 6.863746e-03 -5.242779e-02 -2.661881e+00 -7.280160e-03 9.999434e-01 -7.755765e-03 -1.593756e+00 5.237159e-02 8.126598e-03 9.985945e-01 4.659803e+01
52 | 9.985540e-01 7.061951e-03 -5.329345e-02 -2.728914e+00 -7.431486e-03 9.999497e-01 -6.738977e-03 -1.629817e+00 5.324317e-02 7.125281e-03 9.985561e-01 4.759275e+01
53 | 9.985154e-01 9.830435e-03 -5.357609e-02 -2.800794e+00 -1.032218e-02 9.999070e-01 -8.909522e-03 -1.664529e+00 5.348352e-02 9.449317e-03 9.985240e-01 4.857856e+01
54 | 9.984686e-01 1.023790e-02 -5.436634e-02 -2.871336e+00 -1.103255e-02 9.998363e-01 -1.433651e-02 -1.697621e+00 5.421067e-02 1.491435e-02 9.984181e-01 4.955600e+01
55 | 9.984385e-01 1.064895e-02 -5.483888e-02 -2.937935e+00 -1.149460e-02 9.998195e-01 -1.512829e-02 -1.729013e+00 5.466788e-02 1.573501e-02 9.983805e-01 5.053773e+01
56 | 9.984274e-01 1.026893e-02 -5.511221e-02 -3.002463e+00 -1.093885e-02 9.998697e-01 -1.186763e-02 -1.766742e+00 5.498316e-02 1.245183e-02 9.984096e-01 5.151845e+01
57 | 9.984356e-01 7.566176e-03 -5.540070e-02 -3.065844e+00 -8.064009e-03 9.999290e-01 -8.767995e-03 -1.798994e+00 5.533043e-02 9.201029e-03 9.984256e-01 5.249501e+01
58 | 9.984285e-01 6.348755e-03 -5.568046e-02 -3.130185e+00 -6.799312e-03 9.999456e-01 -7.906116e-03 -1.830051e+00 5.562724e-02 8.272279e-03 9.984173e-01 5.346498e+01
59 | 9.984326e-01 3.282949e-03 -5.587138e-02 -3.191520e+00 -3.779690e-03 9.999542e-01 -8.787440e-03 -1.858398e+00 5.583997e-02 8.984842e-03 9.983992e-01 5.442804e+01
60 | 9.984068e-01 -1.460363e-04 -5.642638e-02 -3.248811e+00 -4.508913e-04 9.999441e-01 -1.056600e-02 -1.886487e+00 5.642476e-02 1.057461e-02 9.983508e-01 5.539178e+01
61 | 9.983367e-01 -1.591214e-03 -5.763218e-02 -3.310922e+00 1.036802e-03 9.999529e-01 -9.648457e-03 -1.913841e+00 5.764481e-02 9.572654e-03 9.982912e-01 5.635039e+01
62 | 9.982641e-01 -4.382863e-03 -5.873397e-02 -3.371514e+00 4.075329e-03 9.999773e-01 -5.354817e-03 -1.938229e+00 5.875611e-02 5.106161e-03 9.982593e-01 5.731251e+01
63 | 9.982268e-01 -5.964740e-03 -5.922694e-02 -3.438994e+00 5.986946e-03 9.999820e-01 1.974663e-04 -1.956763e+00 5.922470e-02 -5.517038e-04 9.982445e-01 5.827400e+01
64 | 9.982022e-01 -4.407760e-03 -5.977459e-02 -3.511313e+00 4.547914e-03 9.999872e-01 2.208854e-03 -1.975962e+00 5.976408e-02 -2.476732e-03 9.982094e-01 5.922540e+01
65 | 9.981161e-01 -2.919496e-03 -6.128511e-02 -3.579193e+00 2.920554e-03 9.999957e-01 -7.231076e-05 -1.998111e+00 6.128506e-02 -1.068112e-04 9.981202e-01 6.016633e+01
66 | 9.980242e-01 -1.762043e-03 -6.280674e-02 -3.641784e+00 1.227247e-03 9.999627e-01 -8.552514e-03 -2.021539e+00 6.281946e-02 8.458535e-03 9.979890e-01 6.109125e+01
67 | 9.979547e-01 -9.592105e-04 -6.391830e-02 -3.703384e+00 5.024105e-05 9.998989e-01 -1.422089e-02 -2.049159e+00 6.392547e-02 1.418860e-02 9.978538e-01 6.200632e+01
68 | 9.978643e-01 4.204986e-03 -6.518610e-02 -3.776035e+00 -5.092497e-03 9.998965e-01 -1.345487e-02 -2.078109e+00 6.512277e-02 1.375809e-02 9.977824e-01 6.291678e+01
69 | 9.977905e-01 7.492613e-03 -6.601519e-02 -3.843940e+00 -8.206300e-03 9.999107e-01 -1.054641e-02 -2.112094e+00 6.593028e-02 1.106485e-02 9.977628e-01 6.381519e+01
70 | 9.976764e-01 1.025448e-02 -6.735521e-02 -3.912602e+00 -1.087073e-02 9.999023e-01 -8.789172e-03 -2.145353e+00 6.725849e-02 9.500949e-03 9.976903e-01 6.469786e+01
71 | 9.975909e-01 1.034502e-02 -6.859620e-02 -3.978228e+00 -1.103350e-02 9.998924e-01 -9.665437e-03 -2.173835e+00 6.848883e-02 1.039901e-02 9.975976e-01 6.556672e+01
72 | 9.974616e-01 1.183547e-02 -7.021661e-02 -4.046625e+00 -1.248174e-02 9.998836e-01 -8.772233e-03 -2.201409e+00 7.010461e-02 9.626390e-03 9.974931e-01 6.642163e+01
73 | 9.973396e-01 1.318380e-02 -7.169363e-02 -4.114442e+00 -1.380046e-02 9.998718e-01 -8.112825e-03 -2.230822e+00 7.157748e-02 9.080646e-03 9.973937e-01 6.726455e+01
74 | 9.972258e-01 1.296774e-02 -7.329823e-02 -4.179994e+00 -1.352350e-02 9.998834e-01 -7.090915e-03 -2.258366e+00 7.319772e-02 8.062491e-03 9.972848e-01 6.809328e+01
75 | 9.971241e-01 1.256612e-02 -7.473754e-02 -4.244856e+00 -1.307757e-02 9.998942e-01 -6.357728e-03 -2.283310e+00 7.464974e-02 7.316829e-03 9.971829e-01 6.890994e+01
76 | 9.969894e-01 1.489953e-02 -7.609372e-02 -4.313021e+00 -1.525772e-02 9.998751e-01 -4.127928e-03 -2.307845e+00 7.602271e-02 5.276517e-03 9.970921e-01 6.971424e+01
77 | 9.968772e-01 1.677181e-02 -7.716622e-02 -4.381935e+00 -1.677976e-02 9.998590e-01 5.454462e-04 -2.329476e+00 7.716449e-02 7.510882e-04 9.970180e-01 7.050799e+01
78 | 9.966886e-01 1.928865e-02 -7.899331e-02 -4.445510e+00 -1.916694e-02 9.998136e-01 2.298764e-03 -2.355391e+00 7.902292e-02 -7.770902e-04 9.968724e-01 7.128437e+01
79 | 9.964961e-01 2.232345e-02 -8.060564e-02 -4.514875e+00 -2.246983e-02 9.997471e-01 -9.091952e-04 -2.382091e+00 8.056495e-02 2.717205e-03 9.967456e-01 7.203735e+01
80 | 9.963707e-01 2.284027e-02 -8.199948e-02 -4.580210e+00 -2.361073e-02 9.996856e-01 -8.438421e-03 -2.409731e+00 8.178096e-02 1.034386e-02 9.965966e-01 7.276791e+01
81 | 9.962563e-01 2.164989e-02 -8.369451e-02 -4.644343e+00 -2.291184e-02 9.996374e-01 -1.414702e-02 -2.432982e+00 8.335788e-02 1.601165e-02 9.963910e-01 7.348065e+01
82 | 9.962035e-01 2.236698e-02 -8.413330e-02 -4.709494e+00 -2.381956e-02 9.995833e-01 -1.630112e-02 -2.459523e+00 8.373364e-02 1.824325e-02 9.963211e-01 7.417539e+01
83 | 9.960873e-01 2.480834e-02 -8.482128e-02 -4.775730e+00 -2.599143e-02 9.995793e-01 -1.287207e-02 -2.490277e+00 8.446625e-02 1.502633e-02 9.963130e-01 7.485147e+01
84 | 9.959529e-01 2.606958e-02 -8.601342e-02 -4.837515e+00 -2.697536e-02 9.995920e-01 -9.385091e-03 -2.525955e+00 8.573366e-02 1.166735e-02 9.962497e-01 7.550744e+01
85 | 9.959075e-01 2.291063e-02 -8.742661e-02 -4.891889e+00 -2.409575e-02 9.996312e-01 -1.252425e-02 -2.556654e+00 8.710742e-02 1.457961e-02 9.960922e-01 7.613828e+01
86 | 9.960426e-01 1.503549e-02 -8.759638e-02 -4.937677e+00 -1.662384e-02 9.997098e-01 -1.743140e-02 -2.585469e+00 8.730887e-02 1.881860e-02 9.960035e-01 7.675010e+01
87 | 9.961635e-01 1.044107e-02 -8.688679e-02 -4.985837e+00 -1.249941e-02 9.996532e-01 -2.317957e-02 -2.616742e+00 8.661463e-02 2.417667e-02 9.959484e-01 7.734409e+01
88 | 9.963973e-01 1.211154e-02 -8.393973e-02 -5.039038e+00 -1.414999e-02 9.996182e-01 -2.373245e-02 -2.646048e+00 8.362024e-02 2.483469e-02 9.961881e-01 7.792534e+01
89 | 9.966394e-01 1.770654e-02 -7.997749e-02 -5.092732e+00 -1.941041e-02 9.995998e-01 -2.057726e-02 -2.675699e+00 7.958113e-02 2.206050e-02 9.965842e-01 7.849464e+01
90 | 9.970121e-01 1.664848e-02 -7.543122e-02 -5.133801e+00 -1.801913e-02 9.996840e-01 -1.752686e-02 -2.701840e+00 7.511558e-02 1.883369e-02 9.969969e-01 7.904953e+01
91 | 9.974633e-01 1.217037e-02 -7.013516e-02 -5.159772e+00 -1.315774e-02 9.998205e-01 -1.363335e-02 -2.729207e+00 6.995665e-02 1.452158e-02 9.974443e-01 7.959230e+01
92 | 9.980240e-01 7.887781e-03 -6.233726e-02 -5.183357e+00 -8.483336e-03 9.999208e-01 -9.294846e-03 -2.756800e+00 6.225900e-02 9.805306e-03 9.980118e-01 8.012304e+01
93 | 9.985955e-01 1.068615e-02 -5.189267e-02 -5.208269e+00 -1.122407e-02 9.998861e-01 -1.008572e-02 -2.780022e+00 5.177898e-02 1.065400e-02 9.986017e-01 8.063455e+01
94 | 9.991827e-01 1.624761e-02 -3.701415e-02 -5.235209e+00 -1.664974e-02 9.998054e-01 -1.058172e-02 -2.801727e+00 3.683502e-02 1.118935e-02 9.992587e-01 8.113538e+01
95 | 9.995878e-01 2.136933e-02 -1.917552e-02 -5.248892e+00 -2.156744e-02 9.997155e-01 -1.018473e-02 -2.822088e+00 1.895242e-02 1.059410e-02 9.997642e-01 8.162286e+01
96 | 9.997985e-01 1.993349e-02 2.394767e-03 -5.236828e+00 -1.990872e-02 9.997522e-01 -9.958356e-03 -2.839863e+00 -2.592678e-03 9.908671e-03 9.999475e-01 8.209701e+01
97 | 9.994836e-01 1.619025e-02 2.775764e-02 -5.207469e+00 -1.594000e-02 9.998305e-01 -9.213406e-03 -2.859306e+00 -2.790210e-02 8.766190e-03 9.995722e-01 8.255594e+01
98 | 9.982814e-01 1.472502e-02 5.672377e-02 -5.163543e+00 -1.430176e-02 9.998668e-01 -7.860647e-03 -2.878004e+00 -5.683196e-02 7.035887e-03 9.983589e-01 8.300846e+01
99 | 9.959138e-01 1.420072e-02 8.918593e-02 -5.105620e+00 -1.367050e-02 9.998851e-01 -6.553178e-03 -2.895751e+00 -8.926873e-02 5.307184e-03 9.959934e-01 8.345454e+01
100 | 9.920007e-01 1.389449e-02 1.254661e-01 -5.029560e+00 -1.324753e-02 9.998943e-01 -5.989348e-03 -2.911918e+00 -1.255360e-01 4.279320e-03 9.920798e-01 8.388530e+01
101 |
--------------------------------------------------------------------------------
/img/chapter_8/data/right/000000.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/right/000000.png
--------------------------------------------------------------------------------
/img/chapter_8/data/right/000001.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/right/000001.png
--------------------------------------------------------------------------------
/img/chapter_8/data/right/000002.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/right/000002.png
--------------------------------------------------------------------------------
/img/chapter_8/data/right/000003.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/right/000003.png
--------------------------------------------------------------------------------
/img/chapter_8/data/right/000004.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/right/000004.png
--------------------------------------------------------------------------------
/img/chapter_8/data/right/000005.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/right/000005.png
--------------------------------------------------------------------------------
/img/chapter_8/data/right/000006.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/right/000006.png
--------------------------------------------------------------------------------
/img/chapter_8/data/right/000007.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/right/000007.png
--------------------------------------------------------------------------------
/img/chapter_8/data/right/000008.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/right/000008.png
--------------------------------------------------------------------------------
/img/chapter_8/data/right/000009.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/right/000009.png
--------------------------------------------------------------------------------
/img/chapter_8/data/right/000010.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/right/000010.png
--------------------------------------------------------------------------------
/img/chapter_8/data/right/000011.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/right/000011.png
--------------------------------------------------------------------------------
/img/chapter_8/data/right/000012.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/right/000012.png
--------------------------------------------------------------------------------
/img/chapter_8/data/right/000013.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/right/000013.png
--------------------------------------------------------------------------------
/img/chapter_8/data/right/000014.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/right/000014.png
--------------------------------------------------------------------------------
/img/chapter_8/data/right/000015.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/right/000015.png
--------------------------------------------------------------------------------
/img/chapter_8/data/right/000016.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/right/000016.png
--------------------------------------------------------------------------------
/img/chapter_8/data/right/000017.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/right/000017.png
--------------------------------------------------------------------------------
/img/chapter_8/data/right/000018.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/right/000018.png
--------------------------------------------------------------------------------
/img/chapter_8/data/right/000019.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/right/000019.png
--------------------------------------------------------------------------------
/img/chapter_8/data/right/000020.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/right/000020.png
--------------------------------------------------------------------------------
/img/chapter_8/data/right/000021.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/right/000021.png
--------------------------------------------------------------------------------
/img/chapter_8/data/right/000022.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/right/000022.png
--------------------------------------------------------------------------------
/img/chapter_8/data/right/000023.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/right/000023.png
--------------------------------------------------------------------------------
/img/chapter_8/data/right/000024.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/right/000024.png
--------------------------------------------------------------------------------
/img/chapter_8/data/right/000025.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/right/000025.png
--------------------------------------------------------------------------------
/img/chapter_8/data/right/000026.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/right/000026.png
--------------------------------------------------------------------------------
/img/chapter_8/data/right/000027.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/right/000027.png
--------------------------------------------------------------------------------
/img/chapter_8/data/right/000028.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/right/000028.png
--------------------------------------------------------------------------------
/img/chapter_8/data/right/000029.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/right/000029.png
--------------------------------------------------------------------------------
/img/chapter_8/data/right/000030.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/right/000030.png
--------------------------------------------------------------------------------
/img/chapter_8/data/right/000031.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/right/000031.png
--------------------------------------------------------------------------------
/img/chapter_8/data/right/000032.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/right/000032.png
--------------------------------------------------------------------------------
/img/chapter_8/data/right/000033.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/right/000033.png
--------------------------------------------------------------------------------
/img/chapter_8/data/right/000034.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/right/000034.png
--------------------------------------------------------------------------------
/img/chapter_8/data/right/000035.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/right/000035.png
--------------------------------------------------------------------------------
/img/chapter_8/data/right/000036.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/right/000036.png
--------------------------------------------------------------------------------
/img/chapter_8/data/right/000037.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/right/000037.png
--------------------------------------------------------------------------------
/img/chapter_8/data/right/000038.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/right/000038.png
--------------------------------------------------------------------------------
/img/chapter_8/data/right/000039.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/right/000039.png
--------------------------------------------------------------------------------
/img/chapter_8/data/right/000040.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/right/000040.png
--------------------------------------------------------------------------------
/img/chapter_8/data/right/000041.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/right/000041.png
--------------------------------------------------------------------------------
/img/chapter_8/data/right/000042.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/right/000042.png
--------------------------------------------------------------------------------
/img/chapter_8/data/right/000043.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/right/000043.png
--------------------------------------------------------------------------------
/img/chapter_8/data/right/000044.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/right/000044.png
--------------------------------------------------------------------------------
/img/chapter_8/data/right/000045.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/right/000045.png
--------------------------------------------------------------------------------
/img/chapter_8/data/right/000046.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/right/000046.png
--------------------------------------------------------------------------------
/img/chapter_8/data/right/000047.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/right/000047.png
--------------------------------------------------------------------------------
/img/chapter_8/data/right/000048.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/right/000048.png
--------------------------------------------------------------------------------
/img/chapter_8/data/right/000049.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/right/000049.png
--------------------------------------------------------------------------------
/img/chapter_8/data/right/000050.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/right/000050.png
--------------------------------------------------------------------------------
/img/chapter_8/data/right/000051.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/right/000051.png
--------------------------------------------------------------------------------
/img/chapter_8/data/right/000052.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/right/000052.png
--------------------------------------------------------------------------------
/img/chapter_8/data/right/000053.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/right/000053.png
--------------------------------------------------------------------------------
/img/chapter_8/data/right/000054.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/right/000054.png
--------------------------------------------------------------------------------
/img/chapter_8/data/right/000055.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/right/000055.png
--------------------------------------------------------------------------------
/img/chapter_8/data/right/000056.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/right/000056.png
--------------------------------------------------------------------------------
/img/chapter_8/data/right/000057.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/right/000057.png
--------------------------------------------------------------------------------
/img/chapter_8/data/right/000058.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/right/000058.png
--------------------------------------------------------------------------------
/img/chapter_8/data/right/000059.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/right/000059.png
--------------------------------------------------------------------------------
/img/chapter_8/data/right/000060.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/right/000060.png
--------------------------------------------------------------------------------
/img/chapter_8/data/right/000061.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/right/000061.png
--------------------------------------------------------------------------------
/img/chapter_8/data/right/000062.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/right/000062.png
--------------------------------------------------------------------------------
/img/chapter_8/data/right/000063.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/right/000063.png
--------------------------------------------------------------------------------
/img/chapter_8/data/right/000064.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/right/000064.png
--------------------------------------------------------------------------------
/img/chapter_8/data/right/000065.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/right/000065.png
--------------------------------------------------------------------------------
/img/chapter_8/data/right/000066.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/right/000066.png
--------------------------------------------------------------------------------
/img/chapter_8/data/right/000067.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/right/000067.png
--------------------------------------------------------------------------------
/img/chapter_8/data/right/000068.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/right/000068.png
--------------------------------------------------------------------------------
/img/chapter_8/data/right/000069.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/right/000069.png
--------------------------------------------------------------------------------
/img/chapter_8/data/right/000070.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/right/000070.png
--------------------------------------------------------------------------------
/img/chapter_8/data/right/000071.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/right/000071.png
--------------------------------------------------------------------------------
/img/chapter_8/data/right/000072.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/right/000072.png
--------------------------------------------------------------------------------
/img/chapter_8/data/right/000073.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/right/000073.png
--------------------------------------------------------------------------------
/img/chapter_8/data/right/000074.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/right/000074.png
--------------------------------------------------------------------------------
/img/chapter_8/data/right/000075.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/right/000075.png
--------------------------------------------------------------------------------
/img/chapter_8/data/right/000076.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/right/000076.png
--------------------------------------------------------------------------------
/img/chapter_8/data/right/000077.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/right/000077.png
--------------------------------------------------------------------------------
/img/chapter_8/data/right/000078.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/right/000078.png
--------------------------------------------------------------------------------
/img/chapter_8/data/right/000079.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/right/000079.png
--------------------------------------------------------------------------------
/img/chapter_8/data/right/000080.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/right/000080.png
--------------------------------------------------------------------------------
/img/chapter_8/data/right/000081.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/right/000081.png
--------------------------------------------------------------------------------
/img/chapter_8/data/right/000082.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/right/000082.png
--------------------------------------------------------------------------------
/img/chapter_8/data/right/000083.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/right/000083.png
--------------------------------------------------------------------------------
/img/chapter_8/data/right/000084.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/right/000084.png
--------------------------------------------------------------------------------
/img/chapter_8/data/right/000085.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/right/000085.png
--------------------------------------------------------------------------------
/img/chapter_8/data/right/000086.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/right/000086.png
--------------------------------------------------------------------------------
/img/chapter_8/data/right/000087.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/right/000087.png
--------------------------------------------------------------------------------
/img/chapter_8/data/right/000088.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/right/000088.png
--------------------------------------------------------------------------------
/img/chapter_8/data/right/000089.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/right/000089.png
--------------------------------------------------------------------------------
/img/chapter_8/data/right/000090.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/right/000090.png
--------------------------------------------------------------------------------
/img/chapter_8/data/right/000091.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/right/000091.png
--------------------------------------------------------------------------------
/img/chapter_8/data/right/000092.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/right/000092.png
--------------------------------------------------------------------------------
/img/chapter_8/data/right/000093.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/right/000093.png
--------------------------------------------------------------------------------
/img/chapter_8/data/right/000094.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/right/000094.png
--------------------------------------------------------------------------------
/img/chapter_8/data/right/000095.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/right/000095.png
--------------------------------------------------------------------------------
/img/chapter_8/data/right/000096.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/right/000096.png
--------------------------------------------------------------------------------
/img/chapter_8/data/right/000097.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/right/000097.png
--------------------------------------------------------------------------------
/img/chapter_8/data/right/000098.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/right/000098.png
--------------------------------------------------------------------------------
/img/chapter_8/data/right/000099.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_8/data/right/000099.png
--------------------------------------------------------------------------------
/img/chapter_8/data/tmp_func.py:
--------------------------------------------------------------------------------
1 | import numpy as np
2 | from scipy.spatial.distance import cdist
3 | def task(h, patch_radius, left_img, right_img, height, width, min_disparity, max_disparity):
4 | arr = []
5 | for w in range(patch_radius+max_disparity,width-patch_radius-1):
6 | # MANUAL disparity
7 | """
8 | distance = float("inf")
9 | disparity = 0
10 | for x in range(w,max(patch_radius+1,w-max_disparity),-1):
11 | disp = w-x;
12 | patch_left = left_img[h - patch_radius : h + patch_radius, w - patch_radius : w + patch_radius].reshape(-1);
13 | patch_right = right_img[h - patch_radius : h + patch_radius, x - patch_radius : x + patch_radius].reshape(-1);
14 | d = cdist([patch_left], [patch_right], 'sqeuclidean');
15 |
16 | if (d < distance):
17 | disparity = disp;
18 | distance = d;
19 | # set disparity outside of disparity range to 0
20 | """
21 | # Vectorized
22 |
23 | patch_left = left_img[h - patch_radius : h + patch_radius, w - patch_radius : w + patch_radius].reshape(-1);
24 | vec_r = []
25 | for x in range(w,max(patch_radius+1,w-max_disparity),-1):
26 | # get patched and make them 1-d
27 | patch_right = right_img[h - patch_radius : h + patch_radius, x - patch_radius : x + patch_radius].reshape(-1);
28 | vec_r.append(patch_right)
29 | #print(vec_r.shape)
30 |
31 | pdist = cdist([patch_left], vec_r, 'sqeuclidean')
32 | arg_min = np.argmin(pdist)
33 | print("arg_min", arg_min)
34 |
35 | disparity = arg_min
36 |
37 | if (disparity < min_disparity or disparity > max_disparity):
38 | disparity = 0;
39 | print(disparity)
40 | arr.append([h, w, disparity])
41 | return arr
42 |
--------------------------------------------------------------------------------
/img/chapter_9/10_hartley_scaling.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_9/10_hartley_scaling.png
--------------------------------------------------------------------------------
/img/chapter_9/11_directional_error.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_9/11_directional_error.png
--------------------------------------------------------------------------------
/img/chapter_9/12_epipolar_line_distance.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_9/12_epipolar_line_distance.png
--------------------------------------------------------------------------------
/img/chapter_9/13_reprojection_error.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_9/13_reprojection_error.png
--------------------------------------------------------------------------------
/img/chapter_9/1_scale_ambiguity.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_9/1_scale_ambiguity.png
--------------------------------------------------------------------------------
/img/chapter_9/2_epipolar_constraint.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_9/2_epipolar_constraint.png
--------------------------------------------------------------------------------
/img/chapter_9/3_rectified_case.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_9/3_rectified_case.png
--------------------------------------------------------------------------------
/img/chapter_9/4_essentail_matrix.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_9/4_essentail_matrix.png
--------------------------------------------------------------------------------
/img/chapter_9/5_Q_and_E.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_9/5_Q_and_E.png
--------------------------------------------------------------------------------
/img/chapter_9/6_four_solutions.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_9/6_four_solutions.png
--------------------------------------------------------------------------------
/img/chapter_9/7_K_and_normalized_image_vector.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_9/7_K_and_normalized_image_vector.png
--------------------------------------------------------------------------------
/img/chapter_9/8_fundamental_matrix.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_9/8_fundamental_matrix.png
--------------------------------------------------------------------------------
/img/chapter_9/9_normalizing_8_point.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_9/9_normalizing_8_point.png
--------------------------------------------------------------------------------
/img/chapter_9/relative_translation_2DOF.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/img/chapter_9/relative_translation_2DOF.png
--------------------------------------------------------------------------------
/torus.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/polygon-software/python-visual-odometry/8cc9c53522b10e4710c54db5c4a55989868c2b71/torus.png
--------------------------------------------------------------------------------