1
0
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:
Alexander Smorkalov
2026-02-17 08:34:23 +03:00
committed by GitHub
@@ -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