diff --git a/modules/ml/src/svm.cpp b/modules/ml/src/svm.cpp index be662f459..7183d62b1 100644 --- a/modules/ml/src/svm.cpp +++ b/modules/ml/src/svm.cpp @@ -330,18 +330,18 @@ void CvSVMKernel::calc_intersec( int vcount, int var_count, const float** vecs, const float* sample = vecs[j]; double s = 0; for( k = 0; k <= var_count - 4; k += 4 ) - s += min(sample[k],another[k]) + min(sample[k+1],another[k+1]) + - min(sample[k+2],another[k+2]) + min(sample[k+3],another[k+3]); + s += std::min(sample[k],another[k]) + std::min(sample[k+1],another[k+1]) + + std::min(sample[k+2],another[k+2]) + std::min(sample[k+3],another[k+3]); for( ; k < var_count; k++ ) - s += min(sample[k],another[k]); + s += std::min(sample[k],another[k]); results[j] = (Qfloat)(s); - } + } } /// Exponential chi2 kernel void CvSVMKernel::calc_chi2( int vcount, int var_count, const float** vecs, const float* another, Qfloat* results ) -{ +{ CvMat R = cvMat( 1, vcount, QFLOAT_TYPE, results ); double gamma = -params->gamma; int j, k; @@ -349,22 +349,22 @@ void CvSVMKernel::calc_chi2( int vcount, int var_count, const float** vecs, { const float* sample = vecs[j]; double chi2 = 0; - for(k = 0 ; k < var_count; k++ ) - { + for(k = 0 ; k < var_count; k++ ) + { double d = sample[k]-another[k]; - double devisor = sample[k]+another[k]; - /// if devisor == 0, the Chi2 distance would be zero, but calculation would rise an error because of deviding by zero - if (devisor != 0) - { - chi2 += d*d/devisor; - } - } + double devisor = sample[k]+another[k]; + /// if devisor == 0, the Chi2 distance would be zero, but calculation would rise an error because of deviding by zero + if (devisor != 0) + { + chi2 += d*d/devisor; + } + } results[j] = (Qfloat) (gamma*chi2); - } + } if( vcount > 0 ) - cvExp( &R, &R ); - - + cvExp( &R, &R ); + + } void CvSVMKernel::calc( int vcount, int var_count, const float** vecs, @@ -1262,7 +1262,7 @@ bool CvSVM::set_params( const CvSVMParams& _params ) svm_type = params.svm_type; if( kernel_type != LINEAR && kernel_type != POLY && - kernel_type != SIGMOID && kernel_type != RBF && + kernel_type != SIGMOID && kernel_type != RBF && kernel_type != INTER && kernel_type != CHI2) CV_ERROR( CV_StsBadArg, "Unknown/unsupported kernel type" );