1
0
mirror of https://github.com/opencv/opencv.git synced 2026-07-30 15:53:03 +04:00

ml: fix adjusting K in KNearest (#12358)

This commit is contained in:
berak
2018-08-31 15:07:53 +02:00
committed by Vadim Pisarevsky
parent 4b03a4a841
commit e13f6ded7f
2 changed files with 27 additions and 4 deletions
+5 -4
View File
@@ -140,13 +140,12 @@ public:
String getModelName() const CV_OVERRIDE { return NAME_BRUTE_FORCE; }
int getType() const CV_OVERRIDE { return ml::KNearest::BRUTE_FORCE; }
void findNearestCore( const Mat& _samples, int k0, const Range& range,
void findNearestCore( const Mat& _samples, int k, const Range& range,
Mat* results, Mat* neighbor_responses,
Mat* dists, float* presult ) const
{
int testidx, baseidx, i, j, d = samples.cols, nsamples = samples.rows;
int testcount = range.end - range.start;
int k = std::min(k0, nsamples);
AutoBuffer<float> buf(testcount*k*2);
float* dbuf = buf.data();
@@ -215,7 +214,7 @@ public:
float* nr = neighbor_responses->ptr<float>(testidx + range.start);
for( j = 0; j < k; j++ )
nr[j] = rbuf[testidx*k + j];
for( ; j < k0; j++ )
for( ; j < k; j++ )
nr[j] = 0.f;
}
@@ -224,7 +223,7 @@ public:
float* dptr = dists->ptr<float>(testidx + range.start);
for( j = 0; j < k; j++ )
dptr[j] = dbuf[testidx*k + j];
for( ; j < k0; j++ )
for( ; j < k; j++ )
dptr[j] = 0.f;
}
@@ -307,6 +306,7 @@ public:
{
float result = 0.f;
CV_Assert( 0 < k );
k = std::min(k, samples.rows);
Mat test_samples = _samples.getMat();
CV_Assert( test_samples.type() == CV_32F && test_samples.cols == samples.cols );
@@ -363,6 +363,7 @@ public:
{
float result = 0.f;
CV_Assert( 0 < k );
k = std::min(k, samples.rows);
Mat test_samples = _samples.getMat();
CV_Assert( test_samples.type() == CV_32F && test_samples.cols == samples.cols );