Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[feature] sift: update default values, add new filtering and add dsp-sift variation #935

Merged
merged 24 commits into from
Dec 1, 2020

Conversation

fabiencastan
Copy link
Member

Description

Feature point quality has a critical impact on SfM and Panorama pipelines.
This PR re-evaluate the default parameters and add new filtering strategies to be less impacted by the peak threshold in standard sift. This parameter is critical in particular on HDR images.

Features list

  • Update default sift thresholds
  • Add new feature points filtering
  • Add dsp-sift variation

Implementation remarks

  • Update vlfeat to 0.9.21
  • vlfeat: build as shared library and remove init/uninit on dll load
  • vlfeat: remove vlcov internal buffer to allow multi-threading (use an explicit parameter instead)

firstScale is changed only based on input image resolution
Use a new explicit parameter instead of to allow multi-threading on descriptor extraction.
- add NonExtremaFiltering
- numOctaves: use auto instead of fixed value
- firstOctave is change when the image is small
And should thus be called explicitely before using other vlfeat
functions.
@fabiencastan fabiencastan requested review from a user and simogasp November 26, 2020 09:29
ghost
ghost previously approved these changes Nov 27, 2020
frameAtScale.a21 *= dspScale;
frameAtScale.a22 *= dspScale;

vl_covdet_extract_patch_for_frame(covdet.get(), patch.data(), kPatchResolution, &internalBuffer,
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

To me, this is extracting a sub image at a given location at an interpolated scale.

I assume the scale interpolation is based on the existing, pre-computed scales. So this is bounded by the parameters of the sift detector. As such, shouldn't the scales be computed to make sure that for each keypoint, we are able to get a range of scales large enough ?

src/aliceVision/feature/ImageDescriber.hpp Outdated Show resolved Hide resolved
src/aliceVision/feature/ImageDescriber.hpp Outdated Show resolved Hide resolved
src/aliceVision/feature/ImageDescriber.hpp Outdated Show resolved Hide resolved
src/aliceVision/feature/ImageDescriber.hpp Show resolved Hide resolved
src/aliceVision/feature/ImageDescriber.hpp Outdated Show resolved Hide resolved
src/aliceVision/feature/imageDescriberCommon.hpp Outdated Show resolved Hide resolved
src/aliceVision/feature/imageStats.hpp Outdated Show resolved Hide resolved
src/aliceVision/feature/imageStats.hpp Outdated Show resolved Hide resolved
Comment on lines +28 to +29
case feature::EImageDescriberType::DSPSIFT: return "yellow";

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
case feature::EImageDescriberType::DSPSIFT: return "yellow";
case feature::EImageDescriberType::DSPSIFT: return "yellow";

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I do not see the change.

src/aliceVision/feature/sift/SIFT.cpp Outdated Show resolved Hide resolved
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants