void TLD::selectObject(const Mat &img, Rect *bb)
{
    //Delete old object
    detectorCascade->release();



    detectorCascade->objWidth = bb->width;
    detectorCascade->objHeight = bb->height;

    //Init detector cascade
    detectorCascade->init();

    currImg = img;
    if(currBB)
    {
        delete currBB;
        currBB = NULL;
    }
    currBB = tldCopyRect(bb);
    currConf = 1;
    valid = true;

   initialLearning();

}
Пример #2
0
void TLD::selectObject(const Mat &img, Rect *bb)
{
    //Delete old object
    detectorCascade->release();

    detectorCascade->objWidth = bb->width;
    detectorCascade->objHeight = bb->height;

    //Init detector cascade
    detectorCascade->init();

#ifdef USE_HTLD
	if(hTLDMaster->getNumOfObjects() > 0)
		hTLDMaster->destroyTLDObject(tldObjId);
	FAST_DET_INIT_PARAMS* fdi = detectorCascade->createFastDetInitStr();
	FAST_TR_INIT_PARAMS* fti  = medianFlowTracker->createFastTrInitStr();
	tldObjId                  = hTLDMaster->createTLDObject(fti, fdi);
	free((void*)fdi);
#endif

    currImg = img;
    if(currBB)
    {
        delete currBB;
        currBB = NULL;
    }
    currBB = tldCopyRect(bb);
    currConf = 1;
    valid = true;

    initialLearning();

}
Пример #3
0
void TLD::fuseHypotheses() {
	Rect* trackerBB = medianFlowTracker->trackerBB;
	int numClusters = detectorCascade->detectionResult->numClusters;
	Rect* detectorBB = detectorCascade->detectionResult->detectorBB;


	currBB = NULL;
	currConf = 0;
	valid = false;

	float confDetector = 0;

	if(numClusters == 1) {
		confDetector = nnClassifier->classifyBB(currImg, detectorBB);
	}

	if(trackerBB != NULL) {
		float confTracker = nnClassifier->classifyBB(currImg, trackerBB);

		if(numClusters == 1 && confDetector > confTracker && tldOverlapRectRect(*trackerBB, *detectorBB) < 0.5) {

			currBB = tldCopyRect(detectorBB);
			currConf = confDetector;
		} else {
			currBB = tldCopyRect(trackerBB);
			currConf = confTracker;
			if(confTracker > nnClassifier->thetaTP) {
				valid = true;
			} else if(wasValid && confTracker > nnClassifier->thetaFP) {
				valid = true;
			}
		}
	} else if(numClusters == 1) {
		currBB = tldCopyRect(detectorBB);
		currConf = confDetector;
	}

	/*
	float var = CalculateVariance(patch.values, nn->patch_size*nn->patch_size);

	if(var < min_var) { //TODO: Think about incorporating this
		printf("%f, %f: Variance too low \n", var, classifier->min_var);
		valid = 0;
	}*/
}
Пример #4
0
    void TLD::fuseHypotheses(const Mat& colorImg) {
        int numClusters = detectorCascade->detectionResult->numClusters;
        Rect* detectorBB = detectorCascade->detectionResult->detectorBB;
        deleteCurrentBB();

        currConf = 0;
        valid = false;

        if (!detectorEnabled) {
            if (!isTrackerValid)
            { return; }

            currBB = tldCopyRect(&trackerBB);
            valid = true;
            return;
        }

        float confDetector = 0;

        if (numClusters == 1)
        { confDetector = nnClassifier->classifyBB(currImg, detectorBB); }

        if (isTrackerValid) {
            float confTracker = nnClassifier->classifyBB(currImg, &trackerBB);
            currBB = tldCopyRect(&trackerBB);
            valid = true;
            currConf = confTracker;
        } else if (numClusters == 1) {
            // reinit tracker
            if (trackerEnabled) {
                if (tracker->updateAt(colorImg, *detectorBB)) {
                    currConf = nnClassifier->classifyBB(currImg, detectorBB);
                    currBB = tldCopyRect(detectorBB);
                    valid = true;
                    runTracker = true;
                } else {
                    deleteCurrentBB();
                    currConf = 0;
                    valid = false;
                }
            }
        }
    }
Пример #5
0
    void TLD::selectObject(const Mat& img, Rect* bb) {
        if (!tracker)
        { return; }

        if (!rng) {
            std::random_device rd;
            std::shared_ptr<std::mt19937> g(new std::mt19937(rd()));
            g->seed((unsigned long)seed);
            rng = g;
        }

        rng->seed((unsigned long)seed);

        Mat grayFrame;
        cvtColor(img, grayFrame, CV_BGR2GRAY);

        // initialize the image dimensions once
        if (!hasImageDimensions) {
            detectorCascade->imgWidth = grayFrame.cols;
            detectorCascade->imgHeight = grayFrame.rows;
            detectorCascade->imgWidthStep = static_cast<int>(grayFrame.step);
        }

        runTracker = true;
        //Delete old object
        detectorCascade->release();

        detectorCascade->objWidth = bb->width;
        detectorCascade->objHeight = bb->height;

        if (bb->height < detectorCascade->minSize)
        { detectorCascade->minSize = bb->height; }

        if (bb->width < detectorCascade->minSize)
        { detectorCascade->minSize = bb->width; }

        //Init detector cascade
        detectorCascade->init(rng);
        tracker->reinit(img, *bb);

        currImg = grayFrame;
        deleteCurrentBB();
        currBB = tldCopyRect(bb);
        currConf = 1;
        valid = true;

        initialLearning();
    }