|
|
@ -866,7 +866,6 @@ namespace cv |
|
|
|
std::vector<oclMat> image_sqsums; |
|
|
|
std::vector<oclMat> image_sqsums; |
|
|
|
}; |
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//! computes the proximity map for the raster template and the image where the template is searched for
|
|
|
|
//! computes the proximity map for the raster template and the image where the template is searched for
|
|
|
|
// Supports TM_SQDIFF, TM_SQDIFF_NORMED, TM_CCORR, TM_CCORR_NORMED, TM_CCOEFF, TM_CCOEFF_NORMED for type 8UC1 and 8UC4
|
|
|
|
// Supports TM_SQDIFF, TM_SQDIFF_NORMED, TM_CCORR, TM_CCORR_NORMED, TM_CCOEFF, TM_CCOEFF_NORMED for type 8UC1 and 8UC4
|
|
|
|
// Supports TM_SQDIFF, TM_CCORR for type 32FC1 and 32FC4
|
|
|
|
// Supports TM_SQDIFF, TM_CCORR for type 32FC1 and 32FC4
|
|
|
@ -877,71 +876,36 @@ namespace cv |
|
|
|
// Supports TM_SQDIFF, TM_CCORR for type 32FC1 and 32FC4
|
|
|
|
// Supports TM_SQDIFF, TM_CCORR for type 32FC1 and 32FC4
|
|
|
|
CV_EXPORTS void matchTemplate(const oclMat &image, const oclMat &templ, oclMat &result, int method, MatchTemplateBuf &buf); |
|
|
|
CV_EXPORTS void matchTemplate(const oclMat &image, const oclMat &templ, oclMat &result, int method, MatchTemplateBuf &buf); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
///////////////////////////////////////////// Canny /////////////////////////////////////////////
|
|
|
|
///////////////////////////////////////////// Canny /////////////////////////////////////////////
|
|
|
|
|
|
|
|
|
|
|
|
struct CV_EXPORTS CannyBuf; |
|
|
|
struct CV_EXPORTS CannyBuf; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//! compute edges of the input image using Canny operator
|
|
|
|
//! compute edges of the input image using Canny operator
|
|
|
|
|
|
|
|
|
|
|
|
// Support CV_8UC1 only
|
|
|
|
// Support CV_8UC1 only
|
|
|
|
|
|
|
|
|
|
|
|
CV_EXPORTS void Canny(const oclMat &image, oclMat &edges, double low_thresh, double high_thresh, int apperture_size = 3, bool L2gradient = false); |
|
|
|
CV_EXPORTS void Canny(const oclMat &image, oclMat &edges, double low_thresh, double high_thresh, int apperture_size = 3, bool L2gradient = false); |
|
|
|
|
|
|
|
|
|
|
|
CV_EXPORTS void Canny(const oclMat &image, CannyBuf &buf, oclMat &edges, double low_thresh, double high_thresh, int apperture_size = 3, bool L2gradient = false); |
|
|
|
CV_EXPORTS void Canny(const oclMat &image, CannyBuf &buf, oclMat &edges, double low_thresh, double high_thresh, int apperture_size = 3, bool L2gradient = false); |
|
|
|
|
|
|
|
|
|
|
|
CV_EXPORTS void Canny(const oclMat &dx, const oclMat &dy, oclMat &edges, double low_thresh, double high_thresh, bool L2gradient = false); |
|
|
|
CV_EXPORTS void Canny(const oclMat &dx, const oclMat &dy, oclMat &edges, double low_thresh, double high_thresh, bool L2gradient = false); |
|
|
|
|
|
|
|
|
|
|
|
CV_EXPORTS void Canny(const oclMat &dx, const oclMat &dy, CannyBuf &buf, oclMat &edges, double low_thresh, double high_thresh, bool L2gradient = false); |
|
|
|
CV_EXPORTS void Canny(const oclMat &dx, const oclMat &dy, CannyBuf &buf, oclMat &edges, double low_thresh, double high_thresh, bool L2gradient = false); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
struct CV_EXPORTS CannyBuf |
|
|
|
struct CV_EXPORTS CannyBuf |
|
|
|
|
|
|
|
|
|
|
|
{ |
|
|
|
{ |
|
|
|
|
|
|
|
|
|
|
|
CannyBuf() : counter(NULL) {} |
|
|
|
CannyBuf() : counter(NULL) {} |
|
|
|
|
|
|
|
|
|
|
|
~CannyBuf() |
|
|
|
~CannyBuf() |
|
|
|
{ |
|
|
|
{ |
|
|
|
release(); |
|
|
|
release(); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
explicit CannyBuf(const Size &image_size, int apperture_size = 3) : counter(NULL) |
|
|
|
explicit CannyBuf(const Size &image_size, int apperture_size = 3) : counter(NULL) |
|
|
|
|
|
|
|
|
|
|
|
{ |
|
|
|
{ |
|
|
|
|
|
|
|
|
|
|
|
create(image_size, apperture_size); |
|
|
|
create(image_size, apperture_size); |
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
CannyBuf(const oclMat &dx_, const oclMat &dy_); |
|
|
|
CannyBuf(const oclMat &dx_, const oclMat &dy_); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void create(const Size &image_size, int apperture_size = 3); |
|
|
|
void create(const Size &image_size, int apperture_size = 3); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void release(); |
|
|
|
void release(); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
oclMat dx, dy; |
|
|
|
oclMat dx, dy; |
|
|
|
|
|
|
|
|
|
|
|
oclMat dx_buf, dy_buf; |
|
|
|
oclMat dx_buf, dy_buf; |
|
|
|
|
|
|
|
|
|
|
|
oclMat edgeBuf; |
|
|
|
oclMat edgeBuf; |
|
|
|
|
|
|
|
|
|
|
|
oclMat trackBuf1, trackBuf2; |
|
|
|
oclMat trackBuf1, trackBuf2; |
|
|
|
|
|
|
|
|
|
|
|
void *counter; |
|
|
|
void *counter; |
|
|
|
|
|
|
|
|
|
|
|
Ptr<FilterEngine_GPU> filterDX, filterDY; |
|
|
|
Ptr<FilterEngine_GPU> filterDX, filterDY; |
|
|
|
|
|
|
|
|
|
|
|
}; |
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
///////////////////////////////////////// clAmdFft related /////////////////////////////////////////
|
|
|
|
///////////////////////////////////////// clAmdFft related /////////////////////////////////////////
|
|
|
@ -966,159 +930,69 @@ namespace cv |
|
|
|
const oclMat &src3, double beta, oclMat &dst, int flags = 0); |
|
|
|
const oclMat &src3, double beta, oclMat &dst, int flags = 0); |
|
|
|
|
|
|
|
|
|
|
|
//////////////// HOG (Histogram-of-Oriented-Gradients) Descriptor and Object Detector //////////////
|
|
|
|
//////////////// HOG (Histogram-of-Oriented-Gradients) Descriptor and Object Detector //////////////
|
|
|
|
|
|
|
|
|
|
|
|
struct CV_EXPORTS HOGDescriptor |
|
|
|
struct CV_EXPORTS HOGDescriptor |
|
|
|
|
|
|
|
|
|
|
|
{ |
|
|
|
{ |
|
|
|
|
|
|
|
|
|
|
|
enum { DEFAULT_WIN_SIGMA = -1 }; |
|
|
|
enum { DEFAULT_WIN_SIGMA = -1 }; |
|
|
|
|
|
|
|
|
|
|
|
enum { DEFAULT_NLEVELS = 64 }; |
|
|
|
enum { DEFAULT_NLEVELS = 64 }; |
|
|
|
|
|
|
|
|
|
|
|
enum { DESCR_FORMAT_ROW_BY_ROW, DESCR_FORMAT_COL_BY_COL }; |
|
|
|
enum { DESCR_FORMAT_ROW_BY_ROW, DESCR_FORMAT_COL_BY_COL }; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
HOGDescriptor(Size win_size = Size(64, 128), Size block_size = Size(16, 16), |
|
|
|
HOGDescriptor(Size win_size = Size(64, 128), Size block_size = Size(16, 16), |
|
|
|
|
|
|
|
|
|
|
|
Size block_stride = Size(8, 8), Size cell_size = Size(8, 8), |
|
|
|
Size block_stride = Size(8, 8), Size cell_size = Size(8, 8), |
|
|
|
|
|
|
|
|
|
|
|
int nbins = 9, double win_sigma = DEFAULT_WIN_SIGMA, |
|
|
|
int nbins = 9, double win_sigma = DEFAULT_WIN_SIGMA, |
|
|
|
|
|
|
|
|
|
|
|
double threshold_L2hys = 0.2, bool gamma_correction = true, |
|
|
|
double threshold_L2hys = 0.2, bool gamma_correction = true, |
|
|
|
|
|
|
|
|
|
|
|
int nlevels = DEFAULT_NLEVELS); |
|
|
|
int nlevels = DEFAULT_NLEVELS); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
size_t getDescriptorSize() const; |
|
|
|
size_t getDescriptorSize() const; |
|
|
|
|
|
|
|
|
|
|
|
size_t getBlockHistogramSize() const; |
|
|
|
size_t getBlockHistogramSize() const; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void setSVMDetector(const vector<float> &detector); |
|
|
|
void setSVMDetector(const vector<float> &detector); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static vector<float> getDefaultPeopleDetector(); |
|
|
|
static vector<float> getDefaultPeopleDetector(); |
|
|
|
|
|
|
|
|
|
|
|
static vector<float> getPeopleDetector48x96(); |
|
|
|
static vector<float> getPeopleDetector48x96(); |
|
|
|
|
|
|
|
|
|
|
|
static vector<float> getPeopleDetector64x128(); |
|
|
|
static vector<float> getPeopleDetector64x128(); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void detect(const oclMat &img, vector<Point> &found_locations, |
|
|
|
void detect(const oclMat &img, vector<Point> &found_locations, |
|
|
|
|
|
|
|
|
|
|
|
double hit_threshold = 0, Size win_stride = Size(), |
|
|
|
double hit_threshold = 0, Size win_stride = Size(), |
|
|
|
|
|
|
|
|
|
|
|
Size padding = Size()); |
|
|
|
Size padding = Size()); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void detectMultiScale(const oclMat &img, vector<Rect> &found_locations, |
|
|
|
void detectMultiScale(const oclMat &img, vector<Rect> &found_locations, |
|
|
|
|
|
|
|
|
|
|
|
double hit_threshold = 0, Size win_stride = Size(), |
|
|
|
double hit_threshold = 0, Size win_stride = Size(), |
|
|
|
|
|
|
|
|
|
|
|
Size padding = Size(), double scale0 = 1.05, |
|
|
|
Size padding = Size(), double scale0 = 1.05, |
|
|
|
|
|
|
|
|
|
|
|
int group_threshold = 2); |
|
|
|
int group_threshold = 2); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void getDescriptors(const oclMat &img, Size win_stride, |
|
|
|
void getDescriptors(const oclMat &img, Size win_stride, |
|
|
|
|
|
|
|
|
|
|
|
oclMat &descriptors, |
|
|
|
oclMat &descriptors, |
|
|
|
|
|
|
|
|
|
|
|
int descr_format = DESCR_FORMAT_COL_BY_COL); |
|
|
|
int descr_format = DESCR_FORMAT_COL_BY_COL); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Size win_size; |
|
|
|
Size win_size; |
|
|
|
|
|
|
|
|
|
|
|
Size block_size; |
|
|
|
Size block_size; |
|
|
|
|
|
|
|
|
|
|
|
Size block_stride; |
|
|
|
Size block_stride; |
|
|
|
|
|
|
|
|
|
|
|
Size cell_size; |
|
|
|
Size cell_size; |
|
|
|
|
|
|
|
|
|
|
|
int nbins; |
|
|
|
int nbins; |
|
|
|
|
|
|
|
|
|
|
|
double win_sigma; |
|
|
|
double win_sigma; |
|
|
|
|
|
|
|
|
|
|
|
double threshold_L2hys; |
|
|
|
double threshold_L2hys; |
|
|
|
|
|
|
|
|
|
|
|
bool gamma_correction; |
|
|
|
bool gamma_correction; |
|
|
|
|
|
|
|
|
|
|
|
int nlevels; |
|
|
|
int nlevels; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
protected: |
|
|
|
protected: |
|
|
|
|
|
|
|
|
|
|
|
// initialize buffers; only need to do once in case of multiscale detection
|
|
|
|
// initialize buffers; only need to do once in case of multiscale detection
|
|
|
|
|
|
|
|
|
|
|
|
void init_buffer(const oclMat &img, Size win_stride); |
|
|
|
void init_buffer(const oclMat &img, Size win_stride); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void computeBlockHistograms(const oclMat &img); |
|
|
|
void computeBlockHistograms(const oclMat &img); |
|
|
|
|
|
|
|
|
|
|
|
void computeGradient(const oclMat &img, oclMat &grad, oclMat &qangle); |
|
|
|
void computeGradient(const oclMat &img, oclMat &grad, oclMat &qangle); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
double getWinSigma() const; |
|
|
|
double getWinSigma() const; |
|
|
|
|
|
|
|
|
|
|
|
bool checkDetectorSize() const; |
|
|
|
bool checkDetectorSize() const; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static int numPartsWithin(int size, int part_size, int stride); |
|
|
|
static int numPartsWithin(int size, int part_size, int stride); |
|
|
|
|
|
|
|
|
|
|
|
static Size numPartsWithin(Size size, Size part_size, Size stride); |
|
|
|
static Size numPartsWithin(Size size, Size part_size, Size stride); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Coefficients of the separating plane
|
|
|
|
// Coefficients of the separating plane
|
|
|
|
|
|
|
|
|
|
|
|
float free_coef; |
|
|
|
float free_coef; |
|
|
|
|
|
|
|
|
|
|
|
oclMat detector; |
|
|
|
oclMat detector; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Results of the last classification step
|
|
|
|
// Results of the last classification step
|
|
|
|
|
|
|
|
|
|
|
|
oclMat labels; |
|
|
|
oclMat labels; |
|
|
|
|
|
|
|
|
|
|
|
Mat labels_host; |
|
|
|
Mat labels_host; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Results of the last histogram evaluation step
|
|
|
|
// Results of the last histogram evaluation step
|
|
|
|
|
|
|
|
|
|
|
|
oclMat block_hists; |
|
|
|
oclMat block_hists; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Gradients conputation results
|
|
|
|
// Gradients conputation results
|
|
|
|
|
|
|
|
|
|
|
|
oclMat grad, qangle; |
|
|
|
oclMat grad, qangle; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// scaled image
|
|
|
|
// scaled image
|
|
|
|
|
|
|
|
|
|
|
|
oclMat image_scale; |
|
|
|
oclMat image_scale; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// effect size of input image (might be different from original size after scaling)
|
|
|
|
// effect size of input image (might be different from original size after scaling)
|
|
|
|
|
|
|
|
|
|
|
|
Size effect_size; |
|
|
|
Size effect_size; |
|
|
|
|
|
|
|
|
|
|
|
}; |
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -1126,13 +1000,11 @@ namespace cv |
|
|
|
/****************************************************************************************\
|
|
|
|
/****************************************************************************************\
|
|
|
|
* Distance * |
|
|
|
* Distance * |
|
|
|
\****************************************************************************************/ |
|
|
|
\****************************************************************************************/ |
|
|
|
|
|
|
|
|
|
|
|
template<typename T> |
|
|
|
template<typename T> |
|
|
|
struct CV_EXPORTS Accumulator |
|
|
|
struct CV_EXPORTS Accumulator |
|
|
|
{ |
|
|
|
{ |
|
|
|
typedef T Type; |
|
|
|
typedef T Type; |
|
|
|
}; |
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
template<> struct Accumulator<unsigned char> |
|
|
|
template<> struct Accumulator<unsigned char> |
|
|
|
{ |
|
|
|
{ |
|
|
|
typedef float Type; |
|
|
|
typedef float Type; |
|
|
@ -1206,469 +1078,230 @@ namespace cv |
|
|
|
{ |
|
|
|
{ |
|
|
|
public: |
|
|
|
public: |
|
|
|
enum DistType {L1Dist = 0, L2Dist, HammingDist}; |
|
|
|
enum DistType {L1Dist = 0, L2Dist, HammingDist}; |
|
|
|
|
|
|
|
|
|
|
|
explicit BruteForceMatcher_OCL_base(DistType distType = L2Dist); |
|
|
|
explicit BruteForceMatcher_OCL_base(DistType distType = L2Dist); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Add descriptors to train descriptor collection
|
|
|
|
// Add descriptors to train descriptor collection
|
|
|
|
|
|
|
|
|
|
|
|
void add(const std::vector<oclMat> &descCollection); |
|
|
|
void add(const std::vector<oclMat> &descCollection); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Get train descriptors collection
|
|
|
|
// Get train descriptors collection
|
|
|
|
|
|
|
|
|
|
|
|
const std::vector<oclMat> &getTrainDescriptors() const; |
|
|
|
const std::vector<oclMat> &getTrainDescriptors() const; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Clear train descriptors collection
|
|
|
|
// Clear train descriptors collection
|
|
|
|
|
|
|
|
|
|
|
|
void clear(); |
|
|
|
void clear(); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Return true if there are not train descriptors in collection
|
|
|
|
// Return true if there are not train descriptors in collection
|
|
|
|
|
|
|
|
|
|
|
|
bool empty() const; |
|
|
|
bool empty() const; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Return true if the matcher supports mask in match methods
|
|
|
|
// Return true if the matcher supports mask in match methods
|
|
|
|
|
|
|
|
|
|
|
|
bool isMaskSupported() const; |
|
|
|
bool isMaskSupported() const; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Find one best match for each query descriptor
|
|
|
|
// Find one best match for each query descriptor
|
|
|
|
|
|
|
|
|
|
|
|
void matchSingle(const oclMat &query, const oclMat &train, |
|
|
|
void matchSingle(const oclMat &query, const oclMat &train, |
|
|
|
|
|
|
|
|
|
|
|
oclMat &trainIdx, oclMat &distance, |
|
|
|
oclMat &trainIdx, oclMat &distance, |
|
|
|
|
|
|
|
|
|
|
|
const oclMat &mask = oclMat()); |
|
|
|
const oclMat &mask = oclMat()); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Download trainIdx and distance and convert it to CPU vector with DMatch
|
|
|
|
// Download trainIdx and distance and convert it to CPU vector with DMatch
|
|
|
|
|
|
|
|
|
|
|
|
static void matchDownload(const oclMat &trainIdx, const oclMat &distance, std::vector<DMatch> &matches); |
|
|
|
static void matchDownload(const oclMat &trainIdx, const oclMat &distance, std::vector<DMatch> &matches); |
|
|
|
|
|
|
|
|
|
|
|
// Convert trainIdx and distance to vector with DMatch
|
|
|
|
// Convert trainIdx and distance to vector with DMatch
|
|
|
|
|
|
|
|
|
|
|
|
static void matchConvert(const Mat &trainIdx, const Mat &distance, std::vector<DMatch> &matches); |
|
|
|
static void matchConvert(const Mat &trainIdx, const Mat &distance, std::vector<DMatch> &matches); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Find one best match for each query descriptor
|
|
|
|
// Find one best match for each query descriptor
|
|
|
|
|
|
|
|
|
|
|
|
void match(const oclMat &query, const oclMat &train, std::vector<DMatch> &matches, const oclMat &mask = oclMat()); |
|
|
|
void match(const oclMat &query, const oclMat &train, std::vector<DMatch> &matches, const oclMat &mask = oclMat()); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Make gpu collection of trains and masks in suitable format for matchCollection function
|
|
|
|
// Make gpu collection of trains and masks in suitable format for matchCollection function
|
|
|
|
|
|
|
|
|
|
|
|
void makeGpuCollection(oclMat &trainCollection, oclMat &maskCollection, const std::vector<oclMat> &masks = std::vector<oclMat>()); |
|
|
|
void makeGpuCollection(oclMat &trainCollection, oclMat &maskCollection, const std::vector<oclMat> &masks = std::vector<oclMat>()); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Find one best match from train collection for each query descriptor
|
|
|
|
// Find one best match from train collection for each query descriptor
|
|
|
|
|
|
|
|
|
|
|
|
void matchCollection(const oclMat &query, const oclMat &trainCollection, |
|
|
|
void matchCollection(const oclMat &query, const oclMat &trainCollection, |
|
|
|
|
|
|
|
|
|
|
|
oclMat &trainIdx, oclMat &imgIdx, oclMat &distance, |
|
|
|
oclMat &trainIdx, oclMat &imgIdx, oclMat &distance, |
|
|
|
|
|
|
|
|
|
|
|
const oclMat &masks = oclMat()); |
|
|
|
const oclMat &masks = oclMat()); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Download trainIdx, imgIdx and distance and convert it to vector with DMatch
|
|
|
|
// Download trainIdx, imgIdx and distance and convert it to vector with DMatch
|
|
|
|
|
|
|
|
|
|
|
|
static void matchDownload(const oclMat &trainIdx, const oclMat &imgIdx, const oclMat &distance, std::vector<DMatch> &matches); |
|
|
|
static void matchDownload(const oclMat &trainIdx, const oclMat &imgIdx, const oclMat &distance, std::vector<DMatch> &matches); |
|
|
|
|
|
|
|
|
|
|
|
// Convert trainIdx, imgIdx and distance to vector with DMatch
|
|
|
|
// Convert trainIdx, imgIdx and distance to vector with DMatch
|
|
|
|
|
|
|
|
|
|
|
|
static void matchConvert(const Mat &trainIdx, const Mat &imgIdx, const Mat &distance, std::vector<DMatch> &matches); |
|
|
|
static void matchConvert(const Mat &trainIdx, const Mat &imgIdx, const Mat &distance, std::vector<DMatch> &matches); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Find one best match from train collection for each query descriptor.
|
|
|
|
// Find one best match from train collection for each query descriptor.
|
|
|
|
|
|
|
|
|
|
|
|
void match(const oclMat &query, std::vector<DMatch> &matches, const std::vector<oclMat> &masks = std::vector<oclMat>()); |
|
|
|
void match(const oclMat &query, std::vector<DMatch> &matches, const std::vector<oclMat> &masks = std::vector<oclMat>()); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Find k best matches for each query descriptor (in increasing order of distances)
|
|
|
|
// Find k best matches for each query descriptor (in increasing order of distances)
|
|
|
|
|
|
|
|
|
|
|
|
void knnMatchSingle(const oclMat &query, const oclMat &train, |
|
|
|
void knnMatchSingle(const oclMat &query, const oclMat &train, |
|
|
|
|
|
|
|
|
|
|
|
oclMat &trainIdx, oclMat &distance, oclMat &allDist, int k, |
|
|
|
oclMat &trainIdx, oclMat &distance, oclMat &allDist, int k, |
|
|
|
|
|
|
|
|
|
|
|
const oclMat &mask = oclMat()); |
|
|
|
const oclMat &mask = oclMat()); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Download trainIdx and distance and convert it to vector with DMatch
|
|
|
|
// Download trainIdx and distance and convert it to vector with DMatch
|
|
|
|
|
|
|
|
|
|
|
|
// compactResult is used when mask is not empty. If compactResult is false matches
|
|
|
|
// compactResult is used when mask is not empty. If compactResult is false matches
|
|
|
|
|
|
|
|
|
|
|
|
// vector will have the same size as queryDescriptors rows. If compactResult is true
|
|
|
|
// vector will have the same size as queryDescriptors rows. If compactResult is true
|
|
|
|
|
|
|
|
|
|
|
|
// matches vector will not contain matches for fully masked out query descriptors.
|
|
|
|
// matches vector will not contain matches for fully masked out query descriptors.
|
|
|
|
|
|
|
|
|
|
|
|
static void knnMatchDownload(const oclMat &trainIdx, const oclMat &distance, |
|
|
|
static void knnMatchDownload(const oclMat &trainIdx, const oclMat &distance, |
|
|
|
|
|
|
|
|
|
|
|
std::vector< std::vector<DMatch> > &matches, bool compactResult = false); |
|
|
|
std::vector< std::vector<DMatch> > &matches, bool compactResult = false); |
|
|
|
|
|
|
|
|
|
|
|
// Convert trainIdx and distance to vector with DMatch
|
|
|
|
// Convert trainIdx and distance to vector with DMatch
|
|
|
|
|
|
|
|
|
|
|
|
static void knnMatchConvert(const Mat &trainIdx, const Mat &distance, |
|
|
|
static void knnMatchConvert(const Mat &trainIdx, const Mat &distance, |
|
|
|
|
|
|
|
|
|
|
|
std::vector< std::vector<DMatch> > &matches, bool compactResult = false); |
|
|
|
std::vector< std::vector<DMatch> > &matches, bool compactResult = false); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Find k best matches for each query descriptor (in increasing order of distances).
|
|
|
|
// Find k best matches for each query descriptor (in increasing order of distances).
|
|
|
|
|
|
|
|
|
|
|
|
// compactResult is used when mask is not empty. If compactResult is false matches
|
|
|
|
// compactResult is used when mask is not empty. If compactResult is false matches
|
|
|
|
|
|
|
|
|
|
|
|
// vector will have the same size as queryDescriptors rows. If compactResult is true
|
|
|
|
// vector will have the same size as queryDescriptors rows. If compactResult is true
|
|
|
|
|
|
|
|
|
|
|
|
// matches vector will not contain matches for fully masked out query descriptors.
|
|
|
|
// matches vector will not contain matches for fully masked out query descriptors.
|
|
|
|
|
|
|
|
|
|
|
|
void knnMatch(const oclMat &query, const oclMat &train, |
|
|
|
void knnMatch(const oclMat &query, const oclMat &train, |
|
|
|
|
|
|
|
|
|
|
|
std::vector< std::vector<DMatch> > &matches, int k, const oclMat &mask = oclMat(), |
|
|
|
std::vector< std::vector<DMatch> > &matches, int k, const oclMat &mask = oclMat(), |
|
|
|
|
|
|
|
|
|
|
|
bool compactResult = false); |
|
|
|
bool compactResult = false); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Find k best matches from train collection for each query descriptor (in increasing order of distances)
|
|
|
|
// Find k best matches from train collection for each query descriptor (in increasing order of distances)
|
|
|
|
|
|
|
|
|
|
|
|
void knnMatch2Collection(const oclMat &query, const oclMat &trainCollection, |
|
|
|
void knnMatch2Collection(const oclMat &query, const oclMat &trainCollection, |
|
|
|
|
|
|
|
|
|
|
|
oclMat &trainIdx, oclMat &imgIdx, oclMat &distance, |
|
|
|
oclMat &trainIdx, oclMat &imgIdx, oclMat &distance, |
|
|
|
|
|
|
|
|
|
|
|
const oclMat &maskCollection = oclMat()); |
|
|
|
const oclMat &maskCollection = oclMat()); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Download trainIdx and distance and convert it to vector with DMatch
|
|
|
|
// Download trainIdx and distance and convert it to vector with DMatch
|
|
|
|
|
|
|
|
|
|
|
|
// compactResult is used when mask is not empty. If compactResult is false matches
|
|
|
|
// compactResult is used when mask is not empty. If compactResult is false matches
|
|
|
|
|
|
|
|
|
|
|
|
// vector will have the same size as queryDescriptors rows. If compactResult is true
|
|
|
|
// vector will have the same size as queryDescriptors rows. If compactResult is true
|
|
|
|
|
|
|
|
|
|
|
|
// matches vector will not contain matches for fully masked out query descriptors.
|
|
|
|
// matches vector will not contain matches for fully masked out query descriptors.
|
|
|
|
|
|
|
|
|
|
|
|
static void knnMatch2Download(const oclMat &trainIdx, const oclMat &imgIdx, const oclMat &distance, |
|
|
|
static void knnMatch2Download(const oclMat &trainIdx, const oclMat &imgIdx, const oclMat &distance, |
|
|
|
|
|
|
|
|
|
|
|
std::vector< std::vector<DMatch> > &matches, bool compactResult = false); |
|
|
|
std::vector< std::vector<DMatch> > &matches, bool compactResult = false); |
|
|
|
|
|
|
|
|
|
|
|
// Convert trainIdx and distance to vector with DMatch
|
|
|
|
// Convert trainIdx and distance to vector with DMatch
|
|
|
|
|
|
|
|
|
|
|
|
static void knnMatch2Convert(const Mat &trainIdx, const Mat &imgIdx, const Mat &distance, |
|
|
|
static void knnMatch2Convert(const Mat &trainIdx, const Mat &imgIdx, const Mat &distance, |
|
|
|
|
|
|
|
|
|
|
|
std::vector< std::vector<DMatch> > &matches, bool compactResult = false); |
|
|
|
std::vector< std::vector<DMatch> > &matches, bool compactResult = false); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Find k best matches for each query descriptor (in increasing order of distances).
|
|
|
|
// Find k best matches for each query descriptor (in increasing order of distances).
|
|
|
|
|
|
|
|
|
|
|
|
// compactResult is used when mask is not empty. If compactResult is false matches
|
|
|
|
// compactResult is used when mask is not empty. If compactResult is false matches
|
|
|
|
|
|
|
|
|
|
|
|
// vector will have the same size as queryDescriptors rows. If compactResult is true
|
|
|
|
// vector will have the same size as queryDescriptors rows. If compactResult is true
|
|
|
|
|
|
|
|
|
|
|
|
// matches vector will not contain matches for fully masked out query descriptors.
|
|
|
|
// matches vector will not contain matches for fully masked out query descriptors.
|
|
|
|
|
|
|
|
|
|
|
|
void knnMatch(const oclMat &query, std::vector< std::vector<DMatch> > &matches, int k, |
|
|
|
void knnMatch(const oclMat &query, std::vector< std::vector<DMatch> > &matches, int k, |
|
|
|
|
|
|
|
|
|
|
|
const std::vector<oclMat> &masks = std::vector<oclMat>(), bool compactResult = false); |
|
|
|
const std::vector<oclMat> &masks = std::vector<oclMat>(), bool compactResult = false); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Find best matches for each query descriptor which have distance less than maxDistance.
|
|
|
|
// Find best matches for each query descriptor which have distance less than maxDistance.
|
|
|
|
|
|
|
|
|
|
|
|
// nMatches.at<int>(0, queryIdx) will contain matches count for queryIdx.
|
|
|
|
// nMatches.at<int>(0, queryIdx) will contain matches count for queryIdx.
|
|
|
|
|
|
|
|
|
|
|
|
// carefully nMatches can be greater than trainIdx.cols - it means that matcher didn't find all matches,
|
|
|
|
// carefully nMatches can be greater than trainIdx.cols - it means that matcher didn't find all matches,
|
|
|
|
|
|
|
|
|
|
|
|
// because it didn't have enough memory.
|
|
|
|
// because it didn't have enough memory.
|
|
|
|
|
|
|
|
|
|
|
|
// If trainIdx is empty, then trainIdx and distance will be created with size nQuery x max((nTrain / 100), 10),
|
|
|
|
// If trainIdx is empty, then trainIdx and distance will be created with size nQuery x max((nTrain / 100), 10),
|
|
|
|
|
|
|
|
|
|
|
|
// otherwize user can pass own allocated trainIdx and distance with size nQuery x nMaxMatches
|
|
|
|
// otherwize user can pass own allocated trainIdx and distance with size nQuery x nMaxMatches
|
|
|
|
|
|
|
|
|
|
|
|
// Matches doesn't sorted.
|
|
|
|
// Matches doesn't sorted.
|
|
|
|
|
|
|
|
|
|
|
|
void radiusMatchSingle(const oclMat &query, const oclMat &train, |
|
|
|
void radiusMatchSingle(const oclMat &query, const oclMat &train, |
|
|
|
|
|
|
|
|
|
|
|
oclMat &trainIdx, oclMat &distance, oclMat &nMatches, float maxDistance, |
|
|
|
oclMat &trainIdx, oclMat &distance, oclMat &nMatches, float maxDistance, |
|
|
|
|
|
|
|
|
|
|
|
const oclMat &mask = oclMat()); |
|
|
|
const oclMat &mask = oclMat()); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Download trainIdx, nMatches and distance and convert it to vector with DMatch.
|
|
|
|
// Download trainIdx, nMatches and distance and convert it to vector with DMatch.
|
|
|
|
|
|
|
|
|
|
|
|
// matches will be sorted in increasing order of distances.
|
|
|
|
// matches will be sorted in increasing order of distances.
|
|
|
|
|
|
|
|
|
|
|
|
// compactResult is used when mask is not empty. If compactResult is false matches
|
|
|
|
// compactResult is used when mask is not empty. If compactResult is false matches
|
|
|
|
|
|
|
|
|
|
|
|
// vector will have the same size as queryDescriptors rows. If compactResult is true
|
|
|
|
// vector will have the same size as queryDescriptors rows. If compactResult is true
|
|
|
|
|
|
|
|
|
|
|
|
// matches vector will not contain matches for fully masked out query descriptors.
|
|
|
|
// matches vector will not contain matches for fully masked out query descriptors.
|
|
|
|
|
|
|
|
|
|
|
|
static void radiusMatchDownload(const oclMat &trainIdx, const oclMat &distance, const oclMat &nMatches, |
|
|
|
static void radiusMatchDownload(const oclMat &trainIdx, const oclMat &distance, const oclMat &nMatches, |
|
|
|
|
|
|
|
|
|
|
|
std::vector< std::vector<DMatch> > &matches, bool compactResult = false); |
|
|
|
std::vector< std::vector<DMatch> > &matches, bool compactResult = false); |
|
|
|
|
|
|
|
|
|
|
|
// Convert trainIdx, nMatches and distance to vector with DMatch.
|
|
|
|
// Convert trainIdx, nMatches and distance to vector with DMatch.
|
|
|
|
|
|
|
|
|
|
|
|
static void radiusMatchConvert(const Mat &trainIdx, const Mat &distance, const Mat &nMatches, |
|
|
|
static void radiusMatchConvert(const Mat &trainIdx, const Mat &distance, const Mat &nMatches, |
|
|
|
|
|
|
|
|
|
|
|
std::vector< std::vector<DMatch> > &matches, bool compactResult = false); |
|
|
|
std::vector< std::vector<DMatch> > &matches, bool compactResult = false); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Find best matches for each query descriptor which have distance less than maxDistance
|
|
|
|
// Find best matches for each query descriptor which have distance less than maxDistance
|
|
|
|
|
|
|
|
|
|
|
|
// in increasing order of distances).
|
|
|
|
// in increasing order of distances).
|
|
|
|
|
|
|
|
|
|
|
|
void radiusMatch(const oclMat &query, const oclMat &train, |
|
|
|
void radiusMatch(const oclMat &query, const oclMat &train, |
|
|
|
|
|
|
|
|
|
|
|
std::vector< std::vector<DMatch> > &matches, float maxDistance, |
|
|
|
std::vector< std::vector<DMatch> > &matches, float maxDistance, |
|
|
|
|
|
|
|
|
|
|
|
const oclMat &mask = oclMat(), bool compactResult = false); |
|
|
|
const oclMat &mask = oclMat(), bool compactResult = false); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Find best matches for each query descriptor which have distance less than maxDistance.
|
|
|
|
// Find best matches for each query descriptor which have distance less than maxDistance.
|
|
|
|
|
|
|
|
|
|
|
|
// If trainIdx is empty, then trainIdx and distance will be created with size nQuery x max((nQuery / 100), 10),
|
|
|
|
// If trainIdx is empty, then trainIdx and distance will be created with size nQuery x max((nQuery / 100), 10),
|
|
|
|
|
|
|
|
|
|
|
|
// otherwize user can pass own allocated trainIdx and distance with size nQuery x nMaxMatches
|
|
|
|
// otherwize user can pass own allocated trainIdx and distance with size nQuery x nMaxMatches
|
|
|
|
|
|
|
|
|
|
|
|
// Matches doesn't sorted.
|
|
|
|
// Matches doesn't sorted.
|
|
|
|
|
|
|
|
|
|
|
|
void radiusMatchCollection(const oclMat &query, oclMat &trainIdx, oclMat &imgIdx, oclMat &distance, oclMat &nMatches, float maxDistance, |
|
|
|
void radiusMatchCollection(const oclMat &query, oclMat &trainIdx, oclMat &imgIdx, oclMat &distance, oclMat &nMatches, float maxDistance, |
|
|
|
|
|
|
|
|
|
|
|
const std::vector<oclMat> &masks = std::vector<oclMat>()); |
|
|
|
const std::vector<oclMat> &masks = std::vector<oclMat>()); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Download trainIdx, imgIdx, nMatches and distance and convert it to vector with DMatch.
|
|
|
|
// Download trainIdx, imgIdx, nMatches and distance and convert it to vector with DMatch.
|
|
|
|
|
|
|
|
|
|
|
|
// matches will be sorted in increasing order of distances.
|
|
|
|
// matches will be sorted in increasing order of distances.
|
|
|
|
|
|
|
|
|
|
|
|
// compactResult is used when mask is not empty. If compactResult is false matches
|
|
|
|
// compactResult is used when mask is not empty. If compactResult is false matches
|
|
|
|
|
|
|
|
|
|
|
|
// vector will have the same size as queryDescriptors rows. If compactResult is true
|
|
|
|
// vector will have the same size as queryDescriptors rows. If compactResult is true
|
|
|
|
|
|
|
|
|
|
|
|
// matches vector will not contain matches for fully masked out query descriptors.
|
|
|
|
// matches vector will not contain matches for fully masked out query descriptors.
|
|
|
|
|
|
|
|
|
|
|
|
static void radiusMatchDownload(const oclMat &trainIdx, const oclMat &imgIdx, const oclMat &distance, const oclMat &nMatches, |
|
|
|
static void radiusMatchDownload(const oclMat &trainIdx, const oclMat &imgIdx, const oclMat &distance, const oclMat &nMatches, |
|
|
|
|
|
|
|
|
|
|
|
std::vector< std::vector<DMatch> > &matches, bool compactResult = false); |
|
|
|
std::vector< std::vector<DMatch> > &matches, bool compactResult = false); |
|
|
|
|
|
|
|
|
|
|
|
// Convert trainIdx, nMatches and distance to vector with DMatch.
|
|
|
|
// Convert trainIdx, nMatches and distance to vector with DMatch.
|
|
|
|
|
|
|
|
|
|
|
|
static void radiusMatchConvert(const Mat &trainIdx, const Mat &imgIdx, const Mat &distance, const Mat &nMatches, |
|
|
|
static void radiusMatchConvert(const Mat &trainIdx, const Mat &imgIdx, const Mat &distance, const Mat &nMatches, |
|
|
|
|
|
|
|
|
|
|
|
std::vector< std::vector<DMatch> > &matches, bool compactResult = false); |
|
|
|
std::vector< std::vector<DMatch> > &matches, bool compactResult = false); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Find best matches from train collection for each query descriptor which have distance less than
|
|
|
|
// Find best matches from train collection for each query descriptor which have distance less than
|
|
|
|
|
|
|
|
|
|
|
|
// maxDistance (in increasing order of distances).
|
|
|
|
// maxDistance (in increasing order of distances).
|
|
|
|
|
|
|
|
|
|
|
|
void radiusMatch(const oclMat &query, std::vector< std::vector<DMatch> > &matches, float maxDistance, |
|
|
|
void radiusMatch(const oclMat &query, std::vector< std::vector<DMatch> > &matches, float maxDistance, |
|
|
|
|
|
|
|
|
|
|
|
const std::vector<oclMat> &masks = std::vector<oclMat>(), bool compactResult = false); |
|
|
|
const std::vector<oclMat> &masks = std::vector<oclMat>(), bool compactResult = false); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
DistType distType; |
|
|
|
DistType distType; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private: |
|
|
|
private: |
|
|
|
|
|
|
|
|
|
|
|
std::vector<oclMat> trainDescCollection; |
|
|
|
std::vector<oclMat> trainDescCollection; |
|
|
|
|
|
|
|
|
|
|
|
}; |
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
template <class Distance> |
|
|
|
template <class Distance> |
|
|
|
|
|
|
|
|
|
|
|
class CV_EXPORTS BruteForceMatcher_OCL; |
|
|
|
class CV_EXPORTS BruteForceMatcher_OCL; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
template <typename T> |
|
|
|
template <typename T> |
|
|
|
|
|
|
|
|
|
|
|
class CV_EXPORTS BruteForceMatcher_OCL< L1<T> > : public BruteForceMatcher_OCL_base |
|
|
|
class CV_EXPORTS BruteForceMatcher_OCL< L1<T> > : public BruteForceMatcher_OCL_base |
|
|
|
|
|
|
|
|
|
|
|
{ |
|
|
|
{ |
|
|
|
|
|
|
|
|
|
|
|
public: |
|
|
|
public: |
|
|
|
|
|
|
|
|
|
|
|
explicit BruteForceMatcher_OCL() : BruteForceMatcher_OCL_base(L1Dist) {} |
|
|
|
explicit BruteForceMatcher_OCL() : BruteForceMatcher_OCL_base(L1Dist) {} |
|
|
|
|
|
|
|
|
|
|
|
explicit BruteForceMatcher_OCL(L1<T> /*d*/) : BruteForceMatcher_OCL_base(L1Dist) {} |
|
|
|
explicit BruteForceMatcher_OCL(L1<T> /*d*/) : BruteForceMatcher_OCL_base(L1Dist) {} |
|
|
|
|
|
|
|
|
|
|
|
}; |
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
template <typename T> |
|
|
|
template <typename T> |
|
|
|
|
|
|
|
|
|
|
|
class CV_EXPORTS BruteForceMatcher_OCL< L2<T> > : public BruteForceMatcher_OCL_base |
|
|
|
class CV_EXPORTS BruteForceMatcher_OCL< L2<T> > : public BruteForceMatcher_OCL_base |
|
|
|
|
|
|
|
|
|
|
|
{ |
|
|
|
{ |
|
|
|
|
|
|
|
|
|
|
|
public: |
|
|
|
public: |
|
|
|
|
|
|
|
|
|
|
|
explicit BruteForceMatcher_OCL() : BruteForceMatcher_OCL_base(L2Dist) {} |
|
|
|
explicit BruteForceMatcher_OCL() : BruteForceMatcher_OCL_base(L2Dist) {} |
|
|
|
|
|
|
|
|
|
|
|
explicit BruteForceMatcher_OCL(L2<T> /*d*/) : BruteForceMatcher_OCL_base(L2Dist) {} |
|
|
|
explicit BruteForceMatcher_OCL(L2<T> /*d*/) : BruteForceMatcher_OCL_base(L2Dist) {} |
|
|
|
|
|
|
|
|
|
|
|
}; |
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
template <> class CV_EXPORTS BruteForceMatcher_OCL< Hamming > : public BruteForceMatcher_OCL_base |
|
|
|
template <> class CV_EXPORTS BruteForceMatcher_OCL< Hamming > : public BruteForceMatcher_OCL_base |
|
|
|
|
|
|
|
|
|
|
|
{ |
|
|
|
{ |
|
|
|
|
|
|
|
|
|
|
|
public: |
|
|
|
public: |
|
|
|
|
|
|
|
|
|
|
|
explicit BruteForceMatcher_OCL() : BruteForceMatcher_OCL_base(HammingDist) {} |
|
|
|
explicit BruteForceMatcher_OCL() : BruteForceMatcher_OCL_base(HammingDist) {} |
|
|
|
|
|
|
|
|
|
|
|
explicit BruteForceMatcher_OCL(Hamming /*d*/) : BruteForceMatcher_OCL_base(HammingDist) {} |
|
|
|
explicit BruteForceMatcher_OCL(Hamming /*d*/) : BruteForceMatcher_OCL_base(HammingDist) {} |
|
|
|
|
|
|
|
|
|
|
|
}; |
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class CV_EXPORTS BFMatcher_OCL : public BruteForceMatcher_OCL_base |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
public: |
|
|
|
|
|
|
|
explicit BFMatcher_OCL(int norm = NORM_L2) : BruteForceMatcher_OCL_base(norm == NORM_L1 ? L1Dist : norm == NORM_L2 ? L2Dist : HammingDist) {} |
|
|
|
|
|
|
|
}; |
|
|
|
/////////////////////////////// PyrLKOpticalFlow /////////////////////////////////////
|
|
|
|
/////////////////////////////// PyrLKOpticalFlow /////////////////////////////////////
|
|
|
|
|
|
|
|
|
|
|
|
class CV_EXPORTS PyrLKOpticalFlow |
|
|
|
class CV_EXPORTS PyrLKOpticalFlow |
|
|
|
|
|
|
|
|
|
|
|
{ |
|
|
|
{ |
|
|
|
|
|
|
|
|
|
|
|
public: |
|
|
|
public: |
|
|
|
|
|
|
|
|
|
|
|
PyrLKOpticalFlow() |
|
|
|
PyrLKOpticalFlow() |
|
|
|
|
|
|
|
|
|
|
|
{ |
|
|
|
{ |
|
|
|
|
|
|
|
|
|
|
|
winSize = Size(21, 21); |
|
|
|
winSize = Size(21, 21); |
|
|
|
|
|
|
|
|
|
|
|
maxLevel = 3; |
|
|
|
maxLevel = 3; |
|
|
|
|
|
|
|
|
|
|
|
iters = 30; |
|
|
|
iters = 30; |
|
|
|
|
|
|
|
|
|
|
|
derivLambda = 0.5; |
|
|
|
derivLambda = 0.5; |
|
|
|
|
|
|
|
|
|
|
|
useInitialFlow = false; |
|
|
|
useInitialFlow = false; |
|
|
|
|
|
|
|
|
|
|
|
minEigThreshold = 1e-4f; |
|
|
|
minEigThreshold = 1e-4f; |
|
|
|
|
|
|
|
|
|
|
|
getMinEigenVals = false; |
|
|
|
getMinEigenVals = false; |
|
|
|
|
|
|
|
|
|
|
|
isDeviceArch11_ = false; |
|
|
|
isDeviceArch11_ = false; |
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void sparse(const oclMat &prevImg, const oclMat &nextImg, const oclMat &prevPts, oclMat &nextPts, |
|
|
|
void sparse(const oclMat &prevImg, const oclMat &nextImg, const oclMat &prevPts, oclMat &nextPts, |
|
|
|
|
|
|
|
|
|
|
|
oclMat &status, oclMat *err = 0); |
|
|
|
oclMat &status, oclMat *err = 0); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void dense(const oclMat &prevImg, const oclMat &nextImg, oclMat &u, oclMat &v, oclMat *err = 0); |
|
|
|
void dense(const oclMat &prevImg, const oclMat &nextImg, oclMat &u, oclMat &v, oclMat *err = 0); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Size winSize; |
|
|
|
Size winSize; |
|
|
|
|
|
|
|
|
|
|
|
int maxLevel; |
|
|
|
int maxLevel; |
|
|
|
|
|
|
|
|
|
|
|
int iters; |
|
|
|
int iters; |
|
|
|
|
|
|
|
|
|
|
|
double derivLambda; |
|
|
|
double derivLambda; |
|
|
|
|
|
|
|
|
|
|
|
bool useInitialFlow; |
|
|
|
bool useInitialFlow; |
|
|
|
|
|
|
|
|
|
|
|
float minEigThreshold; |
|
|
|
float minEigThreshold; |
|
|
|
|
|
|
|
|
|
|
|
bool getMinEigenVals; |
|
|
|
bool getMinEigenVals; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void releaseMemory() |
|
|
|
void releaseMemory() |
|
|
|
|
|
|
|
|
|
|
|
{ |
|
|
|
{ |
|
|
|
|
|
|
|
|
|
|
|
dx_calcBuf_.release(); |
|
|
|
dx_calcBuf_.release(); |
|
|
|
|
|
|
|
|
|
|
|
dy_calcBuf_.release(); |
|
|
|
dy_calcBuf_.release(); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
prevPyr_.clear(); |
|
|
|
prevPyr_.clear(); |
|
|
|
|
|
|
|
|
|
|
|
nextPyr_.clear(); |
|
|
|
nextPyr_.clear(); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
dx_buf_.release(); |
|
|
|
dx_buf_.release(); |
|
|
|
|
|
|
|
|
|
|
|
dy_buf_.release(); |
|
|
|
dy_buf_.release(); |
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private: |
|
|
|
private: |
|
|
|
|
|
|
|
|
|
|
|
void calcSharrDeriv(const oclMat &src, oclMat &dx, oclMat &dy); |
|
|
|
void calcSharrDeriv(const oclMat &src, oclMat &dx, oclMat &dy); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void buildImagePyramid(const oclMat &img0, vector<oclMat> &pyr, bool withBorder); |
|
|
|
void buildImagePyramid(const oclMat &img0, vector<oclMat> &pyr, bool withBorder); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
oclMat dx_calcBuf_; |
|
|
|
oclMat dx_calcBuf_; |
|
|
|
|
|
|
|
|
|
|
|
oclMat dy_calcBuf_; |
|
|
|
oclMat dy_calcBuf_; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
vector<oclMat> prevPyr_; |
|
|
|
vector<oclMat> prevPyr_; |
|
|
|
|
|
|
|
|
|
|
|
vector<oclMat> nextPyr_; |
|
|
|
vector<oclMat> nextPyr_; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
oclMat dx_buf_; |
|
|
|
oclMat dx_buf_; |
|
|
|
|
|
|
|
|
|
|
|
oclMat dy_buf_; |
|
|
|
oclMat dy_buf_; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
oclMat uPyr_[2]; |
|
|
|
oclMat uPyr_[2]; |
|
|
|
|
|
|
|
|
|
|
|
oclMat vPyr_[2]; |
|
|
|
oclMat vPyr_[2]; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
bool isDeviceArch11_; |
|
|
|
bool isDeviceArch11_; |
|
|
|
|
|
|
|
|
|
|
|
}; |
|
|
|
}; |
|
|
|
//////////////// build warping maps ////////////////////
|
|
|
|
//////////////// build warping maps ////////////////////
|
|
|
|
//! builds plane warping maps
|
|
|
|
//! builds plane warping maps
|
|
|
|