├── .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 | ![VO relations](./img/chapter_1/sfm_vslam_vo.png) 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 | ![feature detection](./img/chapter_1/input.png) 71 | 72 | ![feature detection](./img/chapter_1/feature_detection.png) 73 | 74 | ![feature matching](./img/chapter_1/feature_matching.png) 75 | 76 | ![feature matching](./img/chapter_1/motion_estimation.png) 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 | "![3D Reconstructions using multiple images of the same Object](https://github.com/joelbarmettlerUZH/PyVisualOdometry/raw/master/img/chapter_13/3D_reconstruction_example.png)\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 | "![Depth uncertainty with differente viewport changes](https://github.com/joelbarmettlerUZH/PyVisualOdometry/raw/master/img/chapter_13/baseline_depth_estimation.png)\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 | "![Aggregated Photometric Error](https://github.com/joelbarmettlerUZH/PyVisualOdometry/raw/master/img/chapter_13/aggregated_photometric_error.png)\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 | "![Calculate Disparity Space Image](https://github.com/joelbarmettlerUZH/PyVisualOdometry/raw/master/img/chapter_13/calculate_entries_of_disparity_space_image.png)\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 | "![Calculate final depth using DSI](https://github.com/joelbarmettlerUZH/PyVisualOdometry/raw/master/img/chapter_13/depth_calculation_function.png)\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 | "![Influence of Path on Depth Map](https://github.com/joelbarmettlerUZH/PyVisualOdometry/raw/master/img/chapter_13/influence_of_patch_size_on_depth_map.png)\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 | "![(Aggregated) Photometric Error for different features](https://github.com/joelbarmettlerUZH/PyVisualOdometry/raw/master/img/chapter_13/depth_estimation_for_different_features.png)\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 | "![Regularization term](https://github.com/joelbarmettlerUZH/PyVisualOdometry/raw/master/img/chapter_13/regularization_term.png)\n", 76 | "*Figure 8: Regularization term. [source](http://rpg.ifi.uzh.ch/docs/teaching/2019/12a_3D_reconstruction.pdf)*\n", 77 | "\n", 78 | "![Depth map change with increasing lambda](https://github.com/joelbarmettlerUZH/PyVisualOdometry/raw/master/img/chapter_13/increasing_lambda.png)\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 | "![Regularization relative to gradient](https://github.com/joelbarmettlerUZH/PyVisualOdometry/raw/master/img/chapter_13/regularization_relative_to_gradient.png)\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 | "![Image Querying](https://github.com/joelbarmettlerUZH/PyVisualOdometry/raw/master/img/chapter_14/1_image_query.png)\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 | "![Descriptor Space](https://github.com/joelbarmettlerUZH/PyVisualOdometry/raw/master/img/chapter_14/2_descriptor_space.png)\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 | "![Clustering](https://github.com/joelbarmettlerUZH/PyVisualOdometry/raw/master/img/chapter_14/3_clustering.png)\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 | "![Hierarchical clustering](https://github.com/joelbarmettlerUZH/PyVisualOdometry/raw/master/img/chapter_14/5_hierarchical_clustering.png)\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 | "![Number of Words](https://github.com/joelbarmettlerUZH/PyVisualOdometry/raw/master/img/chapter_14/6_more_words_better.png)\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 | "![Branch Factor](https://github.com/joelbarmettlerUZH/PyVisualOdometry/raw/master/img/chapter_14/7_branchfactor.png)\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 | "![summary](https://github.com/joelbarmettlerUZH/PyVisualOdometry/raw/master/img/chapter_14/4_summary.png)\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 | "![Pinhole Model, p. 7](https://github.com/joelbarmettlerUZH/PyVisualOdometry/raw/master/img/chapter_2/1_pinhole_camera.png)\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 | "![Lens, p. 16](https://github.com/joelbarmettlerUZH/PyVisualOdometry/raw/master/img/chapter_2/lense.png)\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 | "![Thin Lens equation, p. 17](https://github.com/joelbarmettlerUZH/PyVisualOdometry/raw/master/img/chapter_2/2_thin_lens_equation.png)\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 | "![Blur circle, p. 19](https://github.com/joelbarmettlerUZH/PyVisualOdometry/raw/master/img/chapter_2/3_blur_circle.png)\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 | "![Pinhole approximation, p. 22](https://github.com/joelbarmettlerUZH/PyVisualOdometry/raw/master/img/chapter_2/4_pinhole_approximation.png)\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 | "![FoV-Focal length ratio, p. 22](https://github.com/joelbarmettlerUZH/PyVisualOdometry/raw/master/img/chapter_2/5_ration_fow_focal_length.png)\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 | "![Vanishing Lines and Points](https://github.com/joelbarmettlerUZH/PyVisualOdometry/raw/master/img/chapter_2/6_vanishing_points_and_lines.png)\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 | "![Two parallel lines](https://github.com/joelbarmettlerUZH/PyVisualOdometry/raw/master/img/chapter_2/parallel_lines.png)\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 | "![Taking the limes of the vanishing line](https://github.com/joelbarmettlerUZH/PyVisualOdometry/raw/master/img/chapter_2/limes_of_vanishing_lines.png)\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 --------------------------------------------------------------------------------