/*! Adjusts the stochastic model state on the basis of the given measurement of the model state. m is usually equal to get_last_feature(). @see Perform_Kalman_Filtering() */ void Trace::Correct_Kalman_Filter(BlobPtr m) { CvMat* z = cvCreateMat(1,1,CV_32FC1); //Centroid cvmSet(z,0,0,m->centroid().x); cvKalmanCorrect(m_filtFeature.centroid.x, z); cvmSet(z,0,0,m->centroid().y); cvKalmanCorrect(m_filtFeature.centroid.y, z); //Size cvmSet(z,0,0,m->size()); cvKalmanCorrect(m_filtFeature.size, z); //Width cvmSet(z,0,0,m->width()); cvKalmanCorrect(m_filtFeature.width, z); //Height cvmSet(z,0,0,m->height()); cvKalmanCorrect(m_filtFeature.height, z); //Color histogram for (int i=0; i<Blob::HISTO_SIZE; i++) { cvmSet(z,0,0,m->m_color_histogram[i]); cvKalmanCorrect(m_filtFeature.color_histogram[i], z); } cvReleaseMat(&z); }
void Trace::SaveChangesToDatabase(vpl::BlobTrackerDBManager& dbm, int target_id) { ASSERT(dbm.hasDB()); if (m_dbID < 0) { m_dbID = dbm.createTrace(m_id, start_time(), get_first_frame(), target_id); if (m_dbID < 0) { ShowError("Cannot save target to database"); return; } } for (; m_numFeaturesSaved < m_nodes.size(); m_numFeaturesSaved++) { BlobPtr f = m_nodes[m_numFeaturesSaved]; dbm.createTraceNode((int)f->centroid().x, (int)f->centroid().y, f->height(), f->width(), f->timestamp(), m_numFeaturesSaved, m_dbID); } }