getOverlappingBoxes(box, num_closest_init);
printf("Found %d good boxes, %d bad boxes\n",(int)good_boxes.size(),(int)bad_boxes.size());
printf("Best Box: %d %d %d %d\n",best_box.x, best_box.y, best_box.width, best_box.height);
printf("Bounding box hull: %d %d %d %d\n", bbhull.x, bbhull.y, bbhull.width, bbhull.height);
lastbox=best_box;
lastconf=1;
lastvalid=true;
fprintf(bb_file,"%d,%d,%d,%d,%f\n",lastbox.x,lastbox.y,lastbox.br().x,lastbox.br().y,lastconf);
classifier.prepare(scales);
generatePositiveData(frame1, num_warps_init);
Scalar stdev, mean;
meanStdDev(frame1(best_box), mean, stdev);
integral(frame1, iisum, iisqsum);
var = pow(stdev.val[0],2) * 0.5;
cout << "variance: " << var << endl;
double vr = getVar(best_box, iisum, iisqsum)*0.5;
cout << "check variance: " << vr << endl;
generateNegativeData(frame1);
int half = (int)nX.size()*0.5f;
nXT.assign(nX.begin()+half, nX.end());
nX.resize(half);
half = (int)nEx.size()*0.5f;
nExT.assign(nEx.begin()+half,nEx.end());
nEx.resize(half);
vector<pair<vector<int>,int> > ferns_data(nX.size()+pX.size());
vector<int> idx = index_shuffle(0, ferns_data.size());
int a=0;
for (int i=0;i<pX.size();i++){
ferns_data[idx[a]] = pX[i];
a++;
}
for (int i=0;i<nX.size();i++){
ferns_data[idx[a]] = nX[i];
a++;
}
vector<cv::Mat> nn_data(nEx.size()+1);
nn_data[0] = pEx;
for (int i=0;i<nEx.size();i++){
nn_data[i+1]= nEx[i];
}
classifier.trainF(ferns_data, 2);
classifier.trainNN(nn_data);
classifier.evaluateTh(nXT, nExT);
}
void TLD::generatePositiveData(const Mat& frame, int num_warps){
Scalar mean;
Scalar stdev;
getPattern(frame(best_box), pEx, mean, stdev);
Mat img;
Mat warped;