- STL C++ container deque is used to implement the data buffer.
- SHITOMASI, HARRIS, FAST, BRISK, ORB, AKAZE, and SIFT detectors are utilized for features detection and made selectable by setting a string accordingly.
- All keypoints outside of a pre-defined rectangle(preceding vehicle) are removed and only the keypoints within the rectangle are considered for further processing.
- BRISK, BRIEF, ORB, FREAK, AKAZE and SIFT descriptors implemented and made selectable by setting a string accordingly.
- FLANN matching as well as k-nearest neighbor selection are implemented. Both methods are selectable using the respective strings in the main function.
- In the Brute force matching, the metric used for matching keypoints is L2 norm for HOG based descriptors(SIFT) and Hamming distance for binary based descriptors(BRIEF, BRISK, ...etc).
- The 2-Nearest-Neighbor underwent the ratio test, to decide whether the 1-NN is much better than the 2-NN and can be selected as a match or there are many ambigous similar matches and thus 1-NN can be rejected.
| Detector | avg. P.V.K | avg. P.V.K/ avg. T.D.K (%) | Notes on the keypoints |
|---|---|---|---|
| SHI-TOMASI | 118 | 9 | well distributed |
| HARRIS | 25 | 15 | well distributed (zero overlapping) |
| SIFT | 139 | 10 | well distributed |
| FAST | 149 | 8 | some clusters and overlapping |
| BRISK | 276 | 10 | some clusters and overlapping |
| ORB | 116 | 23 | some clusters and overlapping |
| AKAZE | 167 | 12 | scattered in a certain area |
P.V.K: Keypoints detected on the preceding vehicle.
T.D.K: Total detected keypoints.
| Detector\Descriptor | BRISK | BRIEF | ORB | FREAK | AKAZE | SIFT |
|---|---|---|---|---|---|---|
| SHI-TOMASI | 85 | 105 | 101 | 85 | _ | 103 |
| HARRIS | 16 | 19 | 18 | 16 | _ | 18 |
| SIFT | 66 | 78 | _ | 66 | _ | 89 |
| FAST | 100 | 122 | 120 | 98 | _ | 116 |
| BRISK | 174 | 189 | 168 | 170 | _ | 183 |
| ORB | 83 | 61 | 85 | 47 | _ | 85 |
| AKAZE | 135 | 141 | 132 | 132 | 140 | 141 |
| Detector\Descriptor | BRISK | BRIEF | ORB | FREAK | AKAZE | SIFT |
|---|---|---|---|---|---|---|
| SHI-TOMASI | 14.8 | 13.5 | 15.8 | 32 | _ | 29.5 |
| HARRIS | 14.8 | 14 | 16.2 | 32.7 | _ | 29.2 |
| SIFT | 76.7 | 76.2 | _ | 95.3 | _ | 126.9 |
| FAST | 2.7 | 1.7 | 3.5 | 23.4 | _ | 16.7 |
| BRISK | 64.4 | 61.1 | 71.5 | 85.2 | _ | 85.1 |
| ORB | 9.1 | 8 | 17.3 | 30.3 | _ | 32.4 |
| AKAZE | 63.4 | 61 | 69.1 | 80.5 | 12.9 | 73 |
As expected the binary based detectors/descriptors required less processing time. Based on the recoreded data, The best three detector/descriptor combinations with respect to the total processing time are FAST|BRIEF, FAST|BRISK, and FAST|ORB.