Sparse matching
Name: “sparse_matching”
Description
Compute keypoints matches on pair images
Architecture Note
This application uses a plugin-based architecture separating the application layer from the method layer:
Application Parameters: These control the parallelization at the application level (tiling, margins, match validation, etc.) and are independent of the matching algorithm used.
Method Parameters: These are algorithm-specific parameters (e.g., SIFT tuning parameters) and belong to the selected method plugin.
The application parameter selects which parallelization strategy to use. The method parameter selects which matching algorithm/preset to use.
Both application and method may have their own parameters, which should then be put all together in the sparse_matching configuration key.
Applications
Basic Application
Name |
Description |
Type |
Available value |
Default value |
Required |
|---|---|---|---|---|---|
application |
Application to use in the pipeline |
string |
“basic” |
“basic” |
No |
method |
Method to use for sparse matching |
string |
“sift” |
“sift” |
No |
elevation_delta_lower_bound |
Expected lower bound for elevation delta with respect to input low resolution dem in meters |
int, float |
None |
No |
|
elevation_delta_upper_bound |
Expected upper bound for elevation delta with respect to input low resolution dem in meters |
int, float |
None |
No |
|
epipolar_error_upper_bound |
Expected upper bound for epipolar error in pixels |
float |
should be > 0 |
10.0 |
No |
epipolar_error_maximum_bias |
Maximum bias for epipolar error in pixels |
float |
should be >= 0 |
50.0 |
No |
save_intermediate_data |
Save matches in epipolar geometry (4 first columns) and sensor geometry (4 last columns) |
boolean |
false |
No |
|
tile_margin |
Margin to use on tiles |
int |
should be > 0 |
10 |
No |
minimum_nb_matches |
Minimum number of matches that must be computed to continue pipeline |
int |
should be > 0 |
90 |
No |
decimation_factor |
Reduce the number of keypoints |
int |
should be > 0 |
30 |
No |
disparity_bounds_estimation |
Parameters for the estimation of disparity interval |
dict |
{} |
No |
Disparity bounds estimation:
Name |
Description |
Type |
Available value |
Default value |
Required |
|---|---|---|---|---|---|
activated |
activates estimation of disparity interval from SIFT matches |
bool |
True |
No |
|
percentile |
percentage of SIFT matches to ignore |
int |
1 |
No |
|
upper_margin |
margin (in meters) added to altitude of higher SIFT match retained |
int |
1000 |
No |
|
lower_margin |
margin (in meters) substracted from altitude of lower SIFT match retained |
int |
500 |
No |
Note
‘elevation_delta_lower_bound’ and ‘elevation_delta_upper_bound’ are overidden to [-1000, 9000] in default pipeline if no initial elevation is set. If initial elevation is set, it is overridden to [-500, 1000].
Methods
SIFT Method
Name: “sift”
Description: Scale-Invariant Feature Transform (SIFT) based sparse matching
The SIFT method parameters are automatically selected from the sparse matching configuration above when method is set to “sift”.
Method-specific Parameters:
Name |
Description |
Type |
Available value |
Default value |
Required |
|---|---|---|---|---|---|
sift_matching_threshold |
Threshold for the ratio to nearest second match |
float |
should be > 0 |
0.7 |
No |
sift_n_octave |
The number of octaves of the Difference of Gaussians scale space |
int |
should be > 0 |
8 |
No |
sift_n_scale_per_octave |
The numbers of levels per octave of the Difference of Gaussians scale space |
int |
should be > 0 |
3 |
No |
sift_peak_threshold |
Constrast threshold to discard a match (at None it will be set according to image type) |
float |
should be > 0 |
4.0 |
No |
sift_edge_threshold |
Distance to image edge threshold to discard a match |
float |
10.0 |
No |
|
sift_magnification |
The descriptor magnification factor |
float |
should be > 0 |
7.0 |
No |
sift_window_size |
smaller values let the center of the descriptor count more |
int |
should be > 0 |
2 |
No |
sift_back_matching |
Also check that right vs. left gives same match |
boolean |
true |
No |
|
used_band |
Name of band used for correlation |
int |
should be in input sensor |
“b0” |
No |
For more information about SIFT parameters, please refer to the VLFEAT SIFT documentation.
Note
For the decimation factor, a value of 33 means that we divide the number of sift by 3, a value of 100 means that we do not decimate them
Examples
Minimal example:
--- applications: sparse_matching: application: basic method: sift
{ "applications": { "sparse_matching": { "application": "basic", "method": "sift" } } }
Example with both application and method parameters:
--- applications: sparse_matching: application: basic method: sift tile_margin: 12 minimum_nb_matches: 120 decimation_factor: 40 disparity_bounds_estimation: activated: true percentile: 1 lower_margin: 500 upper_margin: 1000 sift_matching_threshold: 0.7 sift_n_octave: 8 sift_peak_threshold: 4.0 sift_back_matching: true used_band: b0
{ "applications": { "sparse_matching": { "application": "basic", "method": "sift", "tile_margin": 12, "minimum_nb_matches": 120, "decimation_factor": 40, "disparity_bounds_estimation": { "activated": true, "percentile": 1, "lower_margin": 500, "upper_margin": 1000 }, "sift_matching_threshold": 0.7, "sift_n_octave": 8, "sift_peak_threshold": 4.0, "sift_back_matching": true, "used_band": "b0" } } }