summaryrefslogtreecommitdiff
path: root/thirdparty/linux/include/opencv2/xfeatures2d.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'thirdparty/linux/include/opencv2/xfeatures2d.hpp')
-rw-r--r--thirdparty/linux/include/opencv2/xfeatures2d.hpp842
1 files changed, 842 insertions, 0 deletions
diff --git a/thirdparty/linux/include/opencv2/xfeatures2d.hpp b/thirdparty/linux/include/opencv2/xfeatures2d.hpp
new file mode 100644
index 0000000..1185de0
--- /dev/null
+++ b/thirdparty/linux/include/opencv2/xfeatures2d.hpp
@@ -0,0 +1,842 @@
+/*
+By downloading, copying, installing or using the software you agree to this
+license. If you do not agree to this license, do not download, install,
+copy or use the software.
+
+ License Agreement
+ For Open Source Computer Vision Library
+ (3-clause BSD License)
+
+Copyright (C) 2013, OpenCV Foundation, all rights reserved.
+Third party copyrights are property of their respective owners.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ * Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+
+ * Neither the names of the copyright holders nor the names of the contributors
+ may be used to endorse or promote products derived from this software
+ without specific prior written permission.
+
+This software is provided by the copyright holders and contributors "as is" and
+any express or implied warranties, including, but not limited to, the implied
+warranties of merchantability and fitness for a particular purpose are
+disclaimed. In no event shall copyright holders or contributors be liable for
+any direct, indirect, incidental, special, exemplary, or consequential damages
+(including, but not limited to, procurement of substitute goods or services;
+loss of use, data, or profits; or business interruption) however caused
+and on any theory of liability, whether in contract, strict liability,
+or tort (including negligence or otherwise) arising in any way out of
+the use of this software, even if advised of the possibility of such damage.
+*/
+
+#ifndef __OPENCV_XFEATURES2D_HPP__
+#define __OPENCV_XFEATURES2D_HPP__
+
+#include "opencv2/features2d.hpp"
+#include "opencv2/xfeatures2d/nonfree.hpp"
+
+/** @defgroup xfeatures2d Extra 2D Features Framework
+@{
+ @defgroup xfeatures2d_experiment Experimental 2D Features Algorithms
+
+This section describes experimental algorithms for 2d feature detection.
+
+ @defgroup xfeatures2d_nonfree Non-free 2D Features Algorithms
+
+This section describes two popular algorithms for 2d feature detection, SIFT and SURF, that are
+known to be patented. Use them at your own risk.
+
+@}
+*/
+
+namespace cv
+{
+namespace xfeatures2d
+{
+
+//! @addtogroup xfeatures2d_experiment
+//! @{
+
+/** @brief Class implementing the FREAK (*Fast Retina Keypoint*) keypoint descriptor, described in @cite AOV12 .
+
+The algorithm propose a novel keypoint descriptor inspired by the human visual system and more
+precisely the retina, coined Fast Retina Key- point (FREAK). A cascade of binary strings is
+computed by efficiently comparing image intensities over a retinal sampling pattern. FREAKs are in
+general faster to compute with lower memory load and also more robust than SIFT, SURF or BRISK.
+They are competitive alternatives to existing keypoints in particular for embedded applications.
+
+@note
+ - An example on how to use the FREAK descriptor can be found at
+ opencv_source_code/samples/cpp/freak_demo.cpp
+ */
+class CV_EXPORTS_W FREAK : public Feature2D
+{
+public:
+
+ enum
+ {
+ NB_SCALES = 64, NB_PAIRS = 512, NB_ORIENPAIRS = 45
+ };
+
+ /**
+ @param orientationNormalized Enable orientation normalization.
+ @param scaleNormalized Enable scale normalization.
+ @param patternScale Scaling of the description pattern.
+ @param nOctaves Number of octaves covered by the detected keypoints.
+ @param selectedPairs (Optional) user defined selected pairs indexes,
+ */
+ CV_WRAP static Ptr<FREAK> create(bool orientationNormalized = true,
+ bool scaleNormalized = true,
+ float patternScale = 22.0f,
+ int nOctaves = 4,
+ const std::vector<int>& selectedPairs = std::vector<int>());
+};
+
+
+/** @brief The class implements the keypoint detector introduced by @cite Agrawal08, synonym of StarDetector. :
+ */
+class CV_EXPORTS_W StarDetector : public Feature2D
+{
+public:
+ //! the full constructor
+ CV_WRAP static Ptr<StarDetector> create(int maxSize=45, int responseThreshold=30,
+ int lineThresholdProjected=10,
+ int lineThresholdBinarized=8,
+ int suppressNonmaxSize=5);
+};
+
+/*
+ * BRIEF Descriptor
+ */
+
+/** @brief Class for computing BRIEF descriptors described in @cite calon2010 .
+
+@param bytes legth of the descriptor in bytes, valid values are: 16, 32 (default) or 64 .
+@param use_orientation sample patterns using keypoints orientation, disabled by default.
+
+ */
+class CV_EXPORTS_W BriefDescriptorExtractor : public Feature2D
+{
+public:
+ CV_WRAP static Ptr<BriefDescriptorExtractor> create( int bytes = 32, bool use_orientation = false );
+};
+
+/** @brief Class implementing the locally uniform comparison image descriptor, described in @cite LUCID
+
+An image descriptor that can be computed very fast, while being
+about as robust as, for example, SURF or BRIEF.
+
+@note It requires a color image as input.
+ */
+class CV_EXPORTS_W LUCID : public Feature2D
+{
+public:
+ /**
+ * @param lucid_kernel kernel for descriptor construction, where 1=3x3, 2=5x5, 3=7x7 and so forth
+ * @param blur_kernel kernel for blurring image prior to descriptor construction, where 1=3x3, 2=5x5, 3=7x7 and so forth
+ */
+ CV_WRAP static Ptr<LUCID> create(const int lucid_kernel = 1, const int blur_kernel = 2);
+};
+
+
+/*
+* LATCH Descriptor
+*/
+
+/** latch Class for computing the LATCH descriptor.
+If you find this code useful, please add a reference to the following paper in your work:
+Gil Levi and Tal Hassner, "LATCH: Learned Arrangements of Three Patch Codes", arXiv preprint arXiv:1501.03719, 15 Jan. 2015
+
+LATCH is a binary descriptor based on learned comparisons of triplets of image patches.
+
+* bytes is the size of the descriptor - can be 64, 32, 16, 8, 4, 2 or 1
+* rotationInvariance - whether or not the descriptor should compansate for orientation changes.
+* half_ssd_size - the size of half of the mini-patches size. For example, if we would like to compare triplets of patches of size 7x7x
+ then the half_ssd_size should be (7-1)/2 = 3.
+
+Note: the descriptor can be coupled with any keypoint extractor. The only demand is that if you use set rotationInvariance = True then
+ you will have to use an extractor which estimates the patch orientation (in degrees). Examples for such extractors are ORB and SIFT.
+
+Note: a complete example can be found under /samples/cpp/tutorial_code/xfeatures2D/latch_match.cpp
+
+*/
+class CV_EXPORTS_W LATCH : public Feature2D
+{
+public:
+ CV_WRAP static Ptr<LATCH> create(int bytes = 32, bool rotationInvariance = true, int half_ssd_size=3);
+};
+
+/** @brief Class implementing DAISY descriptor, described in @cite Tola10
+
+@param radius radius of the descriptor at the initial scale
+@param q_radius amount of radial range division quantity
+@param q_theta amount of angular range division quantity
+@param q_hist amount of gradient orientations range division quantity
+@param norm choose descriptors normalization type, where
+DAISY::NRM_NONE will not do any normalization (default),
+DAISY::NRM_PARTIAL mean that histograms are normalized independently for L2 norm equal to 1.0,
+DAISY::NRM_FULL mean that descriptors are normalized for L2 norm equal to 1.0,
+DAISY::NRM_SIFT mean that descriptors are normalized for L2 norm equal to 1.0 but no individual one is bigger than 0.154 as in SIFT
+@param H optional 3x3 homography matrix used to warp the grid of daisy but sampling keypoints remains unwarped on image
+@param interpolation switch to disable interpolation for speed improvement at minor quality loss
+@param use_orientation sample patterns using keypoints orientation, disabled by default.
+
+ */
+class CV_EXPORTS_W DAISY : public Feature2D
+{
+public:
+ enum
+ {
+ NRM_NONE = 100, NRM_PARTIAL = 101, NRM_FULL = 102, NRM_SIFT = 103,
+ };
+ CV_WRAP static Ptr<DAISY> create( float radius = 15, int q_radius = 3, int q_theta = 8,
+ int q_hist = 8, int norm = DAISY::NRM_NONE, InputArray H = noArray(),
+ bool interpolation = true, bool use_orientation = false );
+
+ /** @overload
+ * @param image image to extract descriptors
+ * @param keypoints of interest within image
+ * @param descriptors resulted descriptors array
+ */
+ virtual void compute( InputArray image, std::vector<KeyPoint>& keypoints, OutputArray descriptors ) = 0;
+
+ virtual void compute( InputArrayOfArrays images,
+ std::vector<std::vector<KeyPoint> >& keypoints,
+ OutputArrayOfArrays descriptors );
+
+ /** @overload
+ * @param image image to extract descriptors
+ * @param roi region of interest within image
+ * @param descriptors resulted descriptors array for roi image pixels
+ */
+ virtual void compute( InputArray image, Rect roi, OutputArray descriptors ) = 0;
+
+ /**@overload
+ * @param image image to extract descriptors
+ * @param descriptors resulted descriptors array for all image pixels
+ */
+ virtual void compute( InputArray image, OutputArray descriptors ) = 0;
+
+ /**
+ * @param y position y on image
+ * @param x position x on image
+ * @param orientation orientation on image (0->360)
+ * @param descriptor supplied array for descriptor storage
+ */
+ virtual void GetDescriptor( double y, double x, int orientation, float* descriptor ) const = 0;
+
+ /**
+ * @param y position y on image
+ * @param x position x on image
+ * @param orientation orientation on image (0->360)
+ * @param descriptor supplied array for descriptor storage
+ * @param H homography matrix for warped grid
+ */
+ virtual bool GetDescriptor( double y, double x, int orientation, float* descriptor, double* H ) const = 0;
+
+ /**
+ * @param y position y on image
+ * @param x position x on image
+ * @param orientation orientation on image (0->360)
+ * @param descriptor supplied array for descriptor storage
+ */
+ virtual void GetUnnormalizedDescriptor( double y, double x, int orientation, float* descriptor ) const = 0;
+
+ /**
+ * @param y position y on image
+ * @param x position x on image
+ * @param orientation orientation on image (0->360)
+ * @param descriptor supplied array for descriptor storage
+ * @param H homography matrix for warped grid
+ */
+ virtual bool GetUnnormalizedDescriptor( double y, double x, int orientation, float* descriptor , double *H ) const = 0;
+
+};
+
+/** @brief Class implementing the MSD (*Maximal Self-Dissimilarity*) keypoint detector, described in @cite Tombari14.
+
+The algorithm implements a novel interest point detector stemming from the intuition that image patches
+which are highly dissimilar over a relatively large extent of their surroundings hold the property of
+being repeatable and distinctive. This concept of "contextual self-dissimilarity" reverses the key
+paradigm of recent successful techniques such as the Local Self-Similarity descriptor and the Non-Local
+Means filter, which build upon the presence of similar - rather than dissimilar - patches. Moreover,
+it extends to contextual information the local self-dissimilarity notion embedded in established
+detectors of corner-like interest points, thereby achieving enhanced repeatability, distinctiveness and
+localization accuracy.
+
+*/
+
+class CV_EXPORTS_W MSDDetector : public Feature2D {
+
+public:
+
+ static Ptr<MSDDetector> create(int m_patch_radius = 3, int m_search_area_radius = 5,
+ int m_nms_radius = 5, int m_nms_scale_radius = 0, float m_th_saliency = 250.0f, int m_kNN = 4,
+ float m_scale_factor = 1.25f, int m_n_scales = -1, bool m_compute_orientation = false);
+};
+
+/** @brief Class implementing VGG (Oxford Visual Geometry Group) descriptor trained end to end
+using "Descriptor Learning Using Convex Optimisation" (DLCO) aparatus described in @cite Simonyan14.
+
+@param desc type of descriptor to use, VGG::VGG_120 is default (120 dimensions float)
+Available types are VGG::VGG_120, VGG::VGG_80, VGG::VGG_64, VGG::VGG_48
+@param isigma gaussian kernel value for image blur (default is 1.4f)
+@param img_normalize use image sample intensity normalization (enabled by default)
+@param use_orientation sample patterns using keypoints orientation, enabled by default
+@param scale_factor adjust the sampling window of detected keypoints to 64.0f (VGG sampling window)
+6.25f is default and fits for KAZE, SURF detected keypoints window ratio
+6.75f should be the scale for SIFT detected keypoints window ratio
+5.00f should be the scale for AKAZE, MSD, AGAST, FAST, BRISK keypoints window ratio
+0.75f should be the scale for ORB keypoints ratio
+
+@param dsc_normalize clamp descriptors to 255 and convert to uchar CV_8UC1 (disabled by default)
+
+ */
+class CV_EXPORTS_W VGG : public Feature2D
+{
+public:
+
+ CV_WRAP enum
+ {
+ VGG_120 = 100, VGG_80 = 101, VGG_64 = 102, VGG_48 = 103,
+ };
+
+ CV_WRAP static Ptr<VGG> create( int desc = VGG::VGG_120, float isigma = 1.4f,
+ bool img_normalize = true, bool use_scale_orientation = true,
+ float scale_factor = 6.25f, bool dsc_normalize = false );
+ /**
+ * @param image image to extract descriptors
+ * @param keypoints of interest within image
+ * @param descriptors resulted descriptors array
+ */
+ CV_WRAP virtual void compute( InputArray image, std::vector<KeyPoint>& keypoints, OutputArray descriptors ) = 0;
+
+};
+
+/** @brief Class implementing BoostDesc (Learning Image Descriptors with Boosting), described in
+@cite Trzcinski13a and @cite Trzcinski13b.
+
+@param desc type of descriptor to use, BoostDesc::BINBOOST_256 is default (256 bit long dimension)
+Available types are: BoostDesc::BGM, BoostDesc::BGM_HARD, BoostDesc::BGM_BILINEAR, BoostDesc::LBGM,
+BoostDesc::BINBOOST_64, BoostDesc::BINBOOST_128, BoostDesc::BINBOOST_256
+@param use_orientation sample patterns using keypoints orientation, enabled by default
+@param scale_factor adjust the sampling window of detected keypoints
+6.25f is default and fits for KAZE, SURF detected keypoints window ratio
+6.75f should be the scale for SIFT detected keypoints window ratio
+5.00f should be the scale for AKAZE, MSD, AGAST, FAST, BRISK keypoints window ratio
+0.75f should be the scale for ORB keypoints ratio
+1.50f was the default in original implementation
+
+@note BGM is the base descriptor where each binary dimension is computed as the output of a single weak learner.
+BGM_HARD and BGM_BILINEAR refers to same BGM but use different type of gradient binning. In the BGM_HARD that
+use ASSIGN_HARD binning type the gradient is assigned to the nearest orientation bin. In the BGM_BILINEAR that use
+ASSIGN_BILINEAR binning type the gradient is assigned to the two neighbouring bins. In the BGM and all other modes that use
+ASSIGN_SOFT binning type the gradient is assigned to 8 nearest bins according to the cosine value between the gradient
+angle and the bin center. LBGM (alias FP-Boost) is the floating point extension where each dimension is computed
+as a linear combination of the weak learner responses. BINBOOST and subvariants are the binary extensions of LBGM
+where each bit is computed as a thresholded linear combination of a set of weak learners.
+BoostDesc header files (boostdesc_*.i) was exported from original binaries with export-boostdesc.py script from
+samples subfolder.
+
+*/
+
+class CV_EXPORTS_W BoostDesc : public Feature2D
+{
+public:
+
+ CV_WRAP enum
+ {
+ BGM = 100, BGM_HARD = 101, BGM_BILINEAR = 102, LBGM = 200,
+ BINBOOST_64 = 300, BINBOOST_128 = 301, BINBOOST_256 = 302
+ };
+
+ CV_WRAP static Ptr<BoostDesc> create( int desc = BoostDesc::BINBOOST_256,
+ bool use_scale_orientation = true, float scale_factor = 6.25f );
+};
+
+
+/*
+* Position-Color-Texture signatures
+*/
+
+/**
+* @brief Class implementing PCT (position-color-texture) signature extraction
+* as described in @cite KrulisLS16.
+* The algorithm is divided to a feature sampler and a clusterizer.
+* Feature sampler produces samples at given set of coordinates.
+* Clusterizer then produces clusters of these samples using k-means algorithm.
+* Resulting set of clusters is the signature of the input image.
+*
+* A signature is an array of SIGNATURE_DIMENSION-dimensional points.
+* Used dimensions are:
+* weight, x, y position; lab color, contrast, entropy.
+* @cite KrulisLS16
+* @cite BeecksUS10
+*/
+class CV_EXPORTS_W PCTSignatures : public Algorithm
+{
+public:
+ /**
+ * @brief Lp distance function selector.
+ */
+ enum DistanceFunction
+ {
+ L0_25, L0_5, L1, L2, L2SQUARED, L5, L_INFINITY
+ };
+
+ /**
+ * @brief Point distributions supported by random point generator.
+ */
+ enum PointDistribution
+ {
+ UNIFORM, //!< Generate numbers uniformly.
+ REGULAR, //!< Generate points in a regular grid.
+ NORMAL //!< Generate points with normal (gaussian) distribution.
+ };
+
+ /**
+ * @brief Similarity function selector.
+ * @see
+ * Christian Beecks, Merih Seran Uysal, Thomas Seidl.
+ * Signature quadratic form distance.
+ * In Proceedings of the ACM International Conference on Image and Video Retrieval, pages 438-445.
+ * ACM, 2010.
+ * @cite BeecksUS10
+ * @note For selected distance function: \f[ d(c_i, c_j) \f] and parameter: \f[ \alpha \f]
+ */
+ enum SimilarityFunction
+ {
+ MINUS, //!< \f[ -d(c_i, c_j) \f]
+ GAUSSIAN, //!< \f[ e^{ -\alpha * d^2(c_i, c_j)} \f]
+ HEURISTIC //!< \f[ \frac{1}{\alpha + d(c_i, c_j)} \f]
+ };
+
+
+ /**
+ * @brief Creates PCTSignatures algorithm using sample and seed count.
+ * It generates its own sets of sampling points and clusterization seed indexes.
+ * @param initSampleCount Number of points used for image sampling.
+ * @param initSeedCount Number of initial clusterization seeds.
+ * Must be lower or equal to initSampleCount
+ * @param pointDistribution Distribution of generated points. Default: UNIFORM.
+ * Available: UNIFORM, REGULAR, NORMAL.
+ * @return Created algorithm.
+ */
+ CV_WRAP static Ptr<PCTSignatures> create(
+ const int initSampleCount = 2000,
+ const int initSeedCount = 400,
+ const int pointDistribution = 0);
+
+ /**
+ * @brief Creates PCTSignatures algorithm using pre-generated sampling points
+ * and number of clusterization seeds. It uses the provided
+ * sampling points and generates its own clusterization seed indexes.
+ * @param initSamplingPoints Sampling points used in image sampling.
+ * @param initSeedCount Number of initial clusterization seeds.
+ * Must be lower or equal to initSamplingPoints.size().
+ * @return Created algorithm.
+ */
+ CV_WRAP static Ptr<PCTSignatures> create(
+ const std::vector<Point2f>& initSamplingPoints,
+ const int initSeedCount);
+
+ /**
+ * @brief Creates PCTSignatures algorithm using pre-generated sampling points
+ * and clusterization seeds indexes.
+ * @param initSamplingPoints Sampling points used in image sampling.
+ * @param initClusterSeedIndexes Indexes of initial clusterization seeds.
+ * Its size must be lower or equal to initSamplingPoints.size().
+ * @return Created algorithm.
+ */
+ CV_WRAP static Ptr<PCTSignatures> create(
+ const std::vector<Point2f>& initSamplingPoints,
+ const std::vector<int>& initClusterSeedIndexes);
+
+
+
+ /**
+ * @brief Computes signature of given image.
+ * @param image Input image of CV_8U type.
+ * @param signature Output computed signature.
+ */
+ CV_WRAP virtual void computeSignature(
+ InputArray image,
+ OutputArray signature) const = 0;
+
+ /**
+ * @brief Computes signatures for multiple images in parallel.
+ * @param images Vector of input images of CV_8U type.
+ * @param signatures Vector of computed signatures.
+ */
+ CV_WRAP virtual void computeSignatures(
+ const std::vector<Mat>& images,
+ std::vector<Mat>& signatures) const = 0;
+
+ /**
+ * @brief Draws signature in the source image and outputs the result.
+ * Signatures are visualized as a circle
+ * with radius based on signature weight
+ * and color based on signature color.
+ * Contrast and entropy are not visualized.
+ * @param source Source image.
+ * @param signature Image signature.
+ * @param result Output result.
+ * @param radiusToShorterSideRatio Determines maximal radius of signature in the output image.
+ * @param borderThickness Border thickness of the visualized signature.
+ */
+ CV_WRAP static void drawSignature(
+ InputArray source,
+ InputArray signature,
+ OutputArray result,
+ float radiusToShorterSideRatio = 1.0 / 8,
+ int borderThickness = 1);
+
+ /**
+ * @brief Generates initial sampling points according to selected point distribution.
+ * @param initPoints Output vector where the generated points will be saved.
+ * @param count Number of points to generate.
+ * @param pointDistribution Point distribution selector.
+ * Available: UNIFORM, REGULAR, NORMAL.
+ * @note Generated coordinates are in range [0..1)
+ */
+ CV_WRAP static void generateInitPoints(
+ std::vector<Point2f>& initPoints,
+ const int count,
+ int pointDistribution);
+
+
+ /**** sampler ****/
+
+ /**
+ * @brief Number of initial samples taken from the image.
+ */
+ CV_WRAP virtual int getSampleCount() const = 0;
+
+ /**
+ * @brief Color resolution of the greyscale bitmap represented in allocated bits
+ * (i.e., value 4 means that 16 shades of grey are used).
+ * The greyscale bitmap is used for computing contrast and entropy values.
+ */
+ CV_WRAP virtual int getGrayscaleBits() const = 0;
+ /**
+ * @brief Color resolution of the greyscale bitmap represented in allocated bits
+ * (i.e., value 4 means that 16 shades of grey are used).
+ * The greyscale bitmap is used for computing contrast and entropy values.
+ */
+ CV_WRAP virtual void setGrayscaleBits(int grayscaleBits) = 0;
+
+ /**
+ * @brief Size of the texture sampling window used to compute contrast and entropy
+ * (center of the window is always in the pixel selected by x,y coordinates
+ * of the corresponding feature sample).
+ */
+ CV_WRAP virtual int getWindowRadius() const = 0;
+ /**
+ * @brief Size of the texture sampling window used to compute contrast and entropy
+ * (center of the window is always in the pixel selected by x,y coordinates
+ * of the corresponding feature sample).
+ */
+ CV_WRAP virtual void setWindowRadius(int radius) = 0;
+
+
+ /**
+ * @brief Weights (multiplicative constants) that linearly stretch individual axes of the feature space
+ * (x,y = position; L,a,b = color in CIE Lab space; c = contrast. e = entropy)
+ */
+ CV_WRAP virtual float getWeightX() const = 0;
+ /**
+ * @brief Weights (multiplicative constants) that linearly stretch individual axes of the feature space
+ * (x,y = position; L,a,b = color in CIE Lab space; c = contrast. e = entropy)
+ */
+ CV_WRAP virtual void setWeightX(float weight) = 0;
+
+ /**
+ * @brief Weights (multiplicative constants) that linearly stretch individual axes of the feature space
+ * (x,y = position; L,a,b = color in CIE Lab space; c = contrast. e = entropy)
+ */
+ CV_WRAP virtual float getWeightY() const = 0;
+ /**
+ * @brief Weights (multiplicative constants) that linearly stretch individual axes of the feature space
+ * (x,y = position; L,a,b = color in CIE Lab space; c = contrast. e = entropy)
+ */
+ CV_WRAP virtual void setWeightY(float weight) = 0;
+
+ /**
+ * @brief Weights (multiplicative constants) that linearly stretch individual axes of the feature space
+ * (x,y = position; L,a,b = color in CIE Lab space; c = contrast. e = entropy)
+ */
+ CV_WRAP virtual float getWeightL() const = 0;
+ /**
+ * @brief Weights (multiplicative constants) that linearly stretch individual axes of the feature space
+ * (x,y = position; L,a,b = color in CIE Lab space; c = contrast. e = entropy)
+ */
+ CV_WRAP virtual void setWeightL(float weight) = 0;
+
+ /**
+ * @brief Weights (multiplicative constants) that linearly stretch individual axes of the feature space
+ * (x,y = position; L,a,b = color in CIE Lab space; c = contrast. e = entropy)
+ */
+ CV_WRAP virtual float getWeightA() const = 0;
+ /**
+ * @brief Weights (multiplicative constants) that linearly stretch individual axes of the feature space
+ * (x,y = position; L,a,b = color in CIE Lab space; c = contrast. e = entropy)
+ */
+ CV_WRAP virtual void setWeightA(float weight) = 0;
+
+ /**
+ * @brief Weights (multiplicative constants) that linearly stretch individual axes of the feature space
+ * (x,y = position; L,a,b = color in CIE Lab space; c = contrast. e = entropy)
+ */
+ CV_WRAP virtual float getWeightB() const = 0;
+ /**
+ * @brief Weights (multiplicative constants) that linearly stretch individual axes of the feature space
+ * (x,y = position; L,a,b = color in CIE Lab space; c = contrast. e = entropy)
+ */
+ CV_WRAP virtual void setWeightB(float weight) = 0;
+
+ /**
+ * @brief Weights (multiplicative constants) that linearly stretch individual axes of the feature space
+ * (x,y = position; L,a,b = color in CIE Lab space; c = contrast. e = entropy)
+ */
+ CV_WRAP virtual float getWeightConstrast() const = 0;
+ /**
+ * @brief Weights (multiplicative constants) that linearly stretch individual axes of the feature space
+ * (x,y = position; L,a,b = color in CIE Lab space; c = contrast. e = entropy)
+ */
+ CV_WRAP virtual void setWeightContrast(float weight) = 0;
+
+ /**
+ * @brief Weights (multiplicative constants) that linearly stretch individual axes of the feature space
+ * (x,y = position; L,a,b = color in CIE Lab space; c = contrast. e = entropy)
+ */
+ CV_WRAP virtual float getWeightEntropy() const = 0;
+ /**
+ * @brief Weights (multiplicative constants) that linearly stretch individual axes of the feature space
+ * (x,y = position; L,a,b = color in CIE Lab space; c = contrast. e = entropy)
+ */
+ CV_WRAP virtual void setWeightEntropy(float weight) = 0;
+
+ /**
+ * @brief Initial samples taken from the image.
+ * These sampled features become the input for clustering.
+ */
+ CV_WRAP virtual std::vector<Point2f> getSamplingPoints() const = 0;
+
+
+
+ /**
+ * @brief Weights (multiplicative constants) that linearly stretch individual axes of the feature space.
+ * @param idx ID of the weight
+ * @param value Value of the weight
+ * @note
+ * WEIGHT_IDX = 0;
+ * X_IDX = 1;
+ * Y_IDX = 2;
+ * L_IDX = 3;
+ * A_IDX = 4;
+ * B_IDX = 5;
+ * CONTRAST_IDX = 6;
+ * ENTROPY_IDX = 7;
+ */
+ CV_WRAP virtual void setWeight(int idx, float value) = 0;
+ /**
+ * @brief Weights (multiplicative constants) that linearly stretch individual axes of the feature space.
+ * @param weights Values of all weights.
+ * @note
+ * WEIGHT_IDX = 0;
+ * X_IDX = 1;
+ * Y_IDX = 2;
+ * L_IDX = 3;
+ * A_IDX = 4;
+ * B_IDX = 5;
+ * CONTRAST_IDX = 6;
+ * ENTROPY_IDX = 7;
+ */
+ CV_WRAP virtual void setWeights(const std::vector<float>& weights) = 0;
+
+ /**
+ * @brief Translations of the individual axes of the feature space.
+ * @param idx ID of the translation
+ * @param value Value of the translation
+ * @note
+ * WEIGHT_IDX = 0;
+ * X_IDX = 1;
+ * Y_IDX = 2;
+ * L_IDX = 3;
+ * A_IDX = 4;
+ * B_IDX = 5;
+ * CONTRAST_IDX = 6;
+ * ENTROPY_IDX = 7;
+ */
+ CV_WRAP virtual void setTranslation(int idx, float value) = 0;
+ /**
+ * @brief Translations of the individual axes of the feature space.
+ * @param translations Values of all translations.
+ * @note
+ * WEIGHT_IDX = 0;
+ * X_IDX = 1;
+ * Y_IDX = 2;
+ * L_IDX = 3;
+ * A_IDX = 4;
+ * B_IDX = 5;
+ * CONTRAST_IDX = 6;
+ * ENTROPY_IDX = 7;
+ */
+ CV_WRAP virtual void setTranslations(const std::vector<float>& translations) = 0;
+
+ /**
+ * @brief Sets sampling points used to sample the input image.
+ * @param samplingPoints Vector of sampling points in range [0..1)
+ * @note Number of sampling points must be greater or equal to clusterization seed count.
+ */
+ CV_WRAP virtual void setSamplingPoints(std::vector<Point2f> samplingPoints) = 0;
+
+
+
+ /**** clusterizer ****/
+ /**
+ * @brief Initial seeds (initial number of clusters) for the k-means algorithm.
+ */
+ CV_WRAP virtual std::vector<int> getInitSeedIndexes() const = 0;
+ /**
+ * @brief Initial seed indexes for the k-means algorithm.
+ */
+ CV_WRAP virtual void setInitSeedIndexes(std::vector<int> initSeedIndexes) = 0;
+ /**
+ * @brief Number of initial seeds (initial number of clusters) for the k-means algorithm.
+ */
+ CV_WRAP virtual int getInitSeedCount() const = 0;
+
+ /**
+ * @brief Number of iterations of the k-means clustering.
+ * We use fixed number of iterations, since the modified clustering is pruning clusters
+ * (not iteratively refining k clusters).
+ */
+ CV_WRAP virtual int getIterationCount() const = 0;
+ /**
+ * @brief Number of iterations of the k-means clustering.
+ * We use fixed number of iterations, since the modified clustering is pruning clusters
+ * (not iteratively refining k clusters).
+ */
+ CV_WRAP virtual void setIterationCount(int iterationCount) = 0;
+
+ /**
+ * @brief Maximal number of generated clusters. If the number is exceeded,
+ * the clusters are sorted by their weights and the smallest clusters are cropped.
+ */
+ CV_WRAP virtual int getMaxClustersCount() const = 0;
+ /**
+ * @brief Maximal number of generated clusters. If the number is exceeded,
+ * the clusters are sorted by their weights and the smallest clusters are cropped.
+ */
+ CV_WRAP virtual void setMaxClustersCount(int maxClustersCount) = 0;
+
+ /**
+ * @brief This parameter multiplied by the index of iteration gives lower limit for cluster size.
+ * Clusters containing fewer points than specified by the limit have their centroid dismissed
+ * and points are reassigned.
+ */
+ CV_WRAP virtual int getClusterMinSize() const = 0;
+ /**
+ * @brief This parameter multiplied by the index of iteration gives lower limit for cluster size.
+ * Clusters containing fewer points than specified by the limit have their centroid dismissed
+ * and points are reassigned.
+ */
+ CV_WRAP virtual void setClusterMinSize(int clusterMinSize) = 0;
+
+ /**
+ * @brief Threshold euclidean distance between two centroids.
+ * If two cluster centers are closer than this distance,
+ * one of the centroid is dismissed and points are reassigned.
+ */
+ CV_WRAP virtual float getJoiningDistance() const = 0;
+ /**
+ * @brief Threshold euclidean distance between two centroids.
+ * If two cluster centers are closer than this distance,
+ * one of the centroid is dismissed and points are reassigned.
+ */
+ CV_WRAP virtual void setJoiningDistance(float joiningDistance) = 0;
+
+ /**
+ * @brief Remove centroids in k-means whose weight is lesser or equal to given threshold.
+ */
+ CV_WRAP virtual float getDropThreshold() const = 0;
+ /**
+ * @brief Remove centroids in k-means whose weight is lesser or equal to given threshold.
+ */
+ CV_WRAP virtual void setDropThreshold(float dropThreshold) = 0;
+
+ /**
+ * @brief Distance function selector used for measuring distance between two points in k-means.
+ */
+ CV_WRAP virtual int getDistanceFunction() const = 0;
+ /**
+ * @brief Distance function selector used for measuring distance between two points in k-means.
+ * Available: L0_25, L0_5, L1, L2, L2SQUARED, L5, L_INFINITY.
+ */
+ CV_WRAP virtual void setDistanceFunction(int distanceFunction) = 0;
+
+};
+
+/**
+* @brief Class implementing Signature Quadratic Form Distance (SQFD).
+* @see Christian Beecks, Merih Seran Uysal, Thomas Seidl.
+* Signature quadratic form distance.
+* In Proceedings of the ACM International Conference on Image and Video Retrieval, pages 438-445.
+* ACM, 2010.
+* @cite BeecksUS10
+*/
+class CV_EXPORTS_W PCTSignaturesSQFD : public Algorithm
+{
+public:
+
+ /**
+ * @brief Creates the algorithm instance using selected distance function,
+ * similarity function and similarity function parameter.
+ * @param distanceFunction Distance function selector. Default: L2
+ * Available: L0_25, L0_5, L1, L2, L2SQUARED, L5, L_INFINITY
+ * @param similarityFunction Similarity function selector. Default: HEURISTIC
+ * Available: MINUS, GAUSSIAN, HEURISTIC
+ * @param similarityParameter Parameter of the similarity function.
+ */
+ CV_WRAP static Ptr<PCTSignaturesSQFD> create(
+ const int distanceFunction = 3,
+ const int similarityFunction = 2,
+ const float similarityParameter = 1.0f);
+
+ /**
+ * @brief Computes Signature Quadratic Form Distance of two signatures.
+ * @param _signature0 The first signature.
+ * @param _signature1 The second signature.
+ */
+ CV_WRAP virtual float computeQuadraticFormDistance(
+ InputArray _signature0,
+ InputArray _signature1) const = 0;
+
+ /**
+ * @brief Computes Signature Quadratic Form Distance between the reference signature
+ * and each of the other image signatures.
+ * @param sourceSignature The signature to measure distance of other signatures from.
+ * @param imageSignatures Vector of signatures to measure distance from the source signature.
+ * @param distances Output vector of measured distances.
+ */
+ CV_WRAP virtual void computeQuadraticFormDistances(
+ const Mat& sourceSignature,
+ const std::vector<Mat>& imageSignatures,
+ std::vector<float>& distances) const = 0;
+
+};
+
+//! @}
+
+}
+}
+
+#endif