|
|
|
@ -44,7 +44,7 @@ |
|
|
|
|
namespace cv |
|
|
|
|
{ |
|
|
|
|
//Multitracker
|
|
|
|
|
bool MultiTracker::addTarget(const Mat& image, const Rect2d& boundingBox, char* tracker_algorithm_name) |
|
|
|
|
bool MultiTracker::addTarget(const Mat& image, const Rect2d& boundingBox, String tracker_algorithm_name) |
|
|
|
|
{ |
|
|
|
|
Ptr<Tracker> tracker = Tracker::create(tracker_algorithm_name); |
|
|
|
|
if (tracker == NULL) |
|
|
|
@ -65,6 +65,8 @@ namespace cv |
|
|
|
|
else |
|
|
|
|
colors.push_back(Scalar(rand() % 256, rand() % 256, rand() % 256)); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//Target counter
|
|
|
|
|
targetNum++; |
|
|
|
|
|
|
|
|
@ -73,8 +75,7 @@ namespace cv |
|
|
|
|
|
|
|
|
|
bool MultiTracker::update(const Mat& image) |
|
|
|
|
{ |
|
|
|
|
printf("Naive-Loop MO-TLD Update....\n"); |
|
|
|
|
for (int i = 0; i < trackers.size(); i++) |
|
|
|
|
for (int i = 0; i < (int)trackers.size(); i++) |
|
|
|
|
if (!trackers[i]->update(image, boundingBoxes[i])) |
|
|
|
|
return false; |
|
|
|
|
|
|
|
|
@ -85,16 +86,12 @@ namespace cv |
|
|
|
|
/*Optimized update method for TLD Multitracker */ |
|
|
|
|
bool MultiTrackerTLD::update_opt(const Mat& image) |
|
|
|
|
{ |
|
|
|
|
printf("Optimized MO-TLD Update....\n"); |
|
|
|
|
|
|
|
|
|
//Get parameters from first object
|
|
|
|
|
//Set current target(tracker) parameters
|
|
|
|
|
Rect2d boundingBox = boundingBoxes[0]; |
|
|
|
|
//TLD Tracker data extraction
|
|
|
|
|
Tracker* trackerPtr = trackers[0]; |
|
|
|
|
tld::TrackerTLDImpl* tracker = static_cast<tld::TrackerTLDImpl*>(trackerPtr); |
|
|
|
|
//TLD Model Extraction
|
|
|
|
|
tld::TrackerTLDModel* tldModel = ((tld::TrackerTLDModel*)static_cast<TrackerModel*>(tracker->model)); |
|
|
|
|
tld::TrackerTLDModel* tldModel = ((tld::TrackerTLDModel*)static_cast<TrackerModel*>(tracker->getModel())); |
|
|
|
|
Ptr<tld::Data> data = tracker->data; |
|
|
|
|
double scale = data->getScale(); |
|
|
|
|
|
|
|
|
@ -130,11 +127,11 @@ namespace cv |
|
|
|
|
for (int k = 0; k < targetNum; k++) |
|
|
|
|
{ |
|
|
|
|
//TLD Tracker data extraction
|
|
|
|
|
Tracker* trackerPtr = trackers[k]; |
|
|
|
|
tld::TrackerTLDImpl* tracker = static_cast<tld::TrackerTLDImpl*>(trackerPtr); |
|
|
|
|
trackerPtr = trackers[k]; |
|
|
|
|
tracker = static_cast<tld::TrackerTLDImpl*>(trackerPtr); |
|
|
|
|
//TLD Model Extraction
|
|
|
|
|
tld::TrackerTLDModel* tldModel = ((tld::TrackerTLDModel*)static_cast<TrackerModel*>(tracker->model)); |
|
|
|
|
Ptr<tld::Data> data = tracker->data; |
|
|
|
|
tldModel = ((tld::TrackerTLDModel*)static_cast<TrackerModel*>(tracker->getModel())); |
|
|
|
|
data = tracker->data; |
|
|
|
|
|
|
|
|
|
data->frameNum++; |
|
|
|
|
|
|
|
|
@ -186,16 +183,7 @@ namespace cv |
|
|
|
|
|
|
|
|
|
#if 1 |
|
|
|
|
if (it != candidatesRes[k].end()) |
|
|
|
|
{ |
|
|
|
|
tld::resample(imageForDetector, candidates[k][it - candidatesRes[k].begin()], standardPatch); |
|
|
|
|
//dfprintf((stderr, "%d %f %f\n", data->frameNum, tldModel->Sc(standardPatch), tldModel->Sr(standardPatch)));
|
|
|
|
|
//if( candidatesRes.size() == 2 && it == (candidatesRes.begin() + 1) )
|
|
|
|
|
//dfprintf((stderr, "detector WON\n"));
|
|
|
|
|
} |
|
|
|
|
else |
|
|
|
|
{ |
|
|
|
|
//dfprintf((stderr, "%d x x\n", data->frameNum));
|
|
|
|
|
} |
|
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
if (*it > tld::CORE_THRESHOLD) |
|
|
|
@ -226,7 +214,6 @@ namespace cv |
|
|
|
|
detectorResults[k][i].isObject = expertResult; |
|
|
|
|
} |
|
|
|
|
tldModel->integrateRelabeled(imageForDetector, image_blurred, detectorResults[k]); |
|
|
|
|
//dprintf(("%d relabeled by nExpert\n", negRelabeled));
|
|
|
|
|
pExpert.additionalExamples(examplesForModel, examplesForEnsemble); |
|
|
|
|
if (ocl::haveOpenCL()) |
|
|
|
|
tldModel->ocl_integrateAdditional(examplesForModel, examplesForEnsemble, true); |
|
|
|
@ -249,14 +236,7 @@ namespace cv |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
//Debug display candidates after Variance Filter
|
|
|
|
|
////////////////////////////////////////////////
|
|
|
|
|
Mat tmpImg = image; |
|
|
|
|
for (int i = 0; i < debugStack[0].size(); i++) |
|
|
|
|
//rectangle(tmpImg, debugStack[0][i], Scalar(255, 255, 255), 1, 1, 0);
|
|
|
|
|
debugStack[0].clear(); |
|
|
|
|
tmpImg.copyTo(image); |
|
|
|
|
////////////////////////////////////////////////
|
|
|
|
|
|
|
|
|
|
return true; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -267,10 +247,10 @@ namespace cv |
|
|
|
|
Tracker* trackerPtr = trackers[0]; |
|
|
|
|
cv::tld::TrackerTLDImpl* tracker = static_cast<tld::TrackerTLDImpl*>(trackerPtr); |
|
|
|
|
//TLD Model Extraction
|
|
|
|
|
tld::TrackerTLDModel* tldModel = ((tld::TrackerTLDModel*)static_cast<TrackerModel*>(tracker->model)); |
|
|
|
|
tld::TrackerTLDModel* tldModel = ((tld::TrackerTLDModel*)static_cast<TrackerModel*>(tracker->getModel())); |
|
|
|
|
Size initSize = tldModel->getMinSize(); |
|
|
|
|
|
|
|
|
|
for (int k = 0; k < trackers.size(); k++) |
|
|
|
|
for (int k = 0; k < (int)trackers.size(); k++) |
|
|
|
|
patches[k].clear(); |
|
|
|
|
|
|
|
|
|
Mat_<uchar> standardPatch(tld::STANDARD_PATCH_SIZE, tld::STANDARD_PATCH_SIZE); |
|
|
|
@ -290,10 +270,6 @@ namespace cv |
|
|
|
|
std::vector <Point> tmpP; |
|
|
|
|
std::vector <int> tmpI; |
|
|
|
|
|
|
|
|
|
//int64 e1, e2;
|
|
|
|
|
//double t;
|
|
|
|
|
//e1 = getTickCount();
|
|
|
|
|
|
|
|
|
|
//Detection part
|
|
|
|
|
//Generate windows and filter by variance
|
|
|
|
|
scaleID = 0; |
|
|
|
@ -329,13 +305,13 @@ namespace cv |
|
|
|
|
double windowVar = p2 - p * p; |
|
|
|
|
|
|
|
|
|
//Loop for on all objects
|
|
|
|
|
for (int k=0; k < trackers.size(); k++) |
|
|
|
|
for (int k = 0; k < (int)trackers.size(); k++) |
|
|
|
|
{ |
|
|
|
|
//TLD Tracker data extraction
|
|
|
|
|
Tracker* trackerPtr = trackers[k]; |
|
|
|
|
cv::tld::TrackerTLDImpl* tracker = static_cast<tld::TrackerTLDImpl*>(trackerPtr); |
|
|
|
|
trackerPtr = trackers[k]; |
|
|
|
|
tracker = static_cast<tld::TrackerTLDImpl*>(trackerPtr); |
|
|
|
|
//TLD Model Extraction
|
|
|
|
|
tld::TrackerTLDModel* tldModel = ((tld::TrackerTLDModel*)static_cast<TrackerModel*>(tracker->model)); |
|
|
|
|
tldModel = ((tld::TrackerTLDModel*)static_cast<TrackerModel*>(tracker->getModel())); |
|
|
|
|
|
|
|
|
|
//Optimized variance calculation
|
|
|
|
|
bool varPass = (windowVar > tld::VARIANCE_THRESHOLD * *tldModel->detector->originalVariancePtr); |
|
|
|
@ -344,10 +320,6 @@ namespace cv |
|
|
|
|
continue; |
|
|
|
|
varBuffer[k].push_back(Point(dx * i, dy * j)); |
|
|
|
|
varScaleIDs[k].push_back(scaleID); |
|
|
|
|
|
|
|
|
|
//Debug display candidates after Variance Filter
|
|
|
|
|
double curScale = pow(tld::SCALE_STEP, scaleID); |
|
|
|
|
debugStack[0].push_back(Rect2d(dx * i* curScale, dy * j*curScale, tldModel->getMinSize().width*curScale, tldModel->getMinSize().height*curScale)); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
@ -361,23 +333,14 @@ namespace cv |
|
|
|
|
blurred_imgs.push_back(tmp); |
|
|
|
|
} while (size.width >= initSize.width && size.height >= initSize.height); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//e2 = getTickCount();
|
|
|
|
|
//t = (e2 - e1) / getTickFrequency()*1000.0;
|
|
|
|
|
//printf("Variance: %d\t%f\n", varBuffer.size(), t);
|
|
|
|
|
|
|
|
|
|
//printf("OrigVar 1: %f\n", *tldModel->detector->originalVariancePtr);
|
|
|
|
|
|
|
|
|
|
//Encsemble classification
|
|
|
|
|
//e1 = getTickCount();
|
|
|
|
|
for (int k = 0; k < trackers.size(); k++) |
|
|
|
|
for (int k = 0; k < (int)trackers.size(); k++) |
|
|
|
|
{ |
|
|
|
|
//TLD Tracker data extraction
|
|
|
|
|
Tracker* trackerPtr = trackers[k]; |
|
|
|
|
cv::tld::TrackerTLDImpl* tracker = static_cast<tld::TrackerTLDImpl*>(trackerPtr); |
|
|
|
|
trackerPtr = trackers[k]; |
|
|
|
|
tracker = static_cast<tld::TrackerTLDImpl*>(trackerPtr); |
|
|
|
|
//TLD Model Extraction
|
|
|
|
|
tld::TrackerTLDModel* tldModel = ((tld::TrackerTLDModel*)static_cast<TrackerModel*>(tracker->model)); |
|
|
|
|
tldModel = ((tld::TrackerTLDModel*)static_cast<TrackerModel*>(tracker->getModel())); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
for (int i = 0; i < (int)varBuffer[k].size(); i++) |
|
|
|
@ -410,36 +373,16 @@ namespace cv |
|
|
|
|
ensBuffer[k].push_back(varBuffer[k][i]); |
|
|
|
|
ensScaleIDs[k].push_back(varScaleIDs[k][i]); |
|
|
|
|
} |
|
|
|
|
/*
|
|
|
|
|
for (int i = 0; i < (int)varBuffer[k].size(); i++) |
|
|
|
|
{ |
|
|
|
|
tldModel->detector->prepareClassifiers(static_cast<int> (blurred_imgs[varScaleIDs[k][i]].step[0])); |
|
|
|
|
if (tldModel->detector->ensembleClassifierNum(&blurred_imgs[varScaleIDs[k][i]].at<uchar>(varBuffer[k][i].y, varBuffer[k][i].x)) <= tld::ENSEMBLE_THRESHOLD) |
|
|
|
|
continue; |
|
|
|
|
ensBuffer[k].push_back(varBuffer[k][i]); |
|
|
|
|
ensScaleIDs[k].push_back(varScaleIDs[k][i]); |
|
|
|
|
} |
|
|
|
|
*/ |
|
|
|
|
} |
|
|
|
|
//e2 = getTickCount();
|
|
|
|
|
//t = (e2 - e1) / getTickFrequency()*1000.0;
|
|
|
|
|
//printf("Ensemble: %d\t%f\n", ensBuffer.size(), t);
|
|
|
|
|
|
|
|
|
|
//printf("varBuffer 1: %d\n", varBuffer[0].size());
|
|
|
|
|
//printf("ensBuffer 1: %d\n", ensBuffer[0].size());
|
|
|
|
|
|
|
|
|
|
//printf("varBuffer 2: %d\n", varBuffer[1].size());
|
|
|
|
|
//printf("ensBuffer 2: %d\n", ensBuffer[1].size());
|
|
|
|
|
|
|
|
|
|
//NN classification
|
|
|
|
|
//e1 = getTickCount();
|
|
|
|
|
for (int k = 0; k < trackers.size(); k++) |
|
|
|
|
for (int k = 0; k < (int)trackers.size(); k++) |
|
|
|
|
{ |
|
|
|
|
//TLD Tracker data extraction
|
|
|
|
|
Tracker* trackerPtr = trackers[k]; |
|
|
|
|
cv::tld::TrackerTLDImpl* tracker = static_cast<tld::TrackerTLDImpl*>(trackerPtr); |
|
|
|
|
trackerPtr = trackers[k]; |
|
|
|
|
tracker = static_cast<tld::TrackerTLDImpl*>(trackerPtr); |
|
|
|
|
//TLD Model Extraction
|
|
|
|
|
tld::TrackerTLDModel* tldModel = ((tld::TrackerTLDModel*)static_cast<TrackerModel*>(tracker->model)); |
|
|
|
|
tldModel = ((tld::TrackerTLDModel*)static_cast<TrackerModel*>(tracker->getModel())); |
|
|
|
|
|
|
|
|
|
npos = 0; |
|
|
|
|
nneg = 0; |
|
|
|
@ -477,7 +420,6 @@ namespace cv |
|
|
|
|
maxSc = scValue; |
|
|
|
|
maxScRect = labPatch.rect; |
|
|
|
|
} |
|
|
|
|
//printf("%d %f %f\n", k, srValue, scValue);
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -487,13 +429,9 @@ namespace cv |
|
|
|
|
else |
|
|
|
|
{ |
|
|
|
|
res[k] = maxScRect; |
|
|
|
|
//printf("%f %f %f %f\n", maxScRect.x, maxScRect.y, maxScRect.width, maxScRect.height);
|
|
|
|
|
detect_flgs[k] = true; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
//e2 = getTickCount();
|
|
|
|
|
//t = (e2 - e1) / getTickFrequency()*1000.0;
|
|
|
|
|
//printf("NN: %d\t%f\n", patches.size(), t);
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void ocl_detect_all(const Mat& img, const Mat& imgBlurred, std::vector<Rect2d>& res, std::vector < std::vector < tld::TLDDetector::LabeledPatch > > &patches, std::vector<bool> &detect_flgs, |
|
|
|
@ -503,10 +441,10 @@ namespace cv |
|
|
|
|
Tracker* trackerPtr = trackers[0]; |
|
|
|
|
cv::tld::TrackerTLDImpl* tracker = static_cast<tld::TrackerTLDImpl*>(trackerPtr); |
|
|
|
|
//TLD Model Extraction
|
|
|
|
|
tld::TrackerTLDModel* tldModel = ((tld::TrackerTLDModel*)static_cast<TrackerModel*>(tracker->model)); |
|
|
|
|
tld::TrackerTLDModel* tldModel = ((tld::TrackerTLDModel*)static_cast<TrackerModel*>(tracker->getModel())); |
|
|
|
|
Size initSize = tldModel->getMinSize(); |
|
|
|
|
|
|
|
|
|
for (int k = 0; k < trackers.size(); k++) |
|
|
|
|
for (int k = 0; k < (int)trackers.size(); k++) |
|
|
|
|
patches[k].clear(); |
|
|
|
|
|
|
|
|
|
Mat_<uchar> standardPatch(tld::STANDARD_PATCH_SIZE, tld::STANDARD_PATCH_SIZE); |
|
|
|
@ -526,10 +464,6 @@ namespace cv |
|
|
|
|
std::vector <Point> tmpP; |
|
|
|
|
std::vector <int> tmpI; |
|
|
|
|
|
|
|
|
|
//int64 e1, e2;
|
|
|
|
|
//double t;
|
|
|
|
|
//e1 = getTickCount();
|
|
|
|
|
|
|
|
|
|
//Detection part
|
|
|
|
|
//Generate windows and filter by variance
|
|
|
|
|
scaleID = 0; |
|
|
|
@ -565,13 +499,13 @@ namespace cv |
|
|
|
|
double windowVar = p2 - p * p; |
|
|
|
|
|
|
|
|
|
//Loop for on all objects
|
|
|
|
|
for (int k = 0; k < trackers.size(); k++) |
|
|
|
|
for (int k = 0; k < (int)trackers.size(); k++) |
|
|
|
|
{ |
|
|
|
|
//TLD Tracker data extraction
|
|
|
|
|
Tracker* trackerPtr = trackers[k]; |
|
|
|
|
cv::tld::TrackerTLDImpl* tracker = static_cast<tld::TrackerTLDImpl*>(trackerPtr); |
|
|
|
|
trackerPtr = trackers[k]; |
|
|
|
|
tracker = static_cast<tld::TrackerTLDImpl*>(trackerPtr); |
|
|
|
|
//TLD Model Extraction
|
|
|
|
|
tld::TrackerTLDModel* tldModel = ((tld::TrackerTLDModel*)static_cast<TrackerModel*>(tracker->model)); |
|
|
|
|
tldModel = ((tld::TrackerTLDModel*)static_cast<TrackerModel*>(tracker->getModel())); |
|
|
|
|
|
|
|
|
|
//Optimized variance calculation
|
|
|
|
|
bool varPass = (windowVar > tld::VARIANCE_THRESHOLD * *tldModel->detector->originalVariancePtr); |
|
|
|
@ -580,10 +514,6 @@ namespace cv |
|
|
|
|
continue; |
|
|
|
|
varBuffer[k].push_back(Point(dx * i, dy * j)); |
|
|
|
|
varScaleIDs[k].push_back(scaleID); |
|
|
|
|
|
|
|
|
|
//Debug display candidates after Variance Filter
|
|
|
|
|
double curScale = pow(tld::SCALE_STEP, scaleID); |
|
|
|
|
debugStack[0].push_back(Rect2d(dx * i* curScale, dy * j*curScale, tldModel->getMinSize().width*curScale, tldModel->getMinSize().height*curScale)); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
@ -597,23 +527,14 @@ namespace cv |
|
|
|
|
blurred_imgs.push_back(tmp); |
|
|
|
|
} while (size.width >= initSize.width && size.height >= initSize.height); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//e2 = getTickCount();
|
|
|
|
|
//t = (e2 - e1) / getTickFrequency()*1000.0;
|
|
|
|
|
//printf("Variance: %d\t%f\n", varBuffer.size(), t);
|
|
|
|
|
|
|
|
|
|
//printf("OrigVar 1: %f\n", *tldModel->detector->originalVariancePtr);
|
|
|
|
|
|
|
|
|
|
//Encsemble classification
|
|
|
|
|
//e1 = getTickCount();
|
|
|
|
|
for (int k = 0; k < trackers.size(); k++) |
|
|
|
|
for (int k = 0; k < (int)trackers.size(); k++) |
|
|
|
|
{ |
|
|
|
|
//TLD Tracker data extraction
|
|
|
|
|
Tracker* trackerPtr = trackers[k]; |
|
|
|
|
cv::tld::TrackerTLDImpl* tracker = static_cast<tld::TrackerTLDImpl*>(trackerPtr); |
|
|
|
|
trackerPtr = trackers[k]; |
|
|
|
|
tracker = static_cast<tld::TrackerTLDImpl*>(trackerPtr); |
|
|
|
|
//TLD Model Extraction
|
|
|
|
|
tld::TrackerTLDModel* tldModel = ((tld::TrackerTLDModel*)static_cast<TrackerModel*>(tracker->model)); |
|
|
|
|
tldModel = ((tld::TrackerTLDModel*)static_cast<TrackerModel*>(tracker->getModel())); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
for (int i = 0; i < (int)varBuffer[k].size(); i++) |
|
|
|
@ -646,36 +567,16 @@ namespace cv |
|
|
|
|
ensBuffer[k].push_back(varBuffer[k][i]); |
|
|
|
|
ensScaleIDs[k].push_back(varScaleIDs[k][i]); |
|
|
|
|
} |
|
|
|
|
/*
|
|
|
|
|
for (int i = 0; i < (int)varBuffer[k].size(); i++) |
|
|
|
|
{ |
|
|
|
|
tldModel->detector->prepareClassifiers(static_cast<int> (blurred_imgs[varScaleIDs[k][i]].step[0])); |
|
|
|
|
if (tldModel->detector->ensembleClassifierNum(&blurred_imgs[varScaleIDs[k][i]].at<uchar>(varBuffer[k][i].y, varBuffer[k][i].x)) <= tld::ENSEMBLE_THRESHOLD) |
|
|
|
|
continue; |
|
|
|
|
ensBuffer[k].push_back(varBuffer[k][i]); |
|
|
|
|
ensScaleIDs[k].push_back(varScaleIDs[k][i]); |
|
|
|
|
} |
|
|
|
|
*/ |
|
|
|
|
} |
|
|
|
|
//e2 = getTickCount();
|
|
|
|
|
//t = (e2 - e1) / getTickFrequency()*1000.0;
|
|
|
|
|
|
|
|
|
|
//printf("varBuffer 1: %d\n", varBuffer[0].size());
|
|
|
|
|
//printf("ensBuffer 1: %d\n", ensBuffer[0].size());
|
|
|
|
|
|
|
|
|
|
//printf("varBuffer 2: %d\n", varBuffer[1].size());
|
|
|
|
|
//printf("ensBuffer 2: %d\n", ensBuffer[1].size());
|
|
|
|
|
|
|
|
|
|
//NN classification
|
|
|
|
|
//e1 = getTickCount();
|
|
|
|
|
for (int k = 0; k < trackers.size(); k++) |
|
|
|
|
for (int k = 0; k < (int)trackers.size(); k++) |
|
|
|
|
{ |
|
|
|
|
//TLD Tracker data extraction
|
|
|
|
|
Tracker* trackerPtr = trackers[k]; |
|
|
|
|
cv::tld::TrackerTLDImpl* tracker = static_cast<tld::TrackerTLDImpl*>(trackerPtr); |
|
|
|
|
trackerPtr = trackers[k]; |
|
|
|
|
tracker = static_cast<tld::TrackerTLDImpl*>(trackerPtr); |
|
|
|
|
//TLD Model Extraction
|
|
|
|
|
tld::TrackerTLDModel* tldModel = ((tld::TrackerTLDModel*)static_cast<TrackerModel*>(tracker->model)); |
|
|
|
|
//Size InitSize = tldModel->getMinSize();
|
|
|
|
|
tldModel = ((tld::TrackerTLDModel*)static_cast<TrackerModel*>(tracker->getModel())); |
|
|
|
|
npos = 0; |
|
|
|
|
nneg = 0; |
|
|
|
|
maxSc = -5.0; |
|
|
|
@ -730,7 +631,6 @@ namespace cv |
|
|
|
|
maxSc = scValue; |
|
|
|
|
maxScRect = labPatch.rect; |
|
|
|
|
} |
|
|
|
|
//printf("%d %f %f\n", k, srValue, scValue);
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -740,12 +640,9 @@ namespace cv |
|
|
|
|
else |
|
|
|
|
{ |
|
|
|
|
res[k] = maxScRect; |
|
|
|
|
//printf("%f %f %f %f\n", maxScRect.x, maxScRect.y, maxScRect.width, maxScRect.height);
|
|
|
|
|
detect_flgs[k] = true; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
//e2 = getTickCount();
|
|
|
|
|
//t = (e2 - e1) / getTickFrequency()*1000.0;
|
|
|
|
|
//printf("NN: %d\t%f\n", patches.size(), t);
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
} |