mirror of
https://github.com/opencv/opencv.git
synced 2026-07-21 19:33:03 +04:00
Merge pull request #28545 from vrabaud:c_headers
Help compiler vectorize loops in meanSplit
This commit is contained in:
@@ -46,6 +46,11 @@
|
||||
#include "random.h"
|
||||
#include "saving.h"
|
||||
|
||||
#if defined(__clang__) || defined(__GNUC__)
|
||||
#define CV_RESTRICT __restrict__
|
||||
#else
|
||||
#define CV_RESTRICT
|
||||
#endif
|
||||
|
||||
namespace cvflann
|
||||
{
|
||||
@@ -320,9 +325,7 @@ private:
|
||||
int cnt = std::min((int)SAMPLE_MEAN+1, count);
|
||||
for (int j = 0; j < cnt; ++j) {
|
||||
ElementType* v = dataset_[ind[j]];
|
||||
for (size_t k=0; k<veclen_; ++k) {
|
||||
mean_[k] += v[k];
|
||||
}
|
||||
Sum(v, veclen_, mean_);
|
||||
}
|
||||
for (size_t k=0; k<veclen_; ++k) {
|
||||
mean_[k] /= cnt;
|
||||
@@ -331,10 +334,7 @@ private:
|
||||
/* Compute variances (no need to divide by count). */
|
||||
for (int j = 0; j < cnt; ++j) {
|
||||
ElementType* v = dataset_[ind[j]];
|
||||
for (size_t k=0; k<veclen_; ++k) {
|
||||
DistanceType dist = v[k] - mean_[k];
|
||||
var_[k] += dist * dist;
|
||||
}
|
||||
Var(v, mean_, veclen_, var_);
|
||||
}
|
||||
/* Select one of the highest variance indices at random. */
|
||||
cutfeat = selectDivision(var_);
|
||||
@@ -584,6 +584,18 @@ private:
|
||||
RAND_DIM=5
|
||||
};
|
||||
|
||||
void Sum(const ElementType* CV_RESTRICT data, size_t len, DistanceType* CV_RESTRICT mean) {
|
||||
for (size_t k=0; k<len; ++k) {
|
||||
mean[k] += data[k];
|
||||
}
|
||||
}
|
||||
|
||||
void Var(const ElementType* CV_RESTRICT data, const DistanceType* CV_RESTRICT mean, size_t len, DistanceType*CV_RESTRICT var) {
|
||||
for (size_t k=0; k<len; ++k) {
|
||||
DistanceType dist = data[k] - mean[k];
|
||||
var[k] += dist * dist;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Number of randomized trees that are used
|
||||
|
||||
Reference in New Issue
Block a user