Git Product home page Git Product logo

ser94mor / 2d-feature-tracking Goto Github PK

View Code? Open in Web Editor NEW
6.0 1.0 1.0 5.43 MB

Project: 2D Feature Tracking || Udacity: Sensor Fusion Engineer Nanodegree

License: MIT License

CMake 0.08% C++ 51.64% Jupyter Notebook 48.28%
collision-avoidance time-to-collision opencv compter-vision feature-detection self-driving-car udacity cpp camera fast brisk brief orb akaze shi-tomasi-detection harris-corners sift freak flann knn

2d-feature-tracking's Introduction

2D Feature Tracking

Sensor Fusion Engineer Nanodegree

visualization.png

The purpose of this project is to discover the most appropriate combination of key-point detectors, descriptors, and matching techniques for the collision avoidance system relying upon the Time-to-Collision (TTC) metric calculated based on the sequence of images provided by a mono camera mounted on top of a vehicle based on the trade-off between the number of key-points discovered, the number of matches between the consecutive images and the processing time required to produce one estimation of TTC.

The default OpenCV implementation parameters were used for each entity (detectors, descriptors, matchers, selectors). The measurements were taken on a laptop having the GPU: NVIDIA GeForce GTX 1060 Max-Q 6GiB; CPU: Intel Core i7-8750H; RAM: 16 GiB.

Keypoints Statistics

keypoints_statistics.png To see all the details, open the image above in a new tab and zoom.

Matches Statistics

matches_statistics.png To see all the details, open the image above in a new tab and zoom.

Timings Statistics

timings_statistics.png
To see all the details, open the image above in a new tab and zoom. The values near each box present the mean values.

Analysis

Number of Keypoints

Below is a list of keypoint detectors sorted in descending order based on the mean number of keypoints identified among 10 images. The analysis is based on the keypoint data presented in the section Keypoints Statistics.

BRISK AKAZE FAST SIFT SHITOMASI ORB HARRIS
276 167 149 138 117 116 24
Number of Matches

Below is a list of TOP-5 combinations of detector+descriptor sorted in descending order based on the mean number of identified matches among 9 pairs of 10 consecutive images. The analysis is based on the matches data presented in the section Matches Statistics.

Place Combination(s)
1st (278) BRISK+SIFT, BRISK+BRIEF, BRISK+BRISK, BRISK+ORB
2nd (258) BRISK+FREAK
3rd (165) AKAZE+SIFT, AKAZE+FREAK, AKAZE+ORB, AKAZE+AKAZE, AKAZE+BRIEF, AKAZE+BRISK
4th (149) FAST+BRIEF, FAST+SIFT, FAST+BRISK, FAST+ORB, FAST+FREAK
5th (138) SIFT+BRISK, SIFT+BRIEF, SIFT+SIFT
Timings

Below is a list of TOP-5 detectors sorted in descending order based on the mean time required to identify keypoints in one image. The analysis is based on the timings data presented in the section Timings Statistics.

FAST ORB HARRIS SHITOMASI BRISK
0.74 ms 5.22 ms 8.86 ms 9.29 ms 27.07 ms

Below is a list of TOP-5 descriptors sorted in descending order based on the mean time required to compute a set of descriptors for all the keypoints in one image. The analysis is based on the timings data presented in the section Timings Statistics.

BRIEF BRISK ORB SIFT AKAZE
0.59 ms 1.28 ms 1.73 ms 15.41 ms 29.16 ms
TOP-3 Detector+Descriptor Combinations

Assuming that the number of keypoints, number of matches, and timings ratings contribute equally, the TOP-3 detector-descriptor combinations are chosen.

Place Combination Score
1st place (if you value accuracy) BRISK+BRIEF 8 = 1 + 1 + 5 + 1
2nd place (if you value speed) FAST+BRIEF 9 = 3 + 4 + 1 + 1
2nd place (if you value accuracy) BRISK+BRISK 9 = 1 + 1 + 5 + 2
3rd place (if you value speed) FAST+BRISK 10 = 3 + 4 + 1 + 2
Summary

The choice between BRISK+BRIEF and FAST+BRIEF should be based on the hardware available and accuracy requirements. From visual observations it is clear that both combinations produce some false matches on each pair of images, that is why it is probably better to choose FAST+BRIEF combination for collision avoidance system, given the significant gap between the FAST and BRISK keypoint detection times.

The winner is FAST detector + BRIEF descriptor combination.

2d-feature-tracking's People

Contributors

ser94mor avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar

Forkers

ankushkansal

2d-feature-tracking's Issues

MP.3 Keypoint Removal

Remove all keypoints outside of a pre-defined rectangle and only use the keypoints within the rectangle for further processing.

MP.6 Descriptor Distance Ratio

Use the K-Nearest-Neighbor matching to implement the descriptor distance ratio test, which looks at the ratio of best vs. second-best match to decide whether to keep an associated pair of keypoints.

MP.4 Keypoint Descriptors

Implement descriptors BRIEF, ORB, FREAK, AKAZE and SIFT and make them selectable by setting a string accordingly.

MP.5 Descriptor Matching

Implement FLANN matching as well as k-nearest neighbor selection. Both methods must be selectable using the respective strings in the main function.

MP.8 Performance Evaluation 2

Count the number of matched keypoints for all 10 images using all possible combinations of detectors and descriptors. In the matching step, the BF approach is used with the descriptor distance ratio set to 0.8.

MP.2 Keypoint Detection

Implement detectors HARRIS, FAST, BRISK, ORB, AKAZE, and SIFT and make them selectable by setting a string accordingly.

MP.9 Performance Evaluation 3

Log the time it takes for keypoint detection and descriptor extraction. The results must be entered into a spreadsheet and based on this data, the TOP3 detector / descriptor combinations must be recommended as the best choice for our purpose of detecting keypoints on vehicles.

MP.7 Performance Evaluation 1

Count the number of keypoints on the preceding vehicle for all 10 images and take note of the distribution of their neighborhood size. Do this for all the detectors you have implemented.

MP.1 Data Buffer Optimization

Implement a vector for dataBuffer objects whose size does not exceed a limit (e.g. 2 elements). This can be achieved by pushing in new elements on one end and removing elements on the other end.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.