Added RootSIFT (issue #8): see "Feature2D/SIFT_rootSIFT" parameter
This commit is contained in:
parent
9525a55617
commit
138d004169
@ -189,6 +189,7 @@ class FINDOBJECT_EXP Settings
|
|||||||
PARAMETER(Feature2D, SIFT_contrastThreshold, double, 0.04, "The contrast threshold used to filter out weak features in semi-uniform (low-contrast) regions. The larger the threshold, the less features are produced by the detector.");
|
PARAMETER(Feature2D, SIFT_contrastThreshold, double, 0.04, "The contrast threshold used to filter out weak features in semi-uniform (low-contrast) regions. The larger the threshold, the less features are produced by the detector.");
|
||||||
PARAMETER(Feature2D, SIFT_edgeThreshold, double, 10, "The threshold used to filter out edge-like features. Note that the its meaning is different from the contrastThreshold, i.e. the larger the edgeThreshold, the less features are filtered out (more features are retained).");
|
PARAMETER(Feature2D, SIFT_edgeThreshold, double, 10, "The threshold used to filter out edge-like features. Note that the its meaning is different from the contrastThreshold, i.e. the larger the edgeThreshold, the less features are filtered out (more features are retained).");
|
||||||
PARAMETER(Feature2D, SIFT_sigma, double, 1.6, "The sigma of the Gaussian applied to the input image at the octave #0. If your image is captured with a weak camera with soft lenses, you might want to reduce the number.");
|
PARAMETER(Feature2D, SIFT_sigma, double, 1.6, "The sigma of the Gaussian applied to the input image at the octave #0. If your image is captured with a weak camera with soft lenses, you might want to reduce the number.");
|
||||||
|
PARAMETER(Feature2D, SIFT_rootSIFT, bool, false, "RootSIFT descriptors.");
|
||||||
|
|
||||||
PARAMETER(Feature2D, SURF_hessianThreshold, double, 600.0, "Threshold for hessian keypoint detector used in SURF.");
|
PARAMETER(Feature2D, SURF_hessianThreshold, double, 600.0, "Threshold for hessian keypoint detector used in SURF.");
|
||||||
PARAMETER(Feature2D, SURF_nOctaves, int, 4, "Number of pyramid octaves the keypoint detector will use.");
|
PARAMETER(Feature2D, SURF_nOctaves, int, 4, "Number of pyramid octaves the keypoint detector will use.");
|
||||||
|
|||||||
@ -460,6 +460,26 @@ void computeFeatures(
|
|||||||
}
|
}
|
||||||
timeExtraction+=timeStep.restart();
|
timeExtraction+=timeStep.restart();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if( Settings::getFeature2D_SIFT_rootSIFT() &&
|
||||||
|
Settings::currentDescriptorType() == "SIFT" &&
|
||||||
|
!descriptors.empty())
|
||||||
|
{
|
||||||
|
UINFO("Performing RootSIFT...");
|
||||||
|
// see http://www.pyimagesearch.com/2015/04/13/implementing-rootsift-in-python-and-opencv/
|
||||||
|
// apply the Hellinger kernel by first L1-normalizing and taking the
|
||||||
|
// square-root
|
||||||
|
for(int i=0; i<descriptors.rows; ++i)
|
||||||
|
{
|
||||||
|
descriptors.row(i) = descriptors.row(i) / cv::sum(descriptors.row(i))[0];
|
||||||
|
cv::sqrt(descriptors.row(i), descriptors.row(i));
|
||||||
|
|
||||||
|
// By taking the L1 norm, followed by the square-root, we have
|
||||||
|
// already L2 normalized the feature vector and further normalization
|
||||||
|
// is not needed.
|
||||||
|
//descs /= (np.linalg.norm(descs, axis=1, ord=2) + eps);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user