OpenCV with the refactored features2d compiles! contrib is broken for now; the tests are not tried yet
parent
2e915026a0
commit
09df1a286b
27 changed files with 1856 additions and 2233 deletions
@ -0,0 +1,159 @@ |
|||||||
|
/*M///////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
|
||||||
|
//
|
||||||
|
// 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
|
||||||
|
//
|
||||||
|
// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.
|
||||||
|
// Copyright (C) 2009, Willow Garage Inc., 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:
|
||||||
|
//
|
||||||
|
// * Redistribution's of source code must retain the above copyright notice,
|
||||||
|
// this list of conditions and the following disclaimer.
|
||||||
|
//
|
||||||
|
// * Redistribution's 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.
|
||||||
|
//
|
||||||
|
// * The name of the copyright holders may not 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 the Intel Corporation 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.
|
||||||
|
//
|
||||||
|
//M*/
|
||||||
|
|
||||||
|
#include "precomp.hpp" |
||||||
|
|
||||||
|
namespace cv |
||||||
|
{ |
||||||
|
|
||||||
|
using std::vector; |
||||||
|
|
||||||
|
Feature2D::~Feature2D() {} |
||||||
|
|
||||||
|
/*
|
||||||
|
* Detect keypoints in an image. |
||||||
|
* image The image. |
||||||
|
* keypoints The detected keypoints. |
||||||
|
* mask Mask specifying where to look for keypoints (optional). Must be a char |
||||||
|
* matrix with non-zero values in the region of interest. |
||||||
|
*/ |
||||||
|
void Feature2D::detect( InputArray image, |
||||||
|
std::vector<KeyPoint>& keypoints, |
||||||
|
InputArray mask ) |
||||||
|
{ |
||||||
|
detectAndCompute(image, mask, keypoints, noArray(), false); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
void Feature2D::detect( InputArrayOfArrays _images, |
||||||
|
std::vector<std::vector<KeyPoint> >& keypoints, |
||||||
|
InputArrayOfArrays _masks ) |
||||||
|
{ |
||||||
|
vector<Mat> images, masks; |
||||||
|
|
||||||
|
_images.getMatVector(images); |
||||||
|
size_t i, nimages = images.size(); |
||||||
|
|
||||||
|
if( !_masks.empty() ) |
||||||
|
{ |
||||||
|
_masks.getMatVector(masks); |
||||||
|
CV_Assert(masks.size() == nimages); |
||||||
|
} |
||||||
|
|
||||||
|
keypoints.resize(nimages); |
||||||
|
|
||||||
|
for( i = 0; i < nimages; i++ ) |
||||||
|
{ |
||||||
|
detect(images[i], keypoints[i], masks.empty() ? Mat() : masks[i] ); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
/*
|
||||||
|
* Compute the descriptors for a set of keypoints in an image. |
||||||
|
* image The image. |
||||||
|
* keypoints The input keypoints. Keypoints for which a descriptor cannot be computed are removed. |
||||||
|
* descriptors Copmputed descriptors. Row i is the descriptor for keypoint i. |
||||||
|
*/ |
||||||
|
void Feature2D::compute( InputArray image, |
||||||
|
std::vector<KeyPoint>& keypoints, |
||||||
|
OutputArray descriptors ) |
||||||
|
{ |
||||||
|
detectAndCompute(image, noArray(), keypoints, descriptors, true); |
||||||
|
} |
||||||
|
|
||||||
|
void Feature2D::compute( InputArrayOfArrays _images, |
||||||
|
std::vector<std::vector<KeyPoint> >& keypoints, |
||||||
|
OutputArrayOfArrays _descriptors ) |
||||||
|
{ |
||||||
|
if( !_descriptors.needed() ) |
||||||
|
return; |
||||||
|
|
||||||
|
vector<Mat> images; |
||||||
|
|
||||||
|
_images.getMatVector(images); |
||||||
|
size_t i, nimages = images.size(); |
||||||
|
|
||||||
|
CV_Assert( keypoints.size() == nimages ); |
||||||
|
CV_Assert( _descriptors.kind() == _InputArray::STD_VECTOR_MAT ); |
||||||
|
|
||||||
|
vector<Mat>& descriptors = *(vector<Mat>*)_descriptors.getObj(); |
||||||
|
descriptors.resize(nimages); |
||||||
|
|
||||||
|
for( i = 0; i < nimages; i++ ) |
||||||
|
{ |
||||||
|
compute(images[i], keypoints[i], descriptors[i]); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
/* Detects keypoints and computes the descriptors */ |
||||||
|
void Feature2D::detectAndCompute( InputArray, InputArray, |
||||||
|
std::vector<KeyPoint>&, |
||||||
|
OutputArray, |
||||||
|
bool ) |
||||||
|
{ |
||||||
|
CV_Error(Error::StsNotImplemented, ""); |
||||||
|
} |
||||||
|
|
||||||
|
int Feature2D::descriptorSize() const |
||||||
|
{ |
||||||
|
return 0; |
||||||
|
} |
||||||
|
|
||||||
|
int Feature2D::descriptorType() const |
||||||
|
{ |
||||||
|
return CV_32F; |
||||||
|
} |
||||||
|
|
||||||
|
int Feature2D::defaultNorm() const |
||||||
|
{ |
||||||
|
int tp = descriptorType(); |
||||||
|
return tp == CV_8U ? NORM_HAMMING : NORM_L2; |
||||||
|
} |
||||||
|
|
||||||
|
// Return true if detector object is empty
|
||||||
|
bool Feature2D::empty() const |
||||||
|
{ |
||||||
|
return true; |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -1,199 +0,0 @@ |
|||||||
/*M///////////////////////////////////////////////////////////////////////////////////////
|
|
||||||
//
|
|
||||||
// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
|
|
||||||
//
|
|
||||||
// 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
|
|
||||||
//
|
|
||||||
// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.
|
|
||||||
// Copyright (C) 2009, Willow Garage Inc., 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:
|
|
||||||
//
|
|
||||||
// * Redistribution's of source code must retain the above copyright notice,
|
|
||||||
// this list of conditions and the following disclaimer.
|
|
||||||
//
|
|
||||||
// * Redistribution's 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.
|
|
||||||
//
|
|
||||||
// * The name of the copyright holders may not 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 the Intel Corporation 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.
|
|
||||||
//
|
|
||||||
//M*/
|
|
||||||
|
|
||||||
#include "precomp.hpp" |
|
||||||
|
|
||||||
#if 0 |
|
||||||
|
|
||||||
using namespace cv; |
|
||||||
|
|
||||||
Ptr<Feature2D> Feature2D::create( const String& feature2DType ) |
|
||||||
{ |
|
||||||
return Algorithm::create<Feature2D>("Feature2D." + feature2DType); |
|
||||||
} |
|
||||||
|
|
||||||
/////////////////////// AlgorithmInfo for various detector & descriptors ////////////////////////////
|
|
||||||
|
|
||||||
/* NOTE!!!
|
|
||||||
All the AlgorithmInfo-related stuff should be in the same file as initModule_features2d(). |
|
||||||
Otherwise, linker may throw away some seemingly unused stuff. |
|
||||||
*/ |
|
||||||
|
|
||||||
CV_INIT_ALGORITHM(BRISK, "Feature2D.BRISK", |
|
||||||
obj.info()->addParam(obj, "thres", obj.threshold); |
|
||||||
obj.info()->addParam(obj, "octaves", obj.octaves)) |
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
CV_INIT_ALGORITHM(FastFeatureDetector, "Feature2D.FAST", |
|
||||||
obj.info()->addParam(obj, "threshold", obj.threshold); |
|
||||||
obj.info()->addParam(obj, "nonmaxSuppression", obj.nonmaxSuppression); |
|
||||||
obj.info()->addParam(obj, "type", obj.type)) |
|
||||||
|
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
CV_INIT_ALGORITHM(MSER, "Feature2D.MSER", |
|
||||||
obj.info()->addParam(obj, "delta", obj.delta); |
|
||||||
obj.info()->addParam(obj, "minArea", obj.minArea); |
|
||||||
obj.info()->addParam(obj, "maxArea", obj.maxArea); |
|
||||||
obj.info()->addParam(obj, "maxVariation", obj.maxVariation); |
|
||||||
obj.info()->addParam(obj, "minDiversity", obj.minDiversity); |
|
||||||
obj.info()->addParam(obj, "maxEvolution", obj.maxEvolution); |
|
||||||
obj.info()->addParam(obj, "areaThreshold", obj.areaThreshold); |
|
||||||
obj.info()->addParam(obj, "minMargin", obj.minMargin); |
|
||||||
obj.info()->addParam(obj, "edgeBlurSize", obj.edgeBlurSize)) |
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
CV_INIT_ALGORITHM(ORB, "Feature2D.ORB", |
|
||||||
obj.info()->addParam(obj, "nFeatures", obj.nfeatures); |
|
||||||
obj.info()->addParam(obj, "scaleFactor", obj.scaleFactor); |
|
||||||
obj.info()->addParam(obj, "nLevels", obj.nlevels); |
|
||||||
obj.info()->addParam(obj, "firstLevel", obj.firstLevel); |
|
||||||
obj.info()->addParam(obj, "edgeThreshold", obj.edgeThreshold); |
|
||||||
obj.info()->addParam(obj, "patchSize", obj.patchSize); |
|
||||||
obj.info()->addParam(obj, "WTA_K", obj.WTA_K); |
|
||||||
obj.info()->addParam(obj, "scoreType", obj.scoreType); |
|
||||||
obj.info()->addParam(obj, "fastThreshold", obj.fastThreshold)) |
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
CV_INIT_ALGORITHM(GFTTDetector, "Feature2D.GFTT", |
|
||||||
obj.info()->addParam(obj, "nfeatures", obj.nfeatures); |
|
||||||
obj.info()->addParam(obj, "qualityLevel", obj.qualityLevel); |
|
||||||
obj.info()->addParam(obj, "minDistance", obj.minDistance); |
|
||||||
obj.info()->addParam(obj, "useHarrisDetector", obj.useHarrisDetector); |
|
||||||
obj.info()->addParam(obj, "k", obj.k)) |
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
CV_INIT_ALGORITHM(KAZE, "Feature2D.KAZE", |
|
||||||
obj.info()->addParam(obj, "upright", obj.upright); |
|
||||||
obj.info()->addParam(obj, "extended", obj.extended); |
|
||||||
obj.info()->addParam(obj, "threshold", obj.threshold); |
|
||||||
obj.info()->addParam(obj, "octaves", obj.octaves); |
|
||||||
obj.info()->addParam(obj, "sublevels", obj.sublevels); |
|
||||||
obj.info()->addParam(obj, "diffusivity", obj.diffusivity)) |
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
CV_INIT_ALGORITHM(AKAZE, "Feature2D.AKAZE", |
|
||||||
obj.info()->addParam(obj, "descriptor", obj.descriptor); |
|
||||||
obj.info()->addParam(obj, "descriptor_channels", obj.descriptor_channels); |
|
||||||
obj.info()->addParam(obj, "descriptor_size", obj.descriptor_size); |
|
||||||
obj.info()->addParam(obj, "threshold", obj.threshold); |
|
||||||
obj.info()->addParam(obj, "octaves", obj.octaves); |
|
||||||
obj.info()->addParam(obj, "sublevels", obj.sublevels); |
|
||||||
obj.info()->addParam(obj, "diffusivity", obj.diffusivity)) |
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
CV_INIT_ALGORITHM(SimpleBlobDetector, "Feature2D.SimpleBlob", |
|
||||||
obj.info()->addParam(obj, "thresholdStep", obj.params.thresholdStep); |
|
||||||
obj.info()->addParam(obj, "minThreshold", obj.params.minThreshold); |
|
||||||
obj.info()->addParam(obj, "maxThreshold", obj.params.maxThreshold); |
|
||||||
obj.info()->addParam_(obj, "minRepeatability", (sizeof(size_t) == sizeof(uint64))?Param::UINT64 : Param::UNSIGNED_INT, &obj.params.minRepeatability, false, 0, 0); |
|
||||||
obj.info()->addParam(obj, "minDistBetweenBlobs", obj.params.minDistBetweenBlobs); |
|
||||||
obj.info()->addParam(obj, "filterByColor", obj.params.filterByColor); |
|
||||||
obj.info()->addParam(obj, "blobColor", obj.params.blobColor); |
|
||||||
obj.info()->addParam(obj, "filterByArea", obj.params.filterByArea); |
|
||||||
obj.info()->addParam(obj, "maxArea", obj.params.maxArea); |
|
||||||
obj.info()->addParam(obj, "filterByCircularity", obj.params.filterByCircularity); |
|
||||||
obj.info()->addParam(obj, "maxCircularity", obj.params.maxCircularity); |
|
||||||
obj.info()->addParam(obj, "filterByInertia", obj.params.filterByInertia); |
|
||||||
obj.info()->addParam(obj, "maxInertiaRatio", obj.params.maxInertiaRatio); |
|
||||||
obj.info()->addParam(obj, "filterByConvexity", obj.params.filterByConvexity); |
|
||||||
obj.info()->addParam(obj, "maxConvexity", obj.params.maxConvexity); |
|
||||||
) |
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
class CV_EXPORTS HarrisDetector : public GFTTDetector |
|
||||||
{ |
|
||||||
public: |
|
||||||
HarrisDetector( int maxCorners=1000, double qualityLevel=0.01, double minDistance=1, |
|
||||||
int blockSize=3, bool useHarrisDetector=true, double k=0.04 ); |
|
||||||
AlgorithmInfo* info() const; |
|
||||||
}; |
|
||||||
|
|
||||||
inline HarrisDetector::HarrisDetector( int _maxCorners, double _qualityLevel, double _minDistance, |
|
||||||
int _blockSize, bool _useHarrisDetector, double _k ) |
|
||||||
: GFTTDetector( _maxCorners, _qualityLevel, _minDistance, _blockSize, _useHarrisDetector, _k ) {} |
|
||||||
|
|
||||||
CV_INIT_ALGORITHM(HarrisDetector, "Feature2D.HARRIS", |
|
||||||
obj.info()->addParam(obj, "nfeatures", obj.nfeatures); |
|
||||||
obj.info()->addParam(obj, "qualityLevel", obj.qualityLevel); |
|
||||||
obj.info()->addParam(obj, "minDistance", obj.minDistance); |
|
||||||
obj.info()->addParam(obj, "useHarrisDetector", obj.useHarrisDetector); |
|
||||||
obj.info()->addParam(obj, "k", obj.k)) |
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
CV_INIT_ALGORITHM(BFMatcher, "DescriptorMatcher.BFMatcher", |
|
||||||
obj.info()->addParam(obj, "normType", obj.normType); |
|
||||||
obj.info()->addParam(obj, "crossCheck", obj.crossCheck)) |
|
||||||
|
|
||||||
CV_INIT_ALGORITHM(FlannBasedMatcher, "DescriptorMatcher.FlannBasedMatcher",) |
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
bool cv::initModule_features2d(void) |
|
||||||
{ |
|
||||||
bool all = true; |
|
||||||
all &= !BRISK_info_auto.name().empty(); |
|
||||||
all &= !FastFeatureDetector_info_auto.name().empty(); |
|
||||||
all &= !MSER_info_auto.name().empty(); |
|
||||||
all &= !ORB_info_auto.name().empty(); |
|
||||||
all &= !GFTTDetector_info_auto.name().empty(); |
|
||||||
all &= !KAZE_info_auto.name().empty(); |
|
||||||
all &= !AKAZE_info_auto.name().empty(); |
|
||||||
all &= !HarrisDetector_info_auto.name().empty(); |
|
||||||
all &= !BFMatcher_info_auto.name().empty(); |
|
||||||
all &= !FlannBasedMatcher_info_auto.name().empty(); |
|
||||||
|
|
||||||
return all; |
|
||||||
} |
|
||||||
|
|
||||||
#endif |
|
File diff suppressed because it is too large
Load Diff
Loading…
Reference in new issue