34#include <visp3/mbt/vpMbGenericTracker.h>
36#include <visp3/core/vpDisplay.h>
37#include <visp3/core/vpExponentialMap.h>
38#include <visp3/core/vpTrackingException.h>
39#include <visp3/core/vpIoTools.h>
40#include <visp3/mbt/vpMbtXmlGenericParser.h>
42#ifdef VISP_HAVE_NLOHMANN_JSON
43#include VISP_NLOHMANN_JSON(json.hpp)
44using json = nlohmann::json;
61#if defined(VISP_HAVE_MODULE_KLT) && defined(VISP_HAVE_OPENCV) && defined(HAVE_OPENCV_IMGPROC) && defined(HAVE_OPENCV_VIDEO)
77 else if (nbCameras == 1) {
84 for (
unsigned int i = 1; i <= nbCameras; i++) {
100#if defined(VISP_HAVE_MODULE_KLT) && defined(VISP_HAVE_OPENCV) && defined(HAVE_OPENCV_IMGPROC) && defined(HAVE_OPENCV_VIDEO)
113 if (trackerTypes.empty()) {
114 throw vpException(vpException::badValue,
"There is no camera!");
117 if (trackerTypes.size() == 1) {
118 m_mapOfTrackers[
"Camera"] = new TrackerWrapper(trackerTypes[0]);
121 m_mapOfCameraTransformationMatrix[
"Camera"] = vpHomogeneousMatrix();
124 for (size_t i = 1; i <= trackerTypes.size(); i++) {
125 std::stringstream ss;
127 m_mapOfTrackers[ss.str()] = new TrackerWrapper(trackerTypes[i - 1]);
130 m_mapOfCameraTransformationMatrix[ss.str()] = vpHomogeneousMatrix();
138 m_mapOfFeatureFactors[EDGE_TRACKER] = 1.0;
140#if defined(VISP_HAVE_MODULE_KLT) && defined(VISP_HAVE_OPENCV) && defined(HAVE_OPENCV_IMGPROC) && defined(HAVE_OPENCV_VIDEO)
141 m_mapOfFeatureFactors[KLT_TRACKER] = 1.0;
144 m_mapOfFeatureFactors[DEPTH_NORMAL_TRACKER] = 1.0;
145 m_mapOfFeatureFactors[DEPTH_DENSE_TRACKER] = 1.0;
149 const std::vector<int> &trackerTypes)
154 if (cameraNames.size() != trackerTypes.size() || cameraNames.empty()) {
155 throw vpException(vpTrackingException::badValue,
156 "cameraNames.size() != trackerTypes.size() || cameraNames.empty()");
159 for (
size_t i = 0; i < cameraNames.size(); i++) {
172#if defined(VISP_HAVE_MODULE_KLT) && defined(VISP_HAVE_OPENCV) && defined(HAVE_OPENCV_IMGPROC) && defined(HAVE_OPENCV_VIDEO)
185 it->second =
nullptr;
209 double rawTotalProjectionError = 0.0;
210 unsigned int nbTotalFeaturesUsed = 0;
212 for (std::map<std::string, TrackerWrapper *>::const_iterator it =
m_mapOfTrackers.begin();
214 TrackerWrapper *tracker = it->second;
216 unsigned int nbFeaturesUsed = 0;
217 double curProjError = tracker->computeProjectionErrorImpl(I, cMo, cam, nbFeaturesUsed);
219 if (nbFeaturesUsed > 0) {
220 nbTotalFeaturesUsed += nbFeaturesUsed;
221 rawTotalProjectionError += curProjError;
225 if (nbTotalFeaturesUsed > 0) {
226 return vpMath::deg(rawTotalProjectionError /
static_cast<double>(nbTotalFeaturesUsed));
262 double rawTotalProjectionError = 0.0;
263 unsigned int nbTotalFeaturesUsed = 0;
265 for (std::map<std::string, TrackerWrapper *>::const_iterator it =
m_mapOfTrackers.begin();
267 TrackerWrapper *tracker = it->second;
269 double curProjError = tracker->getProjectionError();
270 unsigned int nbFeaturesUsed = tracker->nbFeaturesForProjErrorComputation;
272 if (nbFeaturesUsed > 0) {
273 nbTotalFeaturesUsed += nbFeaturesUsed;
274 rawTotalProjectionError += (
vpMath::rad(curProjError) * nbFeaturesUsed);
278 if (nbTotalFeaturesUsed > 0) {
299 double normRes_1 = -1;
300 unsigned int iter = 0;
318 std::map<std::string, vpVelocityTwistMatrix> mapOfVelocityTwist;
323 mapOfVelocityTwist[it->first] = cVo;
327#if defined(VISP_HAVE_MODULE_KLT) && defined(VISP_HAVE_OPENCV) && defined(HAVE_OPENCV_IMGPROC) && defined(HAVE_OPENCV_VIDEO)
341 bool reStartFromLastIncrement =
false;
343 if (reStartFromLastIncrement) {
344 for (std::map<std::string, TrackerWrapper *>::const_iterator it =
m_mapOfTrackers.begin();
346 TrackerWrapper *tracker = it->second;
350#if defined(VISP_HAVE_MODULE_KLT) && defined(VISP_HAVE_OPENCV) && defined(HAVE_OPENCV_IMGPROC) && defined(HAVE_OPENCV_VIDEO)
353 tracker->ctTc0 = c_curr_tTc_curr0;
358 if (!reStartFromLastIncrement) {
363 if (!isoJoIdentity) {
366 LVJ_true = (
m_L * (cVo *
oJo));
380 unsigned int rank = (
m_L * cVo).kernel(K);
389 isoJoIdentity =
false;
398 unsigned int start_index = 0;
399 for (std::map<std::string, TrackerWrapper *>::const_iterator it =
m_mapOfTrackers.begin();
401 TrackerWrapper *tracker = it->second;
404 for (
unsigned int i = 0; i < tracker->m_error_edge.getRows(); i++) {
405 double wi = tracker->m_w_edge[i] * tracker->m_factor[i] * factorEdge;
406 W_true[start_index + i] = wi;
412 for (
unsigned int j = 0; j <
m_L.getCols(); j++) {
413 m_L[start_index + i][j] *= wi;
417 start_index += tracker->m_error_edge.getRows();
420#if defined(VISP_HAVE_MODULE_KLT) && defined(VISP_HAVE_OPENCV) && defined(HAVE_OPENCV_IMGPROC) && defined(HAVE_OPENCV_VIDEO)
422 for (
unsigned int i = 0; i < tracker->m_error_klt.getRows(); i++) {
423 double wi = tracker->m_w_klt[i] * factorKlt;
424 W_true[start_index + i] = wi;
430 for (
unsigned int j = 0; j <
m_L.getCols(); j++) {
431 m_L[start_index + i][j] *= wi;
435 start_index += tracker->m_error_klt.getRows();
440 for (
unsigned int i = 0; i < tracker->m_error_depthNormal.getRows(); i++) {
441 double wi = tracker->m_w_depthNormal[i] * factorDepth;
442 W_true[start_index + i] = wi;
448 for (
unsigned int j = 0; j <
m_L.getCols(); j++) {
449 m_L[start_index + i][j] *= wi;
453 start_index += tracker->m_error_depthNormal.getRows();
457 for (
unsigned int i = 0; i < tracker->m_error_depthDense.getRows(); i++) {
458 double wi = tracker->m_w_depthDense[i] * factorDepthDense;
459 W_true[start_index + i] = wi;
465 for (
unsigned int j = 0; j <
m_L.getCols(); j++) {
466 m_L[start_index + i][j] *= wi;
470 start_index += tracker->m_error_depthDense.getRows();
475 normRes = sqrt(num / den);
483#if defined(VISP_HAVE_MODULE_KLT) && defined(VISP_HAVE_OPENCV) && defined(HAVE_OPENCV_IMGPROC) && defined(HAVE_OPENCV_VIDEO)
484 for (std::map<std::string, TrackerWrapper *>::const_iterator it =
m_mapOfTrackers.begin();
486 TrackerWrapper *tracker = it->second;
490 tracker->ctTc0 = c_curr_tTc_curr0;
494 for (std::map<std::string, TrackerWrapper *>::const_iterator it =
m_mapOfTrackers.begin();
496 TrackerWrapper *tracker = it->second;
505 for (std::map<std::string, TrackerWrapper *>::const_iterator it =
m_mapOfTrackers.begin();
507 TrackerWrapper *tracker = it->second;
511#if defined(VISP_HAVE_MODULE_KLT) && defined(VISP_HAVE_OPENCV) && defined(HAVE_OPENCV_IMGPROC) && defined(HAVE_OPENCV_VIDEO)
526 for (std::map<std::string, TrackerWrapper *>::const_iterator it =
m_mapOfTrackers.begin();
528 TrackerWrapper *tracker = it->second;
531 tracker->updateMovingEdgeWeights();
543 unsigned int nbFeatures = 0;
545 for (std::map<std::string, TrackerWrapper *>::const_iterator it =
m_mapOfTrackers.begin();
547 TrackerWrapper *tracker = it->second;
548 tracker->computeVVSInit(mapOfImages[it->first]);
550 nbFeatures += tracker->m_error.getRows();
553 m_L.resize(nbFeatures, 6,
false,
false);
554 m_error.resize(nbFeatures,
false);
557 m_w.resize(nbFeatures,
false);
564 "computeVVSInteractionMatrixAndR"
565 "esidu() should not be called");
570 std::map<std::string, vpVelocityTwistMatrix> &mapOfVelocityTwist)
572 unsigned int start_index = 0;
574 for (std::map<std::string, TrackerWrapper *>::const_iterator it =
m_mapOfTrackers.begin();
576 TrackerWrapper *tracker = it->second;
579#if defined(VISP_HAVE_MODULE_KLT) && defined(VISP_HAVE_OPENCV) && defined(HAVE_OPENCV_IMGPROC) && defined(HAVE_OPENCV_VIDEO)
582 tracker->ctTc0 = c_curr_tTc_curr0;
585 tracker->computeVVSInteractionMatrixAndResidu(mapOfImages[it->first]);
587 if (tracker->m_L.getRows() > 0) {
588 m_L.insert(tracker->m_L * mapOfVelocityTwist[it->first], start_index, 0);
589 m_error.insert(start_index, tracker->m_error);
591 start_index += tracker->m_error.getRows();
598 unsigned int start_index = 0;
600 for (std::map<std::string, TrackerWrapper *>::const_iterator it =
m_mapOfTrackers.begin();
602 TrackerWrapper *tracker = it->second;
603 tracker->computeVVSWeights();
605 m_w.insert(start_index, tracker->m_w);
606 start_index += tracker->m_w.getRows();
625 bool displayFullModel)
629 TrackerWrapper *tracker = it->second;
630 tracker->display(I, cMo, cam, col, thickness, displayFullModel);
652 bool displayFullModel)
656 TrackerWrapper *tracker = it->second;
657 tracker->display(I, cMo, cam, col, thickness, displayFullModel);
683 unsigned int thickness,
bool displayFullModel)
686 std::map<std::string, TrackerWrapper *>::const_iterator it =
m_mapOfTrackers.begin();
687 it->second->display(I1, c1Mo, cam1, color, thickness, displayFullModel);
690 it->second->display(I2, c2Mo, cam2, color, thickness, displayFullModel);
693 std::cerr <<
"The tracker is not set as a stereo configuration! There are " <<
m_mapOfTrackers.size() <<
" cameras!"
717 bool displayFullModel)
720 std::map<std::string, TrackerWrapper *>::const_iterator it =
m_mapOfTrackers.begin();
721 it->second->display(I1, c1Mo, cam1, color, thickness, displayFullModel);
724 it->second->display(I2, c2Mo, cam2, color, thickness, displayFullModel);
727 std::cerr <<
"The tracker is not set as a stereo configuration! There are " <<
m_mapOfTrackers.size() <<
" cameras!"
744 const std::map<std::string, vpHomogeneousMatrix> &mapOfCameraPoses,
745 const std::map<std::string, vpCameraParameters> &mapOfCameraParameters,
746 const vpColor &col,
unsigned int thickness,
bool displayFullModel)
750 it_img != mapOfImages.end(); ++it_img) {
751 std::map<std::string, TrackerWrapper *>::const_iterator it_tracker =
m_mapOfTrackers.find(it_img->first);
752 std::map<std::string, vpHomogeneousMatrix>::const_iterator it_camPose = mapOfCameraPoses.find(it_img->first);
753 std::map<std::string, vpCameraParameters>::const_iterator it_cam = mapOfCameraParameters.find(it_img->first);
755 if (it_tracker !=
m_mapOfTrackers.end() && it_camPose != mapOfCameraPoses.end() &&
756 it_cam != mapOfCameraParameters.end()) {
757 TrackerWrapper *tracker = it_tracker->second;
758 tracker->display(*it_img->second, it_camPose->second, it_cam->second, col, thickness, displayFullModel);
761 std::cerr <<
"Missing elements for image:" << it_img->first <<
"!" << std::endl;
778 const std::map<std::string, vpHomogeneousMatrix> &mapOfCameraPoses,
779 const std::map<std::string, vpCameraParameters> &mapOfCameraParameters,
780 const vpColor &col,
unsigned int thickness,
bool displayFullModel)
783 for (std::map<std::string,
const vpImage<vpRGBa> *>::const_iterator it_img = mapOfImages.begin();
784 it_img != mapOfImages.end(); ++it_img) {
785 std::map<std::string, TrackerWrapper *>::const_iterator it_tracker =
m_mapOfTrackers.find(it_img->first);
786 std::map<std::string, vpHomogeneousMatrix>::const_iterator it_camPose = mapOfCameraPoses.find(it_img->first);
787 std::map<std::string, vpCameraParameters>::const_iterator it_cam = mapOfCameraParameters.find(it_img->first);
789 if (it_tracker !=
m_mapOfTrackers.end() && it_camPose != mapOfCameraPoses.end() &&
790 it_cam != mapOfCameraParameters.end()) {
791 TrackerWrapper *tracker = it_tracker->second;
792 tracker->display(*it_img->second, it_camPose->second, it_cam->second, col, thickness, displayFullModel);
795 std::cerr <<
"Missing elements for image:" << it_img->first <<
"!" << std::endl;
807 std::vector<std::string> cameraNames;
809 for (std::map<std::string, TrackerWrapper *>::const_iterator it_tracker =
m_mapOfTrackers.begin();
811 cameraNames.push_back(it_tracker->first);
833 std::map<std::string, TrackerWrapper *>::const_iterator it =
m_mapOfTrackers.begin();
834 it->second->getCameraParameters(cam1);
837 it->second->getCameraParameters(cam2);
840 std::cerr <<
"The tracker is not set as a stereo configuration! There are " <<
m_mapOfTrackers.size() <<
" cameras!"
853 mapOfCameraParameters.clear();
855 for (std::map<std::string, TrackerWrapper *>::const_iterator it =
m_mapOfTrackers.begin();
858 it->second->getCameraParameters(cam_);
859 mapOfCameraParameters[it->first] = cam_;
871 std::map<std::string, int> trackingTypes;
873 TrackerWrapper *traker;
874 for (std::map<std::string, TrackerWrapper *>::const_iterator it_tracker =
m_mapOfTrackers.begin();
876 traker = it_tracker->second;
877 trackingTypes[it_tracker->first] = traker->getTrackerType();
880 return trackingTypes;
894 std::map<std::string, TrackerWrapper *>::const_iterator it =
m_mapOfTrackers.begin();
895 clippingFlag1 = it->second->getClipping();
898 clippingFlag2 = it->second->getClipping();
901 std::cerr <<
"The tracker is not set as a stereo configuration! There are " <<
m_mapOfTrackers.size() <<
" cameras!"
913 mapOfClippingFlags.clear();
915 for (std::map<std::string, TrackerWrapper *>::const_iterator it =
m_mapOfTrackers.begin();
917 TrackerWrapper *tracker = it->second;
918 mapOfClippingFlags[it->first] = tracker->getClipping();
931 return it->second->getFaces();
945 std::map<std::string, TrackerWrapper *>::const_iterator it =
m_mapOfTrackers.find(cameraName);
947 return it->second->getFaces();
950 std::cerr <<
"The camera: " << cameraName <<
" cannot be found!" << std::endl;
954#if defined(VISP_HAVE_MODULE_KLT) && defined(VISP_HAVE_OPENCV) && defined(HAVE_OPENCV_IMGPROC) && defined(HAVE_OPENCV_VIDEO)
962 TrackerWrapper *tracker = it->second;
963 return tracker->getFeaturesCircle();
978 TrackerWrapper *tracker = it->second;
979 return tracker->getFeaturesKltCylinder();
994 TrackerWrapper *tracker = it->second;
995 return tracker->getFeaturesKlt();
1035 return it->second->getFeaturesForDisplay();
1041 return std::vector<std::vector<double> >();
1072 mapOfFeatures.clear();
1074 for (std::map<std::string, TrackerWrapper *>::const_iterator it =
m_mapOfTrackers.begin();
1076 mapOfFeatures[it->first] = it->second->getFeaturesForDisplay();
1091#if defined(VISP_HAVE_MODULE_KLT) && defined(VISP_HAVE_OPENCV) && defined(HAVE_OPENCV_IMGPROC) && defined(HAVE_OPENCV_VIDEO)
1104 TrackerWrapper *tracker = it->second;
1105 return tracker->getKltImagePoints();
1111 return std::vector<vpImagePoint>();
1126 TrackerWrapper *tracker = it->second;
1127 return tracker->getKltImagePointsWithId();
1133 return std::map<int, vpImagePoint>();
1145 TrackerWrapper *tracker = it->second;
1146 return tracker->getKltMaskBorder();
1164 TrackerWrapper *tracker = it->second;
1165 return tracker->getKltNbPoints();
1184 TrackerWrapper *tracker;
1185 tracker = it_tracker->second;
1186 return tracker->getKltOpencv();
1206 std::map<std::string, TrackerWrapper *>::const_iterator it =
m_mapOfTrackers.begin();
1207 klt1 = it->second->getKltOpencv();
1210 klt2 = it->second->getKltOpencv();
1213 std::cerr <<
"The tracker is not set as a stereo configuration! There are " <<
m_mapOfTrackers.size() <<
" cameras!"
1227 for (std::map<std::string, TrackerWrapper *>::const_iterator it =
m_mapOfTrackers.begin();
1229 TrackerWrapper *tracker = it->second;
1230 mapOfKlts[it->first] = tracker->getKltOpencv();
1243 TrackerWrapper *tracker = it->second;
1244 return tracker->getKltPoints();
1250 return std::vector<cv::Point2f>();
1278 it->second->getLcircle(circlesList, level);
1299 unsigned int level)
const
1301 std::map<std::string, TrackerWrapper *>::const_iterator it =
m_mapOfTrackers.find(cameraName);
1303 it->second->getLcircle(circlesList, level);
1306 std::cerr <<
"The camera: " << cameraName <<
" does not exist!" << std::endl;
1326 it->second->getLcylinder(cylindersList, level);
1347 unsigned int level)
const
1349 std::map<std::string, TrackerWrapper *>::const_iterator it =
m_mapOfTrackers.find(cameraName);
1351 it->second->getLcylinder(cylindersList, level);
1354 std::cerr <<
"The camera: " << cameraName <<
" does not exist!" << std::endl;
1375 it->second->getLline(linesList, level);
1396 unsigned int level)
const
1398 std::map<std::string, TrackerWrapper *>::const_iterator it =
m_mapOfTrackers.find(cameraName);
1400 it->second->getLline(linesList, level);
1403 std::cerr <<
"The camera: " << cameraName <<
" does not exist!" << std::endl;
1439 bool displayFullModel)
1444 return it->second->getModelForDisplay(width, height, cMo, cam, displayFullModel);
1450 return std::vector<std::vector<double> >();
1479 const std::map<std::string, unsigned int> &mapOfwidths,
1480 const std::map<std::string, unsigned int> &mapOfheights,
1481 const std::map<std::string, vpHomogeneousMatrix> &mapOfcMos,
1482 const std::map<std::string, vpCameraParameters> &mapOfCams,
1483 bool displayFullModel)
1486 mapOfModels.clear();
1488 for (std::map<std::string, TrackerWrapper *>::const_iterator it =
m_mapOfTrackers.begin();
1490 std::map<std::string, unsigned int>::const_iterator findWidth = mapOfwidths.find(it->first);
1491 std::map<std::string, unsigned int>::const_iterator findHeight = mapOfheights.find(it->first);
1492 std::map<std::string, vpHomogeneousMatrix>::const_iterator findcMo = mapOfcMos.find(it->first);
1493 std::map<std::string, vpCameraParameters>::const_iterator findCam = mapOfCams.find(it->first);
1495 if (findWidth != mapOfwidths.end() && findHeight != mapOfheights.end() && findcMo != mapOfcMos.end() &&
1496 findCam != mapOfCams.end()) {
1497 mapOfModels[it->first] = it->second->getModelForDisplay(findWidth->second, findHeight->second, findcMo->second,
1498 findCam->second, displayFullModel);
1513 return it->second->getMovingEdge();
1533 std::map<std::string, TrackerWrapper *>::const_iterator it =
m_mapOfTrackers.begin();
1534 it->second->getMovingEdge(me1);
1537 it->second->getMovingEdge(me2);
1540 std::cerr <<
"The tracker is not set as a stereo configuration! There are " <<
m_mapOfTrackers.size() <<
" cameras!"
1552 mapOfMovingEdges.clear();
1554 for (std::map<std::string, TrackerWrapper *>::const_iterator it =
m_mapOfTrackers.begin();
1556 TrackerWrapper *tracker = it->second;
1557 mapOfMovingEdges[it->first] = tracker->getMovingEdge();
1582 unsigned int nbGoodPoints = 0;
1585 nbGoodPoints = it->second->getNbPoints(level);
1591 return nbGoodPoints;
1610 mapOfNbPoints.clear();
1612 for (std::map<std::string, TrackerWrapper *>::const_iterator it =
m_mapOfTrackers.begin();
1614 TrackerWrapper *tracker = it->second;
1615 mapOfNbPoints[it->first] = tracker->getNbPoints(level);
1628 return it->second->getNbPolygon();
1642 mapOfNbPolygons.clear();
1644 for (std::map<std::string, TrackerWrapper *>::const_iterator it =
m_mapOfTrackers.begin();
1646 TrackerWrapper *tracker = it->second;
1647 mapOfNbPolygons[it->first] = tracker->getNbPolygon();
1665 return it->second->getPolygon(index);
1685 std::map<std::string, TrackerWrapper *>::const_iterator it =
m_mapOfTrackers.find(cameraName);
1687 return it->second->getPolygon(index);
1690 std::cerr <<
"The camera: " << cameraName <<
" does not exist!" << std::endl;
1709std::pair<std::vector<vpPolygon>, std::vector<std::vector<vpPoint> > >
1712 std::pair<std::vector<vpPolygon>, std::vector<std::vector<vpPoint> > > polygonFaces;
1716 TrackerWrapper *tracker = it->second;
1717 polygonFaces = tracker->getPolygonFaces(orderPolygons, useVisibility, clipPolygon);
1723 return polygonFaces;
1744 std::map<std::string, std::vector<std::vector<vpPoint> > > &mapOfPoints,
1745 bool orderPolygons,
bool useVisibility,
bool clipPolygon)
1747 mapOfPolygons.clear();
1748 mapOfPoints.clear();
1750 for (std::map<std::string, TrackerWrapper *>::const_iterator it =
m_mapOfTrackers.begin();
1752 TrackerWrapper *tracker = it->second;
1753 std::pair<std::vector<vpPolygon>, std::vector<std::vector<vpPoint> > > polygonFaces =
1754 tracker->getPolygonFaces(orderPolygons, useVisibility, clipPolygon);
1756 mapOfPolygons[it->first] = polygonFaces.first;
1757 mapOfPoints[it->first] = polygonFaces.second;
1774 std::map<std::string, TrackerWrapper *>::const_iterator it =
m_mapOfTrackers.begin();
1775 it->second->getPose(c1Mo);
1778 it->second->getPose(c2Mo);
1781 std::cerr <<
"The tracker is not set as a stereo configuration! There are " <<
m_mapOfTrackers.size() <<
" cameras!"
1794 mapOfCameraPoses.clear();
1796 for (std::map<std::string, TrackerWrapper *>::const_iterator it =
m_mapOfTrackers.begin();
1798 TrackerWrapper *tracker = it->second;
1799 tracker->getPose(mapOfCameraPoses[it->first]);
1815 TrackerWrapper *tracker = it->second;
1816 return tracker->getTrackerType();
1826 for (std::map<std::string, TrackerWrapper *>::const_iterator it =
m_mapOfTrackers.begin();
1828 TrackerWrapper *tracker = it->second;
1835 double ,
int ,
const std::string & )
1840#ifdef VISP_HAVE_MODULE_GUI
1885 const std::string &initFile1,
const std::string &initFile2,
bool displayHelp,
1889 std::map<std::string, TrackerWrapper *>::const_iterator it =
m_mapOfTrackers.begin();
1890 TrackerWrapper *tracker = it->second;
1891 tracker->initClick(I1, initFile1, displayHelp, T1);
1895 tracker = it->second;
1896 tracker->initClick(I2, initFile2, displayHelp, T2);
1900 tracker = it->second;
1903 tracker->getPose(
m_cMo);
1908 "Cannot initClick()! Require two cameras but there are %d cameras!",
m_mapOfTrackers.size());
1955 const std::string &initFile1,
const std::string &initFile2,
bool displayHelp,
1959 std::map<std::string, TrackerWrapper *>::const_iterator it =
m_mapOfTrackers.begin();
1960 TrackerWrapper *tracker = it->second;
1961 tracker->initClick(I_color1, initFile1, displayHelp, T1);
1965 tracker = it->second;
1966 tracker->initClick(I_color2, initFile2, displayHelp, T2);
1970 tracker = it->second;
1973 tracker->getPose(
m_cMo);
1978 "Cannot initClick()! Require two cameras but there are %d cameras!",
m_mapOfTrackers.size());
2025 const std::map<std::string, std::string> &mapOfInitFiles,
bool displayHelp,
2026 const std::map<std::string, vpHomogeneousMatrix> &mapOfT)
2029 std::map<std::string, const vpImage<unsigned char> *>::const_iterator it_img =
2031 std::map<std::string, std::string>::const_iterator it_initFile = mapOfInitFiles.find(
m_referenceCameraName);
2033 if (it_tracker !=
m_mapOfTrackers.end() && it_img != mapOfImages.end() && it_initFile != mapOfInitFiles.end()) {
2034 TrackerWrapper *tracker = it_tracker->second;
2035 std::map<std::string, vpHomogeneousMatrix>::const_iterator it_T = mapOfT.find(it_tracker->first);
2036 if (it_T != mapOfT.end())
2037 tracker->initClick(*it_img->second, it_initFile->second, displayHelp, it_T->second);
2039 tracker->initClick(*it_img->second, it_initFile->second, displayHelp);
2040 tracker->getPose(
m_cMo);
2047 std::vector<std::string> vectorOfMissingCameraPoses;
2052 it_img = mapOfImages.find(it_tracker->first);
2053 it_initFile = mapOfInitFiles.find(it_tracker->first);
2055 if (it_img != mapOfImages.end() && it_initFile != mapOfInitFiles.end()) {
2057 TrackerWrapper *tracker = it_tracker->second;
2058 tracker->initClick(*it_img->second, it_initFile->second, displayHelp);
2061 vectorOfMissingCameraPoses.push_back(it_tracker->first);
2067 for (std::vector<std::string>::const_iterator it = vectorOfMissingCameraPoses.begin();
2068 it != vectorOfMissingCameraPoses.end(); ++it) {
2069 it_img = mapOfImages.find(*it);
2070 std::map<std::string, vpHomogeneousMatrix>::const_iterator it_camTrans =
2080 "Missing image or missing camera transformation "
2081 "matrix! Cannot set the pose for camera: %s!",
2130 const std::map<std::string, std::string> &mapOfInitFiles,
bool displayHelp,
2131 const std::map<std::string, vpHomogeneousMatrix> &mapOfT)
2134 std::map<std::string, const vpImage<vpRGBa> *>::const_iterator it_img = mapOfColorImages.find(
m_referenceCameraName);
2135 std::map<std::string, std::string>::const_iterator it_initFile = mapOfInitFiles.find(
m_referenceCameraName);
2137 if (it_tracker !=
m_mapOfTrackers.end() && it_img != mapOfColorImages.end() && it_initFile != mapOfInitFiles.end()) {
2138 TrackerWrapper *tracker = it_tracker->second;
2139 std::map<std::string, vpHomogeneousMatrix>::const_iterator it_T = mapOfT.find(it_tracker->first);
2140 if (it_T != mapOfT.end())
2141 tracker->initClick(*it_img->second, it_initFile->second, displayHelp, it_T->second);
2143 tracker->initClick(*it_img->second, it_initFile->second, displayHelp);
2144 tracker->getPose(
m_cMo);
2151 std::vector<std::string> vectorOfMissingCameraPoses;
2156 it_img = mapOfColorImages.find(it_tracker->first);
2157 it_initFile = mapOfInitFiles.find(it_tracker->first);
2159 if (it_img != mapOfColorImages.end() && it_initFile != mapOfInitFiles.end()) {
2161 TrackerWrapper *tracker = it_tracker->second;
2162 tracker->initClick(*it_img->second, it_initFile->second, displayHelp);
2165 vectorOfMissingCameraPoses.push_back(it_tracker->first);
2171 for (std::vector<std::string>::const_iterator it = vectorOfMissingCameraPoses.begin();
2172 it != vectorOfMissingCameraPoses.end(); ++it) {
2173 it_img = mapOfColorImages.find(*it);
2174 std::map<std::string, vpHomogeneousMatrix>::const_iterator it_camTrans =
2185 "Missing image or missing camera transformation "
2186 "matrix! Cannot set the pose for camera: %s!",
2194 const int ,
const std::string & )
2239 const std::string &initFile1,
const std::string &initFile2)
2242 std::map<std::string, TrackerWrapper *>::const_iterator it =
m_mapOfTrackers.begin();
2243 TrackerWrapper *tracker = it->second;
2244 tracker->initFromPoints(I1, initFile1);
2248 tracker = it->second;
2249 tracker->initFromPoints(I2, initFile2);
2253 tracker = it->second;
2256 tracker->getPose(
m_cMo);
2259 tracker->getCameraParameters(
m_cam);
2264 "Cannot initFromPoints()! Require two cameras but "
2265 "there are %d cameras!",
2300 const std::string &initFile1,
const std::string &initFile2)
2303 std::map<std::string, TrackerWrapper *>::const_iterator it =
m_mapOfTrackers.begin();
2304 TrackerWrapper *tracker = it->second;
2305 tracker->initFromPoints(I_color1, initFile1);
2309 tracker = it->second;
2310 tracker->initFromPoints(I_color2, initFile2);
2314 tracker = it->second;
2317 tracker->getPose(
m_cMo);
2320 tracker->getCameraParameters(
m_cam);
2325 "Cannot initFromPoints()! Require two cameras but "
2326 "there are %d cameras!",
2332 const std::map<std::string, std::string> &mapOfInitPoints)
2336 std::map<std::string, const vpImage<unsigned char> *>::const_iterator it_img =
2338 std::map<std::string, std::string>::const_iterator it_initPoints = mapOfInitPoints.find(
m_referenceCameraName);
2340 if (it_tracker !=
m_mapOfTrackers.end() && it_img != mapOfImages.end() && it_initPoints != mapOfInitPoints.end()) {
2341 TrackerWrapper *tracker = it_tracker->second;
2342 tracker->initFromPoints(*it_img->second, it_initPoints->second);
2343 tracker->getPose(
m_cMo);
2350 std::vector<std::string> vectorOfMissingCameraPoints;
2354 it_img = mapOfImages.find(it_tracker->first);
2355 it_initPoints = mapOfInitPoints.find(it_tracker->first);
2357 if (it_img != mapOfImages.end() && it_initPoints != mapOfInitPoints.end()) {
2359 it_tracker->second->initFromPoints(*it_img->second, it_initPoints->second);
2362 vectorOfMissingCameraPoints.push_back(it_tracker->first);
2366 for (std::vector<std::string>::const_iterator it = vectorOfMissingCameraPoints.begin();
2367 it != vectorOfMissingCameraPoints.end(); ++it) {
2368 it_img = mapOfImages.find(*it);
2369 std::map<std::string, vpHomogeneousMatrix>::const_iterator it_camTrans =
2378 "Missing image or missing camera transformation "
2379 "matrix! Cannot init the pose for camera: %s!",
2386 const std::map<std::string, std::string> &mapOfInitPoints)
2390 std::map<std::string, const vpImage<vpRGBa> *>::const_iterator it_img = mapOfColorImages.find(
m_referenceCameraName);
2391 std::map<std::string, std::string>::const_iterator it_initPoints = mapOfInitPoints.find(
m_referenceCameraName);
2393 if (it_tracker !=
m_mapOfTrackers.end() && it_img != mapOfColorImages.end() &&
2394 it_initPoints != mapOfInitPoints.end()) {
2395 TrackerWrapper *tracker = it_tracker->second;
2396 tracker->initFromPoints(*it_img->second, it_initPoints->second);
2397 tracker->getPose(
m_cMo);
2404 std::vector<std::string> vectorOfMissingCameraPoints;
2408 it_img = mapOfColorImages.find(it_tracker->first);
2409 it_initPoints = mapOfInitPoints.find(it_tracker->first);
2411 if (it_img != mapOfColorImages.end() && it_initPoints != mapOfInitPoints.end()) {
2413 it_tracker->second->initFromPoints(*it_img->second, it_initPoints->second);
2416 vectorOfMissingCameraPoints.push_back(it_tracker->first);
2420 for (std::vector<std::string>::const_iterator it = vectorOfMissingCameraPoints.begin();
2421 it != vectorOfMissingCameraPoints.end(); ++it) {
2422 it_img = mapOfColorImages.find(*it);
2423 std::map<std::string, vpHomogeneousMatrix>::const_iterator it_camTrans =
2432 "Missing image or missing camera transformation "
2433 "matrix! Cannot init the pose for camera: %s!",
2456 const std::string &initFile1,
const std::string &initFile2)
2459 std::map<std::string, TrackerWrapper *>::const_iterator it =
m_mapOfTrackers.begin();
2460 TrackerWrapper *tracker = it->second;
2461 tracker->initFromPose(I1, initFile1);
2465 tracker = it->second;
2466 tracker->initFromPose(I2, initFile2);
2470 tracker = it->second;
2473 tracker->getPose(
m_cMo);
2476 tracker->getCameraParameters(
m_cam);
2481 "Cannot initFromPose()! Require two cameras but there "
2499 const std::string &initFile1,
const std::string &initFile2)
2502 std::map<std::string, TrackerWrapper *>::const_iterator it =
m_mapOfTrackers.begin();
2503 TrackerWrapper *tracker = it->second;
2504 tracker->initFromPose(I_color1, initFile1);
2508 tracker = it->second;
2509 tracker->initFromPose(I_color2, initFile2);
2513 tracker = it->second;
2516 tracker->getPose(
m_cMo);
2519 tracker->getCameraParameters(
m_cam);
2524 "Cannot initFromPose()! Require two cameras but there "
2545 const std::map<std::string, std::string> &mapOfInitPoses)
2549 std::map<std::string, const vpImage<unsigned char> *>::const_iterator it_img =
2551 std::map<std::string, std::string>::const_iterator it_initPose = mapOfInitPoses.find(
m_referenceCameraName);
2553 if (it_tracker !=
m_mapOfTrackers.end() && it_img != mapOfImages.end() && it_initPose != mapOfInitPoses.end()) {
2554 TrackerWrapper *tracker = it_tracker->second;
2555 tracker->initFromPose(*it_img->second, it_initPose->second);
2556 tracker->getPose(
m_cMo);
2563 std::vector<std::string> vectorOfMissingCameraPoses;
2567 it_img = mapOfImages.find(it_tracker->first);
2568 it_initPose = mapOfInitPoses.find(it_tracker->first);
2570 if (it_img != mapOfImages.end() && it_initPose != mapOfInitPoses.end()) {
2572 it_tracker->second->initFromPose(*it_img->second, it_initPose->second);
2575 vectorOfMissingCameraPoses.push_back(it_tracker->first);
2579 for (std::vector<std::string>::const_iterator it = vectorOfMissingCameraPoses.begin();
2580 it != vectorOfMissingCameraPoses.end(); ++it) {
2581 it_img = mapOfImages.find(*it);
2582 std::map<std::string, vpHomogeneousMatrix>::const_iterator it_camTrans =
2591 "Missing image or missing camera transformation "
2592 "matrix! Cannot init the pose for camera: %s!",
2613 const std::map<std::string, std::string> &mapOfInitPoses)
2617 std::map<std::string, const vpImage<vpRGBa> *>::const_iterator it_img = mapOfColorImages.find(
m_referenceCameraName);
2618 std::map<std::string, std::string>::const_iterator it_initPose = mapOfInitPoses.find(
m_referenceCameraName);
2620 if (it_tracker !=
m_mapOfTrackers.end() && it_img != mapOfColorImages.end() && it_initPose != mapOfInitPoses.end()) {
2621 TrackerWrapper *tracker = it_tracker->second;
2622 tracker->initFromPose(*it_img->second, it_initPose->second);
2623 tracker->getPose(
m_cMo);
2630 std::vector<std::string> vectorOfMissingCameraPoses;
2634 it_img = mapOfColorImages.find(it_tracker->first);
2635 it_initPose = mapOfInitPoses.find(it_tracker->first);
2637 if (it_img != mapOfColorImages.end() && it_initPose != mapOfInitPoses.end()) {
2639 it_tracker->second->initFromPose(*it_img->second, it_initPose->second);
2642 vectorOfMissingCameraPoses.push_back(it_tracker->first);
2646 for (std::vector<std::string>::const_iterator it = vectorOfMissingCameraPoses.begin();
2647 it != vectorOfMissingCameraPoses.end(); ++it) {
2648 it_img = mapOfColorImages.find(*it);
2649 std::map<std::string, vpHomogeneousMatrix>::const_iterator it_camTrans =
2658 "Missing image or missing camera transformation "
2659 "matrix! Cannot init the pose for camera: %s!",
2679 std::map<std::string, TrackerWrapper *>::const_iterator it =
m_mapOfTrackers.begin();
2680 it->second->initFromPose(I1, c1Mo);
2684 it->second->initFromPose(I2, c2Mo);
2690 "This method requires 2 cameras but there are %d cameras!",
m_mapOfTrackers.size());
2708 std::map<std::string, TrackerWrapper *>::const_iterator it =
m_mapOfTrackers.begin();
2709 it->second->initFromPose(I_color1, c1Mo);
2713 it->second->initFromPose(I_color2, c2Mo);
2719 "This method requires 2 cameras but there are %d cameras!",
m_mapOfTrackers.size());
2737 const std::map<std::string, vpHomogeneousMatrix> &mapOfCameraPoses)
2741 std::map<std::string, const vpImage<unsigned char> *>::const_iterator it_img =
2743 std::map<std::string, vpHomogeneousMatrix>::const_iterator it_camPose = mapOfCameraPoses.find(
m_referenceCameraName);
2745 if (it_tracker !=
m_mapOfTrackers.end() && it_img != mapOfImages.end() && it_camPose != mapOfCameraPoses.end()) {
2746 TrackerWrapper *tracker = it_tracker->second;
2747 tracker->initFromPose(*it_img->second, it_camPose->second);
2748 tracker->getPose(
m_cMo);
2755 std::vector<std::string> vectorOfMissingCameraPoses;
2759 it_img = mapOfImages.find(it_tracker->first);
2760 it_camPose = mapOfCameraPoses.find(it_tracker->first);
2762 if (it_img != mapOfImages.end() && it_camPose != mapOfCameraPoses.end()) {
2764 it_tracker->second->initFromPose(*it_img->second, it_camPose->second);
2767 vectorOfMissingCameraPoses.push_back(it_tracker->first);
2771 for (std::vector<std::string>::const_iterator it = vectorOfMissingCameraPoses.begin();
2772 it != vectorOfMissingCameraPoses.end(); ++it) {
2773 it_img = mapOfImages.find(*it);
2774 std::map<std::string, vpHomogeneousMatrix>::const_iterator it_camTrans =
2783 "Missing image or missing camera transformation "
2784 "matrix! Cannot set the pose for camera: %s!",
2804 const std::map<std::string, vpHomogeneousMatrix> &mapOfCameraPoses)
2808 std::map<std::string, const vpImage<vpRGBa> *>::const_iterator it_img = mapOfColorImages.find(
m_referenceCameraName);
2809 std::map<std::string, vpHomogeneousMatrix>::const_iterator it_camPose = mapOfCameraPoses.find(
m_referenceCameraName);
2811 if (it_tracker !=
m_mapOfTrackers.end() && it_img != mapOfColorImages.end() && it_camPose != mapOfCameraPoses.end()) {
2812 TrackerWrapper *tracker = it_tracker->second;
2813 tracker->initFromPose(*it_img->second, it_camPose->second);
2814 tracker->getPose(
m_cMo);
2821 std::vector<std::string> vectorOfMissingCameraPoses;
2825 it_img = mapOfColorImages.find(it_tracker->first);
2826 it_camPose = mapOfCameraPoses.find(it_tracker->first);
2828 if (it_img != mapOfColorImages.end() && it_camPose != mapOfCameraPoses.end()) {
2830 it_tracker->second->initFromPose(*it_img->second, it_camPose->second);
2833 vectorOfMissingCameraPoses.push_back(it_tracker->first);
2837 for (std::vector<std::string>::const_iterator it = vectorOfMissingCameraPoses.begin();
2838 it != vectorOfMissingCameraPoses.end(); ++it) {
2839 it_img = mapOfColorImages.find(*it);
2840 std::map<std::string, vpHomogeneousMatrix>::const_iterator it_camTrans =
2849 "Missing image or missing camera transformation "
2850 "matrix! Cannot set the pose for camera: %s!",
2870 if (extension ==
".xml") {
2873#ifdef VISP_HAVE_NLOHMANN_JSON
2874 else if (extension ==
".json") {
2896 for (std::map<std::string, TrackerWrapper *>::const_iterator it =
m_mapOfTrackers.begin();
2898 TrackerWrapper *tracker = it->second;
2899 tracker->loadConfigFile(configFile, verbose);
2912#ifdef VISP_HAVE_NLOHMANN_JSON
2924 std::ifstream jsonFile(settingsFile);
2925 if (!jsonFile.good()) {
2930 settings = json::parse(jsonFile);
2932 catch (json::parse_error &e) {
2933 std::stringstream msg;
2934 msg <<
"Could not parse JSON file : \n";
2936 msg << e.what() << std::endl;
2937 msg <<
"Byte position of error: " << e.byte;
2942 if (!settings.contains(
"version")) {
2945 else if (settings[
"version"].get<std::string>() != MBT_JSON_SETTINGS_VERSION) {
2952 trackersJson = settings.at(
"trackers");
2956 std::map<std::string, std::string> map_models;
2958 bool refCameraFound =
false;
2960 for (
const auto &it : trackersJson.items()) {
2961 const std::string cameraName = it.key();
2962 const json trackerJson = it.value();
2966 if (trackerJson.contains(
"camTref")) {
2972 if (trackerJson.contains(
"model")) {
2973 std::string model_filename = trackerJson[
"model"].get<std::string>();
2974 map_models[cameraName] = model_filename;
2975 std::cout <<
"Set the model to '" << model_filename <<
"' for camera '" << cameraName <<
"'" << std::endl;
2978 std::cout <<
"Loading tracker " << cameraName << std::endl <<
" with settings: " << std::endl << trackerJson.dump(2);
2982 std::cout <<
"Updating an already existing tracker with JSON configuration." << std::endl;
2988 std::cout <<
"Creating a new tracker from JSON configuration." << std::endl;
2990 TrackerWrapper *tw =
new TrackerWrapper();
2994 const auto unusedCamIt = std::remove(unusedCameraNames.begin(), unusedCameraNames.end(), cameraName);
2995 unusedCameraNames.erase(unusedCamIt, unusedCameraNames.end());
2997 if (!refCameraFound) {
3002 for (
const std::string &oldCameraName : unusedCameraNames) {
3018 if (settings.contains(
"display")) {
3019 const json displayJson = settings[
"display"];
3023 if (settings.contains(
"visibilityTest")) {
3024 const json visJson = settings[
"visibilityTest"];
3030 if (settings.contains(
"vvs")) {
3031 const json vvsJson = settings[
"vvs"];
3032 setLambda(vvsJson.value(
"lambda", this->m_lambda));
3033 setMaxIter(vvsJson.value(
"maxIter", this->m_maxIter));
3034 setInitialMu(vvsJson.value(
"initialMu", this->m_initialMu));
3038 if (settings.contains(
"model") && (map_models.size() == 0)) {
3039 loadModel(settings.at(
"model").get<std::string>(), verbose);
3041 else if (map_models.size() != 0) {
3042 if (settings.contains(
"model")) {
3043 std::stringstream ss;
3044 ss <<
"Both a model common to all the cameras and at least one model for a dedicated camera has been set." << std::endl;
3045 ss <<
"Please either set a model for each camera or a single model common to each camera";
3048 else if (map_models.size() == trackersJson.size()) {
3052 std::stringstream ss;
3053 ss <<
"The model has not been defined for each camera individually" << std::endl;
3054 ss <<
"Please either set a model for each camera or a single model common to each camera";
3071 j[
"version"] = MBT_JSON_SETTINGS_VERSION;
3075 trackers[kv.first] = *(kv.second);
3078 trackers[kv.first][
"camTref"] = itTransformation->second;
3081 j[
"trackers"] = trackers;
3088 std::ofstream f(settingsFile);
3090 const unsigned indentLevel = 4;
3091 f << j.dump(indentLevel);
3121 std::map<std::string, TrackerWrapper *>::const_iterator it_tracker =
m_mapOfTrackers.begin();
3122 TrackerWrapper *tracker = it_tracker->second;
3123 tracker->loadConfigFile(configFile1, verbose);
3126 tracker = it_tracker->second;
3127 tracker->loadConfigFile(configFile2, verbose);
3154 for (std::map<std::string, TrackerWrapper *>::const_iterator it_tracker =
m_mapOfTrackers.begin();
3156 TrackerWrapper *tracker = it_tracker->second;
3158 std::map<std::string, std::string>::const_iterator it_config = mapOfConfigFiles.find(it_tracker->first);
3159 if (it_config != mapOfConfigFiles.end()) {
3160 tracker->loadConfigFile(it_config->second, verbose);
3164 it_tracker->first.c_str());
3171 TrackerWrapper *tracker = it->second;
3172 tracker->getCameraParameters(
m_cam);
3205 for (std::map<std::string, TrackerWrapper *>::const_iterator it =
m_mapOfTrackers.begin();
3207 TrackerWrapper *tracker = it->second;
3208 tracker->loadModel(modelFile, verbose, T);
3241 std::map<std::string, TrackerWrapper *>::const_iterator it_tracker =
m_mapOfTrackers.begin();
3242 TrackerWrapper *tracker = it_tracker->second;
3243 tracker->loadModel(modelFile1, verbose, T1);
3246 tracker = it_tracker->second;
3247 tracker->loadModel(modelFile2, verbose, T2);
3270 const std::map<std::string, vpHomogeneousMatrix> &mapOfT)
3272 for (std::map<std::string, TrackerWrapper *>::const_iterator it_tracker =
m_mapOfTrackers.begin();
3274 std::map<std::string, std::string>::const_iterator it_model = mapOfModelFiles.find(it_tracker->first);
3276 if (it_model != mapOfModelFiles.end()) {
3277 TrackerWrapper *tracker = it_tracker->second;
3278 std::map<std::string, vpHomogeneousMatrix>::const_iterator it_T = mapOfT.find(it_tracker->first);
3280 if (it_T != mapOfT.end())
3281 tracker->loadModel(it_model->second, verbose, it_T->second);
3283 tracker->loadModel(it_model->second, verbose);
3287 it_tracker->first.c_str());
3292#if defined(VISP_HAVE_PCL) && defined(VISP_HAVE_PCL_SEGMENTATION) && defined(VISP_HAVE_PCL_FILTERS) && defined(VISP_HAVE_PCL_COMMON)
3294 std::map<std::string, pcl::PointCloud<pcl::PointXYZ>::ConstPtr> &mapOfPointClouds)
3296 for (std::map<std::string, TrackerWrapper *>::const_iterator it =
m_mapOfTrackers.begin();
3298 TrackerWrapper *tracker = it->second;
3299 tracker->preTracking(mapOfImages[it->first], mapOfPointClouds[it->first]);
3305 std::map<std::string,
const std::vector<vpColVector> *> &mapOfPointClouds,
3306 std::map<std::string, unsigned int> &mapOfPointCloudWidths,
3307 std::map<std::string, unsigned int> &mapOfPointCloudHeights)
3309 for (std::map<std::string, TrackerWrapper *>::const_iterator it =
m_mapOfTrackers.begin();
3311 TrackerWrapper *tracker = it->second;
3312 tracker->preTracking(mapOfImages[it->first], mapOfPointClouds[it->first], mapOfPointCloudWidths[it->first],
3313 mapOfPointCloudHeights[it->first]);
3318 std::map<std::string, const vpMatrix *> &mapOfPointClouds,
3319 std::map<std::string, unsigned int> &mapOfPointCloudWidths,
3320 std::map<std::string, unsigned int> &mapOfPointCloudHeights)
3322 for (std::map<std::string, TrackerWrapper *>::const_iterator it =
m_mapOfTrackers.begin();
3324 TrackerWrapper *tracker = it->second;
3325 tracker->preTracking(mapOfImages[it->first], mapOfPointClouds[it->first], mapOfPointCloudWidths[it->first],
3326 mapOfPointCloudHeights[it->first]);
3351 TrackerWrapper *tracker = it_tracker->second;
3352 tracker->reInitModel(I, cad_name, cMo, verbose, T);
3355 tracker->getPose(
m_cMo);
3385 TrackerWrapper *tracker = it_tracker->second;
3386 tracker->reInitModel(I_color, cad_name, cMo, verbose, T);
3389 tracker->getPose(
m_cMo);
3419 const std::string &cad_name1,
const std::string &cad_name2,
3424 std::map<std::string, TrackerWrapper *>::const_iterator it_tracker =
m_mapOfTrackers.begin();
3426 it_tracker->second->reInitModel(I1, cad_name1, c1Mo, verbose, T1);
3430 it_tracker->second->reInitModel(I2, cad_name2, c2Mo, verbose, T2);
3435 it_tracker->second->getPose(
m_cMo);
3466 const std::string &cad_name1,
const std::string &cad_name2,
3471 std::map<std::string, TrackerWrapper *>::const_iterator it_tracker =
m_mapOfTrackers.begin();
3473 it_tracker->second->reInitModel(I_color1, cad_name1, c1Mo, verbose, T1);
3477 it_tracker->second->reInitModel(I_color2, cad_name2, c2Mo, verbose, T2);
3482 it_tracker->second->getPose(
m_cMo);
3507 const std::map<std::string, std::string> &mapOfModelFiles,
3508 const std::map<std::string, vpHomogeneousMatrix> &mapOfCameraPoses,
bool verbose,
3509 const std::map<std::string, vpHomogeneousMatrix> &mapOfT)
3512 std::map<std::string, const vpImage<unsigned char> *>::const_iterator it_img =
3514 std::map<std::string, std::string>::const_iterator it_model = mapOfModelFiles.find(
m_referenceCameraName);
3515 std::map<std::string, vpHomogeneousMatrix>::const_iterator it_camPose = mapOfCameraPoses.find(
m_referenceCameraName);
3517 if (it_tracker !=
m_mapOfTrackers.end() && it_img != mapOfImages.end() && it_model != mapOfModelFiles.end() &&
3518 it_camPose != mapOfCameraPoses.end()) {
3519 TrackerWrapper *tracker = it_tracker->second;
3520 std::map<std::string, vpHomogeneousMatrix>::const_iterator it_T = mapOfT.find(it_tracker->first);
3521 if (it_T != mapOfT.end())
3522 tracker->reInitModel(*it_img->second, it_model->second, it_camPose->second, verbose, it_T->second);
3524 tracker->reInitModel(*it_img->second, it_model->second, it_camPose->second, verbose);
3527 tracker->getPose(
m_cMo);
3533 std::vector<std::string> vectorOfMissingCameras;
3536 it_img = mapOfImages.find(it_tracker->first);
3537 it_model = mapOfModelFiles.find(it_tracker->first);
3538 it_camPose = mapOfCameraPoses.find(it_tracker->first);
3540 if (it_img != mapOfImages.end() && it_model != mapOfModelFiles.end() && it_camPose != mapOfCameraPoses.end()) {
3541 TrackerWrapper *tracker = it_tracker->second;
3542 tracker->reInitModel(*it_img->second, it_model->second, it_camPose->second, verbose);
3545 vectorOfMissingCameras.push_back(it_tracker->first);
3550 for (std::vector<std::string>::const_iterator it = vectorOfMissingCameras.begin(); it != vectorOfMissingCameras.end();
3552 it_img = mapOfImages.find(*it);
3553 it_model = mapOfModelFiles.find(*it);
3554 std::map<std::string, vpHomogeneousMatrix>::const_iterator it_camTrans =
3557 if (it_img != mapOfImages.end() && it_model != mapOfModelFiles.end() &&
3560 m_mapOfTrackers[*it]->reInitModel(*it_img->second, it_model->second, cCurrentMo, verbose);
3582 const std::map<std::string, std::string> &mapOfModelFiles,
3583 const std::map<std::string, vpHomogeneousMatrix> &mapOfCameraPoses,
bool verbose,
3584 const std::map<std::string, vpHomogeneousMatrix> &mapOfT)
3587 std::map<std::string, const vpImage<vpRGBa> *>::const_iterator it_img = mapOfColorImages.find(
m_referenceCameraName);
3588 std::map<std::string, std::string>::const_iterator it_model = mapOfModelFiles.find(
m_referenceCameraName);
3589 std::map<std::string, vpHomogeneousMatrix>::const_iterator it_camPose = mapOfCameraPoses.find(
m_referenceCameraName);
3591 if (it_tracker !=
m_mapOfTrackers.end() && it_img != mapOfColorImages.end() && it_model != mapOfModelFiles.end() &&
3592 it_camPose != mapOfCameraPoses.end()) {
3593 TrackerWrapper *tracker = it_tracker->second;
3594 std::map<std::string, vpHomogeneousMatrix>::const_iterator it_T = mapOfT.find(it_tracker->first);
3595 if (it_T != mapOfT.end())
3596 tracker->reInitModel(*it_img->second, it_model->second, it_camPose->second, verbose, it_T->second);
3598 tracker->reInitModel(*it_img->second, it_model->second, it_camPose->second, verbose);
3601 tracker->getPose(
m_cMo);
3607 std::vector<std::string> vectorOfMissingCameras;
3610 it_img = mapOfColorImages.find(it_tracker->first);
3611 it_model = mapOfModelFiles.find(it_tracker->first);
3612 it_camPose = mapOfCameraPoses.find(it_tracker->first);
3614 if (it_img != mapOfColorImages.end() && it_model != mapOfModelFiles.end() &&
3615 it_camPose != mapOfCameraPoses.end()) {
3616 TrackerWrapper *tracker = it_tracker->second;
3617 tracker->reInitModel(*it_img->second, it_model->second, it_camPose->second, verbose);
3620 vectorOfMissingCameras.push_back(it_tracker->first);
3625 for (std::vector<std::string>::const_iterator it = vectorOfMissingCameras.begin(); it != vectorOfMissingCameras.end();
3627 it_img = mapOfColorImages.find(*it);
3628 it_model = mapOfModelFiles.find(*it);
3629 std::map<std::string, vpHomogeneousMatrix>::const_iterator it_camTrans =
3632 if (it_img != mapOfColorImages.end() && it_model != mapOfModelFiles.end() &&
3635 m_mapOfTrackers[*it]->reInitModel(*it_img->second, it_model->second, cCurrentMo, verbose);
3652#ifdef VISP_HAVE_OGRE
3679#if defined(VISP_HAVE_MODULE_KLT) && defined(VISP_HAVE_OPENCV) && defined(HAVE_OPENCV_IMGPROC) && defined(HAVE_OPENCV_VIDEO)
3686 for (std::map<std::string, TrackerWrapper *>::const_iterator it =
m_mapOfTrackers.begin();
3688 TrackerWrapper *tracker = it->second;
3689 tracker->resetTracker();
3706 for (std::map<std::string, TrackerWrapper *>::const_iterator it =
m_mapOfTrackers.begin();
3708 TrackerWrapper *tracker = it->second;
3709 tracker->setAngleAppear(a);
3728 std::map<std::string, TrackerWrapper *>::const_iterator it =
m_mapOfTrackers.begin();
3729 it->second->setAngleAppear(a1);
3732 it->second->setAngleAppear(a2);
3759 for (std::map<std::string, double>::const_iterator it = mapOfAngles.begin(); it != mapOfAngles.end(); ++it) {
3760 std::map<std::string, TrackerWrapper *>::const_iterator it_tracker =
m_mapOfTrackers.find(it->first);
3763 TrackerWrapper *tracker = it_tracker->second;
3764 tracker->setAngleAppear(it->second);
3786 for (std::map<std::string, TrackerWrapper *>::const_iterator it =
m_mapOfTrackers.begin();
3788 TrackerWrapper *tracker = it->second;
3789 tracker->setAngleDisappear(a);
3808 std::map<std::string, TrackerWrapper *>::const_iterator it =
m_mapOfTrackers.begin();
3809 it->second->setAngleDisappear(a1);
3812 it->second->setAngleDisappear(a2);
3839 for (std::map<std::string, double>::const_iterator it = mapOfAngles.begin(); it != mapOfAngles.end(); ++it) {
3840 std::map<std::string, TrackerWrapper *>::const_iterator it_tracker =
m_mapOfTrackers.find(it->first);
3843 TrackerWrapper *tracker = it_tracker->second;
3844 tracker->setAngleDisappear(it->second);
3862 for (std::map<std::string, TrackerWrapper *>::const_iterator it =
m_mapOfTrackers.begin();
3864 TrackerWrapper *tracker = it->second;
3865 tracker->setCameraParameters(camera);
3880 std::map<std::string, TrackerWrapper *>::const_iterator it =
m_mapOfTrackers.begin();
3881 it->second->setCameraParameters(camera1);
3884 it->second->setCameraParameters(camera2);
3888 it->second->getCameraParameters(
m_cam);
3910 for (std::map<std::string, vpCameraParameters>::const_iterator it = mapOfCameraParameters.begin();
3911 it != mapOfCameraParameters.end(); ++it) {
3912 std::map<std::string, TrackerWrapper *>::const_iterator it_tracker =
m_mapOfTrackers.find(it->first);
3915 TrackerWrapper *tracker = it_tracker->second;
3916 tracker->setCameraParameters(it->second);
3939 it->second = cameraTransformationMatrix;
3954 const std::map<std::string, vpHomogeneousMatrix> &mapOfTransformationMatrix)
3956 for (std::map<std::string, vpHomogeneousMatrix>::const_iterator it = mapOfTransformationMatrix.begin();
3957 it != mapOfTransformationMatrix.end(); ++it) {
3958 std::map<std::string, vpHomogeneousMatrix>::iterator it_camTrans =
3962 it_camTrans->second = it->second;
3980 for (std::map<std::string, TrackerWrapper *>::const_iterator it =
m_mapOfTrackers.begin();
3982 TrackerWrapper *tracker = it->second;
3983 tracker->setClipping(flags);
4000 std::map<std::string, TrackerWrapper *>::const_iterator it =
m_mapOfTrackers.begin();
4001 it->second->setClipping(flags1);
4004 it->second->setClipping(flags2);
4015 std::stringstream ss;
4016 ss <<
"Require two cameras! There are " <<
m_mapOfTrackers.size() <<
" cameras!";
4030 for (std::map<std::string, unsigned int>::const_iterator it = mapOfClippingFlags.begin();
4031 it != mapOfClippingFlags.end(); ++it) {
4032 std::map<std::string, TrackerWrapper *>::const_iterator it_tracker =
m_mapOfTrackers.find(it->first);
4035 TrackerWrapper *tracker = it_tracker->second;
4036 tracker->setClipping(it->second);
4056 for (std::map<std::string, TrackerWrapper *>::const_iterator it =
m_mapOfTrackers.begin();
4058 TrackerWrapper *tracker = it->second;
4059 tracker->setDepthDenseFilteringMaxDistance(maxDistance);
4073 for (std::map<std::string, TrackerWrapper *>::const_iterator it =
m_mapOfTrackers.begin();
4075 TrackerWrapper *tracker = it->second;
4076 tracker->setDepthDenseFilteringMethod(method);
4091 for (std::map<std::string, TrackerWrapper *>::const_iterator it =
m_mapOfTrackers.begin();
4093 TrackerWrapper *tracker = it->second;
4094 tracker->setDepthDenseFilteringMinDistance(minDistance);
4109 for (std::map<std::string, TrackerWrapper *>::const_iterator it =
m_mapOfTrackers.begin();
4111 TrackerWrapper *tracker = it->second;
4112 tracker->setDepthDenseFilteringOccupancyRatio(occupancyRatio);
4126 for (std::map<std::string, TrackerWrapper *>::const_iterator it =
m_mapOfTrackers.begin();
4128 TrackerWrapper *tracker = it->second;
4129 tracker->setDepthDenseSamplingStep(stepX, stepY);
4142 for (std::map<std::string, TrackerWrapper *>::const_iterator it =
m_mapOfTrackers.begin();
4144 TrackerWrapper *tracker = it->second;
4145 tracker->setDepthNormalFaceCentroidMethod(method);
4159 for (std::map<std::string, TrackerWrapper *>::const_iterator it =
m_mapOfTrackers.begin();
4161 TrackerWrapper *tracker = it->second;
4162 tracker->setDepthNormalFeatureEstimationMethod(method);
4175 for (std::map<std::string, TrackerWrapper *>::const_iterator it =
m_mapOfTrackers.begin();
4177 TrackerWrapper *tracker = it->second;
4178 tracker->setDepthNormalPclPlaneEstimationMethod(method);
4191 for (std::map<std::string, TrackerWrapper *>::const_iterator it =
m_mapOfTrackers.begin();
4193 TrackerWrapper *tracker = it->second;
4194 tracker->setDepthNormalPclPlaneEstimationRansacMaxIter(maxIter);
4207 for (std::map<std::string, TrackerWrapper *>::const_iterator it =
m_mapOfTrackers.begin();
4209 TrackerWrapper *tracker = it->second;
4210 tracker->setDepthNormalPclPlaneEstimationRansacThreshold(thresold);
4224 for (std::map<std::string, TrackerWrapper *>::const_iterator it =
m_mapOfTrackers.begin();
4226 TrackerWrapper *tracker = it->second;
4227 tracker->setDepthNormalSamplingStep(stepX, stepY);
4253 for (std::map<std::string, TrackerWrapper *>::const_iterator it =
m_mapOfTrackers.begin();
4255 TrackerWrapper *tracker = it->second;
4256 tracker->setDisplayFeatures(displayF);
4271 for (std::map<std::string, TrackerWrapper *>::const_iterator it =
m_mapOfTrackers.begin();
4273 TrackerWrapper *tracker = it->second;
4274 tracker->setFarClippingDistance(dist);
4289 std::map<std::string, TrackerWrapper *>::const_iterator it =
m_mapOfTrackers.begin();
4290 it->second->setFarClippingDistance(dist1);
4293 it->second->setFarClippingDistance(dist2);
4297 distFarClip = it->second->getFarClippingDistance();
4316 for (std::map<std::string, double>::const_iterator it = mapOfClippingDists.begin(); it != mapOfClippingDists.end();
4318 std::map<std::string, TrackerWrapper *>::const_iterator it_tracker =
m_mapOfTrackers.find(it->first);
4321 TrackerWrapper *tracker = it_tracker->second;
4322 tracker->setFarClippingDistance(it->second);
4341 std::map<vpTrackerType, double>::const_iterator it_factor = mapOfFeatureFactors.find(it->first);
4342 if (it_factor != mapOfFeatureFactors.end()) {
4343 it->second = it_factor->second;
4367 for (std::map<std::string, TrackerWrapper *>::const_iterator it =
m_mapOfTrackers.begin();
4369 TrackerWrapper *tracker = it->second;
4370 tracker->setGoodMovingEdgesRatioThreshold(threshold);
4374#ifdef VISP_HAVE_OGRE
4388 for (std::map<std::string, TrackerWrapper *>::const_iterator it =
m_mapOfTrackers.begin();
4390 TrackerWrapper *tracker = it->second;
4391 tracker->setGoodNbRayCastingAttemptsRatio(ratio);
4408 for (std::map<std::string, TrackerWrapper *>::const_iterator it =
m_mapOfTrackers.begin();
4410 TrackerWrapper *tracker = it->second;
4411 tracker->setNbRayCastingAttemptsForVisibility(attempts);
4416#if defined(VISP_HAVE_MODULE_KLT) && defined(VISP_HAVE_OPENCV) && defined(HAVE_OPENCV_IMGPROC) && defined(HAVE_OPENCV_VIDEO)
4426 for (std::map<std::string, TrackerWrapper *>::const_iterator it =
m_mapOfTrackers.begin();
4428 TrackerWrapper *tracker = it->second;
4429 tracker->setKltOpencv(t);
4444 std::map<std::string, TrackerWrapper *>::const_iterator it =
m_mapOfTrackers.begin();
4445 it->second->setKltOpencv(t1);
4448 it->second->setKltOpencv(t2);
4463 for (std::map<std::string, vpKltOpencv>::const_iterator it = mapOfKlts.begin(); it != mapOfKlts.end(); ++it) {
4464 std::map<std::string, TrackerWrapper *>::const_iterator it_tracker =
m_mapOfTrackers.find(it->first);
4467 TrackerWrapper *tracker = it_tracker->second;
4468 tracker->setKltOpencv(it->second);
4484 for (std::map<std::string, TrackerWrapper *>::const_iterator it =
m_mapOfTrackers.begin();
4486 TrackerWrapper *tracker = it->second;
4487 tracker->setKltThresholdAcceptation(th);
4506 for (std::map<std::string, TrackerWrapper *>::const_iterator it =
m_mapOfTrackers.begin();
4508 TrackerWrapper *tracker = it->second;
4509 tracker->setLod(useLod, name);
4513#if defined(VISP_HAVE_MODULE_KLT) && defined(VISP_HAVE_OPENCV) && defined(HAVE_OPENCV_IMGPROC) && defined(HAVE_OPENCV_VIDEO)
4523 for (std::map<std::string, TrackerWrapper *>::const_iterator it =
m_mapOfTrackers.begin();
4525 TrackerWrapper *tracker = it->second;
4526 tracker->setKltMaskBorder(e);
4541 std::map<std::string, TrackerWrapper *>::const_iterator it =
m_mapOfTrackers.begin();
4542 it->second->setKltMaskBorder(e1);
4546 it->second->setKltMaskBorder(e2);
4561 for (std::map<std::string, unsigned int>::const_iterator it = mapOfErosions.begin(); it != mapOfErosions.end();
4563 std::map<std::string, TrackerWrapper *>::const_iterator it_tracker =
m_mapOfTrackers.find(it->first);
4566 TrackerWrapper *tracker = it_tracker->second;
4567 tracker->setKltMaskBorder(it->second);
4582 for (std::map<std::string, TrackerWrapper *>::const_iterator it =
m_mapOfTrackers.begin();
4584 TrackerWrapper *tracker = it->second;
4585 tracker->setMask(mask);
4602 for (std::map<std::string, TrackerWrapper *>::const_iterator it =
m_mapOfTrackers.begin();
4604 TrackerWrapper *tracker = it->second;
4605 tracker->setMinLineLengthThresh(minLineLengthThresh, name);
4621 for (std::map<std::string, TrackerWrapper *>::const_iterator it =
m_mapOfTrackers.begin();
4623 TrackerWrapper *tracker = it->second;
4624 tracker->setMinPolygonAreaThresh(minPolygonAreaThresh, name);
4637 for (std::map<std::string, TrackerWrapper *>::const_iterator it =
m_mapOfTrackers.begin();
4639 TrackerWrapper *tracker = it->second;
4640 tracker->setMovingEdge(me);
4656 std::map<std::string, TrackerWrapper *>::const_iterator it =
m_mapOfTrackers.begin();
4657 it->second->setMovingEdge(me1);
4661 it->second->setMovingEdge(me2);
4676 for (std::map<std::string, vpMe>::const_iterator it = mapOfMe.begin(); it != mapOfMe.end(); ++it) {
4677 std::map<std::string, TrackerWrapper *>::const_iterator it_tracker =
m_mapOfTrackers.find(it->first);
4680 TrackerWrapper *tracker = it_tracker->second;
4681 tracker->setMovingEdge(it->second);
4697 for (std::map<std::string, TrackerWrapper *>::const_iterator it =
m_mapOfTrackers.begin();
4699 TrackerWrapper *tracker = it->second;
4700 tracker->setNearClippingDistance(dist);
4715 std::map<std::string, TrackerWrapper *>::const_iterator it =
m_mapOfTrackers.begin();
4716 it->second->setNearClippingDistance(dist1);
4720 it->second->setNearClippingDistance(dist2);
4743 for (std::map<std::string, double>::const_iterator it = mapOfDists.begin(); it != mapOfDists.end(); ++it) {
4744 std::map<std::string, TrackerWrapper *>::const_iterator it_tracker =
m_mapOfTrackers.find(it->first);
4747 TrackerWrapper *tracker = it_tracker->second;
4748 tracker->setNearClippingDistance(it->second);
4773 for (std::map<std::string, TrackerWrapper *>::const_iterator it =
m_mapOfTrackers.begin();
4775 TrackerWrapper *tracker = it->second;
4776 tracker->setOgreShowConfigDialog(showConfigDialog);
4794 for (std::map<std::string, TrackerWrapper *>::const_iterator it =
m_mapOfTrackers.begin();
4796 TrackerWrapper *tracker = it->second;
4797 tracker->setOgreVisibilityTest(v);
4800#ifdef VISP_HAVE_OGRE
4801 for (std::map<std::string, TrackerWrapper *>::const_iterator it =
m_mapOfTrackers.begin();
4803 TrackerWrapper *tracker = it->second;
4804 tracker->faces.getOgreContext()->setWindowName(
"Multi Generic MBT (" + it->first +
")");
4820 for (std::map<std::string, TrackerWrapper *>::const_iterator it =
m_mapOfTrackers.begin();
4822 TrackerWrapper *tracker = it->second;
4823 tracker->setOptimizationMethod(opt);
4843 "to be configured with only one camera!");
4850 TrackerWrapper *tracker = it->second;
4851 tracker->setPose(I, cdMo);
4875 "to be configured with only one camera!");
4882 TrackerWrapper *tracker = it->second;
4884 tracker->setPose(
m_I, cdMo);
4907 std::map<std::string, TrackerWrapper *>::const_iterator it =
m_mapOfTrackers.begin();
4908 it->second->setPose(I1, c1Mo);
4912 it->second->setPose(I2, c2Mo);
4917 it->second->getPose(
m_cMo);
4945 std::map<std::string, TrackerWrapper *>::const_iterator it =
m_mapOfTrackers.begin();
4946 it->second->setPose(I_color1, c1Mo);
4950 it->second->setPose(I_color2, c2Mo);
4955 it->second->getPose(
m_cMo);
4984 const std::map<std::string, vpHomogeneousMatrix> &mapOfCameraPoses)
4988 std::map<std::string, const vpImage<unsigned char> *>::const_iterator it_img =
4990 std::map<std::string, vpHomogeneousMatrix>::const_iterator it_camPose = mapOfCameraPoses.find(
m_referenceCameraName);
4992 if (it_tracker !=
m_mapOfTrackers.end() && it_img != mapOfImages.end() && it_camPose != mapOfCameraPoses.end()) {
4993 TrackerWrapper *tracker = it_tracker->second;
4994 tracker->setPose(*it_img->second, it_camPose->second);
4995 tracker->getPose(
m_cMo);
5002 std::vector<std::string> vectorOfMissingCameraPoses;
5007 it_img = mapOfImages.find(it_tracker->first);
5008 it_camPose = mapOfCameraPoses.find(it_tracker->first);
5010 if (it_img != mapOfImages.end() && it_camPose != mapOfCameraPoses.end()) {
5012 TrackerWrapper *tracker = it_tracker->second;
5013 tracker->setPose(*it_img->second, it_camPose->second);
5016 vectorOfMissingCameraPoses.push_back(it_tracker->first);
5021 for (std::vector<std::string>::const_iterator it = vectorOfMissingCameraPoses.begin();
5022 it != vectorOfMissingCameraPoses.end(); ++it) {
5023 it_img = mapOfImages.find(*it);
5024 std::map<std::string, vpHomogeneousMatrix>::const_iterator it_camTrans =
5033 "Missing image or missing camera transformation "
5034 "matrix! Cannot set pose for camera: %s!",
5056 const std::map<std::string, vpHomogeneousMatrix> &mapOfCameraPoses)
5060 std::map<std::string, const vpImage<vpRGBa> *>::const_iterator it_img = mapOfColorImages.find(
m_referenceCameraName);
5061 std::map<std::string, vpHomogeneousMatrix>::const_iterator it_camPose = mapOfCameraPoses.find(
m_referenceCameraName);
5063 if (it_tracker !=
m_mapOfTrackers.end() && it_img != mapOfColorImages.end() && it_camPose != mapOfCameraPoses.end()) {
5064 TrackerWrapper *tracker = it_tracker->second;
5065 tracker->setPose(*it_img->second, it_camPose->second);
5066 tracker->getPose(
m_cMo);
5073 std::vector<std::string> vectorOfMissingCameraPoses;
5078 it_img = mapOfColorImages.find(it_tracker->first);
5079 it_camPose = mapOfCameraPoses.find(it_tracker->first);
5081 if (it_img != mapOfColorImages.end() && it_camPose != mapOfCameraPoses.end()) {
5083 TrackerWrapper *tracker = it_tracker->second;
5084 tracker->setPose(*it_img->second, it_camPose->second);
5087 vectorOfMissingCameraPoses.push_back(it_tracker->first);
5092 for (std::vector<std::string>::const_iterator it = vectorOfMissingCameraPoses.begin();
5093 it != vectorOfMissingCameraPoses.end(); ++it) {
5094 it_img = mapOfColorImages.find(*it);
5095 std::map<std::string, vpHomogeneousMatrix>::const_iterator it_camTrans =
5104 "Missing image or missing camera transformation "
5105 "matrix! Cannot set pose for camera: %s!",
5129 for (std::map<std::string, TrackerWrapper *>::const_iterator it =
m_mapOfTrackers.begin();
5131 TrackerWrapper *tracker = it->second;
5132 tracker->setProjectionErrorComputation(flag);
5143 for (std::map<std::string, TrackerWrapper *>::const_iterator it =
m_mapOfTrackers.begin();
5145 TrackerWrapper *tracker = it->second;
5146 tracker->setProjectionErrorDisplay(
display);
5157 for (std::map<std::string, TrackerWrapper *>::const_iterator it =
m_mapOfTrackers.begin();
5159 TrackerWrapper *tracker = it->second;
5160 tracker->setProjectionErrorDisplayArrowLength(length);
5168 for (std::map<std::string, TrackerWrapper *>::const_iterator it =
m_mapOfTrackers.begin();
5170 TrackerWrapper *tracker = it->second;
5171 tracker->setProjectionErrorDisplayArrowThickness(thickness);
5182 std::map<std::string, TrackerWrapper *>::const_iterator it =
m_mapOfTrackers.find(referenceCameraName);
5187 std::cerr <<
"The reference camera: " << referenceCameraName <<
" does not exist!";
5195 for (std::map<std::string, TrackerWrapper *>::const_iterator it =
m_mapOfTrackers.begin();
5197 TrackerWrapper *tracker = it->second;
5198 tracker->setScanLineVisibilityTest(v);
5215 for (std::map<std::string, TrackerWrapper *>::const_iterator it =
m_mapOfTrackers.begin();
5217 TrackerWrapper *tracker = it->second;
5218 tracker->setTrackerType(type);
5233 for (std::map<std::string, int>::const_iterator it = mapOfTrackerTypes.begin(); it != mapOfTrackerTypes.end(); ++it) {
5234 std::map<std::string, TrackerWrapper *>::const_iterator it_tracker =
m_mapOfTrackers.find(it->first);
5236 TrackerWrapper *tracker = it_tracker->second;
5237 tracker->setTrackerType(it->second);
5253 for (std::map<std::string, TrackerWrapper *>::const_iterator it =
m_mapOfTrackers.begin();
5255 TrackerWrapper *tracker = it->second;
5256 tracker->setUseDepthDenseTracking(name, useDepthDenseTracking);
5271 for (std::map<std::string, TrackerWrapper *>::const_iterator it =
m_mapOfTrackers.begin();
5273 TrackerWrapper *tracker = it->second;
5274 tracker->setUseDepthNormalTracking(name, useDepthNormalTracking);
5289 for (std::map<std::string, TrackerWrapper *>::const_iterator it =
m_mapOfTrackers.begin();
5291 TrackerWrapper *tracker = it->second;
5292 tracker->setUseEdgeTracking(name, useEdgeTracking);
5296#if defined(VISP_HAVE_MODULE_KLT) && defined(VISP_HAVE_OPENCV) && defined(HAVE_OPENCV_IMGPROC) && defined(HAVE_OPENCV_VIDEO)
5308 for (std::map<std::string, TrackerWrapper *>::const_iterator it =
m_mapOfTrackers.begin();
5310 TrackerWrapper *tracker = it->second;
5311 tracker->setUseKltTracking(name, useKltTracking);
5319 bool isOneTestTrackingOk =
false;
5320 for (std::map<std::string, TrackerWrapper *>::const_iterator it =
m_mapOfTrackers.begin();
5322 TrackerWrapper *tracker = it->second;
5324 tracker->testTracking();
5325 isOneTestTrackingOk =
true;
5328 std::cerr <<
"[" << it->first <<
"] " << e.what() << std::endl;
5332 if (!isOneTestTrackingOk) {
5333 std::ostringstream oss;
5334 oss <<
"Not enough moving edges to track the object. Try to reduce the "
5352 std::map<std::string, const vpImage<unsigned char> *> mapOfImages;
5355 std::map<std::string, const std::vector<vpColVector> *> mapOfPointClouds;
5356 std::map<std::string, unsigned int> mapOfWidths, mapOfHeights;
5358 track(mapOfImages, mapOfPointClouds, mapOfWidths, mapOfHeights);
5372 std::map<std::string, const vpImage<vpRGBa> *> mapOfColorImages;
5375 std::map<std::string, const std::vector<vpColVector> *> mapOfPointClouds;
5376 std::map<std::string, unsigned int> mapOfWidths, mapOfHeights;
5378 track(mapOfColorImages, mapOfPointClouds, mapOfWidths, mapOfHeights);
5394 std::map<std::string, TrackerWrapper *>::const_iterator it =
m_mapOfTrackers.begin();
5395 std::map<std::string, const vpImage<unsigned char> *> mapOfImages;
5396 mapOfImages[it->first] = &I1;
5399 mapOfImages[it->first] = &I2;
5401 std::map<std::string, const std::vector<vpColVector> *> mapOfPointClouds;
5402 std::map<std::string, unsigned int> mapOfWidths, mapOfHeights;
5404 track(mapOfImages, mapOfPointClouds, mapOfWidths, mapOfHeights);
5407 std::stringstream ss;
5408 ss <<
"Require two cameras! There are " <<
m_mapOfTrackers.size() <<
" cameras!";
5426 std::map<std::string, TrackerWrapper *>::const_iterator it =
m_mapOfTrackers.begin();
5427 std::map<std::string, const vpImage<vpRGBa> *> mapOfImages;
5428 mapOfImages[it->first] = &I_color1;
5431 mapOfImages[it->first] = &_colorI2;
5433 std::map<std::string, const std::vector<vpColVector> *> mapOfPointClouds;
5434 std::map<std::string, unsigned int> mapOfWidths, mapOfHeights;
5436 track(mapOfImages, mapOfPointClouds, mapOfWidths, mapOfHeights);
5439 std::stringstream ss;
5440 ss <<
"Require two cameras! There are " <<
m_mapOfTrackers.size() <<
" cameras!";
5454 std::map<std::string, const std::vector<vpColVector> *> mapOfPointClouds;
5455 std::map<std::string, unsigned int> mapOfWidths, mapOfHeights;
5457 track(mapOfImages, mapOfPointClouds, mapOfWidths, mapOfHeights);
5469 std::map<std::string, const std::vector<vpColVector> *> mapOfPointClouds;
5470 std::map<std::string, unsigned int> mapOfWidths, mapOfHeights;
5472 track(mapOfColorImages, mapOfPointClouds, mapOfWidths, mapOfHeights);
5475#if defined(VISP_HAVE_PCL) && defined(VISP_HAVE_PCL_SEGMENTATION) && defined(VISP_HAVE_PCL_FILTERS) && defined(VISP_HAVE_PCL_COMMON)
5485 std::map<std::string, pcl::PointCloud<pcl::PointXYZ>::ConstPtr> &mapOfPointClouds)
5487 for (std::map<std::string, TrackerWrapper *>::const_iterator it =
m_mapOfTrackers.begin();
5489 TrackerWrapper *tracker = it->second;
5492#
if defined(VISP_HAVE_MODULE_KLT) && defined(VISP_HAVE_OPENCV) && defined(HAVE_OPENCV_IMGPROC) && defined(HAVE_OPENCV_VIDEO)
5500#
if defined(VISP_HAVE_MODULE_KLT) && defined(VISP_HAVE_OPENCV) && defined(HAVE_OPENCV_IMGPROC) && defined(HAVE_OPENCV_VIDEO)
5504 mapOfImages[it->first] ==
nullptr) {
5509 !mapOfPointClouds[it->first]) {
5526 for (std::map<std::string, TrackerWrapper *>::const_iterator it =
m_mapOfTrackers.begin();
5528 TrackerWrapper *tracker = it->second;
5531 tracker->m_featuresToBeDisplayedEdge = tracker->getFeaturesForDisplayEdge();
5534 tracker->postTracking(mapOfImages[it->first], mapOfPointClouds[it->first]);
5537#if defined(VISP_HAVE_MODULE_KLT) && defined(VISP_HAVE_OPENCV) && defined(HAVE_OPENCV_IMGPROC) && defined(HAVE_OPENCV_VIDEO)
5539 tracker->m_featuresToBeDisplayedKlt = tracker->getFeaturesForDisplayKlt();
5544 tracker->m_featuresToBeDisplayedDepthNormal = tracker->getFeaturesForDisplayDepthNormal();
5561 std::map<std::string, pcl::PointCloud<pcl::PointXYZ>::ConstPtr> &mapOfPointClouds)
5563 std::map<std::string, const vpImage<unsigned char> *> mapOfImages;
5564 for (std::map<std::string, TrackerWrapper *>::const_iterator it =
m_mapOfTrackers.begin();
5566 TrackerWrapper *tracker = it->second;
5569#
if defined(VISP_HAVE_MODULE_KLT) && defined(VISP_HAVE_OPENCV) && defined(HAVE_OPENCV_IMGPROC) && defined(HAVE_OPENCV_VIDEO)
5577#
if defined(VISP_HAVE_MODULE_KLT) && defined(VISP_HAVE_OPENCV) && defined(HAVE_OPENCV_IMGPROC) && defined(HAVE_OPENCV_VIDEO)
5581 mapOfImages[it->first] ==
nullptr) {
5585#
if defined(VISP_HAVE_MODULE_KLT) && defined(VISP_HAVE_OPENCV) && defined(HAVE_OPENCV_IMGPROC) && defined(HAVE_OPENCV_VIDEO)
5589 mapOfImages[it->first] !=
nullptr) {
5591 mapOfImages[it->first] = &tracker->m_I;
5595 !mapOfPointClouds[it->first]) {
5612 for (std::map<std::string, TrackerWrapper *>::const_iterator it =
m_mapOfTrackers.begin();
5614 TrackerWrapper *tracker = it->second;
5617 tracker->m_featuresToBeDisplayedEdge = tracker->getFeaturesForDisplayEdge();
5620 tracker->postTracking(mapOfImages[it->first], mapOfPointClouds[it->first]);
5623#if defined(VISP_HAVE_MODULE_KLT) && defined(VISP_HAVE_OPENCV) && defined(HAVE_OPENCV_IMGPROC) && defined(HAVE_OPENCV_VIDEO)
5625 tracker->m_featuresToBeDisplayedKlt = tracker->getFeaturesForDisplayKlt();
5630 tracker->m_featuresToBeDisplayedDepthNormal = tracker->getFeaturesForDisplayDepthNormal();
5650 std::map<std::string,
const std::vector<vpColVector> *> &mapOfPointClouds,
5651 std::map<std::string, unsigned int> &mapOfPointCloudWidths,
5652 std::map<std::string, unsigned int> &mapOfPointCloudHeights)
5654 for (std::map<std::string, TrackerWrapper *>::const_iterator it =
m_mapOfTrackers.begin();
5656 TrackerWrapper *tracker = it->second;
5659#
if defined(VISP_HAVE_MODULE_KLT) && defined(VISP_HAVE_OPENCV) && defined(HAVE_OPENCV_IMGPROC) && defined(HAVE_OPENCV_VIDEO)
5667#
if defined(VISP_HAVE_MODULE_KLT) && defined(VISP_HAVE_OPENCV) && defined(HAVE_OPENCV_IMGPROC) && defined(HAVE_OPENCV_VIDEO)
5671 mapOfImages[it->first] ==
nullptr) {
5676 (mapOfPointClouds[it->first] ==
nullptr)) {
5681 preTracking(mapOfImages, mapOfPointClouds, mapOfPointCloudWidths, mapOfPointCloudHeights);
5693 for (std::map<std::string, TrackerWrapper *>::const_iterator it =
m_mapOfTrackers.begin();
5695 TrackerWrapper *tracker = it->second;
5698 tracker->m_featuresToBeDisplayedEdge = tracker->getFeaturesForDisplayEdge();
5701 tracker->postTracking(mapOfImages[it->first], mapOfPointCloudWidths[it->first], mapOfPointCloudHeights[it->first]);
5704#if defined(VISP_HAVE_MODULE_KLT) && defined(VISP_HAVE_OPENCV) && defined(HAVE_OPENCV_IMGPROC) && defined(HAVE_OPENCV_VIDEO)
5706 tracker->m_featuresToBeDisplayedKlt = tracker->getFeaturesForDisplayKlt();
5711 tracker->m_featuresToBeDisplayedDepthNormal = tracker->getFeaturesForDisplayDepthNormal();
5730 std::map<std::string,
const std::vector<vpColVector> *> &mapOfPointClouds,
5731 std::map<std::string, unsigned int> &mapOfPointCloudWidths,
5732 std::map<std::string, unsigned int> &mapOfPointCloudHeights)
5734 std::map<std::string, const vpImage<unsigned char> *> mapOfImages;
5735 for (std::map<std::string, TrackerWrapper *>::const_iterator it =
m_mapOfTrackers.begin();
5737 TrackerWrapper *tracker = it->second;
5740#
if defined(VISP_HAVE_MODULE_KLT) && defined(VISP_HAVE_OPENCV) && defined(HAVE_OPENCV_IMGPROC) && defined(HAVE_OPENCV_VIDEO)
5748#
if defined(VISP_HAVE_MODULE_KLT) && defined(VISP_HAVE_OPENCV) && defined(HAVE_OPENCV_IMGPROC) && defined(HAVE_OPENCV_VIDEO)
5752 mapOfColorImages[it->first] ==
nullptr) {
5756#
if defined(VISP_HAVE_MODULE_KLT) && defined(VISP_HAVE_OPENCV) && defined(HAVE_OPENCV_IMGPROC) && defined(HAVE_OPENCV_VIDEO)
5760 mapOfColorImages[it->first] !=
nullptr) {
5762 mapOfImages[it->first] = &tracker->m_I;
5766 (mapOfPointClouds[it->first] ==
nullptr)) {
5771 preTracking(mapOfImages, mapOfPointClouds, mapOfPointCloudWidths, mapOfPointCloudHeights);
5783 for (std::map<std::string, TrackerWrapper *>::const_iterator it =
m_mapOfTrackers.begin();
5785 TrackerWrapper *tracker = it->second;
5788 tracker->m_featuresToBeDisplayedEdge = tracker->getFeaturesForDisplayEdge();
5791 tracker->postTracking(mapOfImages[it->first], mapOfPointCloudWidths[it->first], mapOfPointCloudHeights[it->first]);
5794#if defined(VISP_HAVE_MODULE_KLT) && defined(VISP_HAVE_OPENCV) && defined(HAVE_OPENCV_IMGPROC) && defined(HAVE_OPENCV_VIDEO)
5796 tracker->m_featuresToBeDisplayedKlt = tracker->getFeaturesForDisplayKlt();
5801 tracker->m_featuresToBeDisplayedDepthNormal = tracker->getFeaturesForDisplayDepthNormal();
5810 std::map<std::string, const vpMatrix *> &mapOfPointClouds,
5811 std::map<std::string, unsigned int> &mapOfPointCloudWidths,
5812 std::map<std::string, unsigned int> &mapOfPointCloudHeights)
5814 for (std::map<std::string, TrackerWrapper *>::const_iterator it =
m_mapOfTrackers.begin();
5816 TrackerWrapper *tracker = it->second;
5819#
if defined(VISP_HAVE_MODULE_KLT) && defined(VISP_HAVE_OPENCV) && defined(HAVE_OPENCV_IMGPROC) && defined(HAVE_OPENCV_VIDEO)
5827#
if defined(VISP_HAVE_MODULE_KLT) && defined(VISP_HAVE_OPENCV) && defined(HAVE_OPENCV_IMGPROC) && defined(HAVE_OPENCV_VIDEO)
5831 mapOfImages[it->first] ==
nullptr) {
5836 (mapOfPointClouds[it->first] ==
nullptr)) {
5841 preTracking(mapOfImages, mapOfPointClouds, mapOfPointCloudWidths, mapOfPointCloudHeights);
5853 for (std::map<std::string, TrackerWrapper *>::const_iterator it =
m_mapOfTrackers.begin();
5855 TrackerWrapper *tracker = it->second;
5858 tracker->m_featuresToBeDisplayedEdge = tracker->getFeaturesForDisplayEdge();
5861 tracker->postTracking(mapOfImages[it->first], mapOfPointCloudWidths[it->first], mapOfPointCloudHeights[it->first]);
5864#if defined(VISP_HAVE_MODULE_KLT) && defined(VISP_HAVE_OPENCV) && defined(HAVE_OPENCV_IMGPROC) && defined(HAVE_OPENCV_VIDEO)
5866 tracker->m_featuresToBeDisplayedKlt = tracker->getFeaturesForDisplayKlt();
5871 tracker->m_featuresToBeDisplayedDepthNormal = tracker->getFeaturesForDisplayDepthNormal();
5890 std::map<std::string, const vpMatrix *> &mapOfPointClouds,
5891 std::map<std::string, unsigned int> &mapOfPointCloudWidths,
5892 std::map<std::string, unsigned int> &mapOfPointCloudHeights)
5894 std::map<std::string, const vpImage<unsigned char> *> mapOfImages;
5895 for (std::map<std::string, TrackerWrapper *>::const_iterator it =
m_mapOfTrackers.begin();
5897 TrackerWrapper *tracker = it->second;
5900#
if defined(VISP_HAVE_MODULE_KLT) && defined(VISP_HAVE_OPENCV) && defined(HAVE_OPENCV_IMGPROC) && defined(HAVE_OPENCV_VIDEO)
5908#
if defined(VISP_HAVE_MODULE_KLT) && defined(VISP_HAVE_OPENCV) && defined(HAVE_OPENCV_IMGPROC) && defined(HAVE_OPENCV_VIDEO)
5912 mapOfColorImages[it->first] ==
nullptr) {
5916#
if defined(VISP_HAVE_MODULE_KLT) && defined(VISP_HAVE_OPENCV) && defined(HAVE_OPENCV_IMGPROC) && defined(HAVE_OPENCV_VIDEO)
5920 mapOfColorImages[it->first] !=
nullptr) {
5922 mapOfImages[it->first] = &tracker->m_I;
5926 (mapOfPointClouds[it->first] ==
nullptr)) {
5931 preTracking(mapOfImages, mapOfPointClouds, mapOfPointCloudWidths, mapOfPointCloudHeights);
5943 for (std::map<std::string, TrackerWrapper *>::const_iterator it =
m_mapOfTrackers.begin();
5945 TrackerWrapper *tracker = it->second;
5948 tracker->m_featuresToBeDisplayedEdge = tracker->getFeaturesForDisplayEdge();
5951 tracker->postTracking(mapOfImages[it->first], mapOfPointCloudWidths[it->first], mapOfPointCloudHeights[it->first]);
5954#if defined(VISP_HAVE_MODULE_KLT) && defined(VISP_HAVE_OPENCV) && defined(HAVE_OPENCV_IMGPROC) && defined(HAVE_OPENCV_VIDEO)
5956 tracker->m_featuresToBeDisplayedKlt = tracker->getFeaturesForDisplayKlt();
5961 tracker->m_featuresToBeDisplayedDepthNormal = tracker->getFeaturesForDisplayDepthNormal();
5970vpMbGenericTracker::TrackerWrapper::TrackerWrapper()
5971 : m_error(), m_L(), m_trackerType(EDGE_TRACKER), m_w(), m_weightedError()
5976#ifdef VISP_HAVE_OGRE
5983vpMbGenericTracker::TrackerWrapper::TrackerWrapper(
int trackerType)
5984 : m_error(), m_L(), m_trackerType(trackerType), m_w(), m_weightedError()
5987#
if defined(VISP_HAVE_MODULE_KLT) && defined(VISP_HAVE_OPENCV) && defined(HAVE_OPENCV_IMGPROC) && defined(HAVE_OPENCV_VIDEO)
5997#ifdef VISP_HAVE_OGRE
5998 faces.getOgreContext()->setWindowName(
"MBT TrackerWrapper");
6009 if (m_error.getRows() < 4) {
6014 double normRes_1 = -1;
6015 unsigned int iter = 0;
6017 double factorEdge = 1.0;
6018#if defined(VISP_HAVE_MODULE_KLT) && defined(VISP_HAVE_OPENCV) && defined(HAVE_OPENCV_IMGPROC) && defined(HAVE_OPENCV_VIDEO)
6019 double factorKlt = 1.0;
6021 double factorDepth = 1.0;
6022 double factorDepthDense = 1.0;
6026 vpColVector error_prev;
6029 vpHomogeneousMatrix cMo_prev;
6030#if defined(VISP_HAVE_MODULE_KLT) && defined(VISP_HAVE_OPENCV) && defined(HAVE_OPENCV_IMGPROC) && defined(HAVE_OPENCV_VIDEO)
6031 vpHomogeneousMatrix ctTc0_Prev;
6038 vpColVector W_true(m_error.getRows());
6039 vpMatrix L_true, LVJ_true;
6041 unsigned int nb_edge_features =
m_error_edge.getRows();
6042#if defined(VISP_HAVE_MODULE_KLT) && defined(VISP_HAVE_OPENCV) && defined(HAVE_OPENCV_IMGPROC) && defined(HAVE_OPENCV_VIDEO)
6043 unsigned int nb_klt_features =
m_error_klt.getRows();
6051 bool reStartFromLastIncrement =
false;
6054#if defined(VISP_HAVE_MODULE_KLT) && defined(VISP_HAVE_OPENCV) && defined(HAVE_OPENCV_IMGPROC) && defined(HAVE_OPENCV_VIDEO)
6055 if (reStartFromLastIncrement) {
6062 if (!reStartFromLastIncrement) {
6067 if (!isoJoIdentity) {
6068 vpVelocityTwistMatrix cVo;
6070 LVJ_true = (m_L * cVo *
oJo);
6074 vpVelocityTwistMatrix cVo;
6080 if (isoJoIdentity) {
6084 unsigned int rank = (m_L * cVo).kernel(K);
6094 isoJoIdentity =
false;
6103 unsigned int start_index = 0;
6105 for (
unsigned int i = 0;
i < nb_edge_features;
i++) {
6108 m_weightedError[
i] = wi * m_error[
i];
6113 for (
unsigned int j = 0;
j < m_L.getCols();
j++) {
6118 start_index += nb_edge_features;
6121#if defined(VISP_HAVE_MODULE_KLT) && defined(VISP_HAVE_OPENCV) && defined(HAVE_OPENCV_IMGPROC) && defined(HAVE_OPENCV_VIDEO)
6123 for (
unsigned int i = 0;
i < nb_klt_features;
i++) {
6124 double wi =
m_w_klt[
i] * factorKlt;
6125 W_true[start_index +
i] = wi;
6128 num += wi *
vpMath::sqr(m_error[start_index + i]);
6131 for (
unsigned int j = 0;
j < m_L.getCols();
j++) {
6132 m_L[start_index +
i][
j] *= wi;
6136 start_index += nb_klt_features;
6141 for (
unsigned int i = 0;
i < nb_depth_features;
i++) {
6144 m_weightedError[start_index +
i] = wi * m_error[start_index +
i];
6146 num += wi *
vpMath::sqr(m_error[start_index + i]);
6149 for (
unsigned int j = 0;
j < m_L.getCols();
j++) {
6150 m_L[start_index +
i][
j] *= wi;
6154 start_index += nb_depth_features;
6158 for (
unsigned int i = 0;
i < nb_depth_dense_features;
i++) {
6161 m_weightedError[start_index +
i] = wi * m_error[start_index +
i];
6163 num += wi *
vpMath::sqr(m_error[start_index + i]);
6166 for (
unsigned int j = 0;
j < m_L.getCols();
j++) {
6167 m_L[start_index +
i][
j] *= wi;
6177#if defined(VISP_HAVE_MODULE_KLT) && defined(VISP_HAVE_OPENCV) && defined(HAVE_OPENCV_IMGPROC) && defined(HAVE_OPENCV_VIDEO)
6185#if defined(VISP_HAVE_MODULE_KLT) && defined(VISP_HAVE_OPENCV) && defined(HAVE_OPENCV_IMGPROC) && defined(HAVE_OPENCV_VIDEO)
6190 normRes_1 = normRes;
6192 normRes = sqrt(num / den);
6208 "TrackerWrapper::computeVVSInit("
6209 ") should not be called!");
6214 initMbtTracking(ptr_I);
6216 unsigned int nbFeatures = 0;
6219 nbFeatures += m_error_edge.getRows();
6222 m_error_edge.clear();
6223 m_weightedError_edge.clear();
6228#if defined(VISP_HAVE_MODULE_KLT) && defined(VISP_HAVE_OPENCV) && defined(HAVE_OPENCV_IMGPROC) && defined(HAVE_OPENCV_VIDEO)
6231 nbFeatures += m_error_klt.getRows();
6234 m_error_klt.clear();
6235 m_weightedError_klt.clear();
6243 nbFeatures += m_error_depthNormal.getRows();
6246 m_error_depthNormal.clear();
6247 m_weightedError_depthNormal.clear();
6248 m_L_depthNormal.clear();
6249 m_w_depthNormal.clear();
6254 nbFeatures += m_error_depthDense.getRows();
6257 m_error_depthDense.clear();
6258 m_weightedError_depthDense.clear();
6259 m_L_depthDense.clear();
6260 m_w_depthDense.clear();
6263 m_L.resize(nbFeatures, 6,
false,
false);
6264 m_error.resize(nbFeatures,
false);
6267 m_w.resize(nbFeatures,
false);
6275 "computeVVSInteractionMatrixAndR"
6276 "esidu() should not be called!");
6285#if defined(VISP_HAVE_MODULE_KLT) && defined(VISP_HAVE_OPENCV) && defined(HAVE_OPENCV_IMGPROC) && defined(HAVE_OPENCV_VIDEO)
6299 unsigned int start_index = 0;
6301 m_L.insert(m_L_edge, start_index, 0);
6302 m_error.insert(start_index, m_error_edge);
6304 start_index += m_error_edge.getRows();
6307#if defined(VISP_HAVE_MODULE_KLT) && defined(VISP_HAVE_OPENCV) && defined(HAVE_OPENCV_IMGPROC) && defined(HAVE_OPENCV_VIDEO)
6309 m_L.insert(m_L_klt, start_index, 0);
6310 m_error.insert(start_index, m_error_klt);
6312 start_index += m_error_klt.getRows();
6317 m_L.insert(m_L_depthNormal, start_index, 0);
6318 m_error.insert(start_index, m_error_depthNormal);
6320 start_index += m_error_depthNormal.getRows();
6324 m_L.insert(m_L_depthDense, start_index, 0);
6325 m_error.insert(start_index, m_error_depthDense);
6333 unsigned int start_index = 0;
6337 m_w.insert(start_index, m_w_edge);
6339 start_index += m_w_edge.getRows();
6342#if defined(VISP_HAVE_MODULE_KLT) && defined(VISP_HAVE_OPENCV) && defined(HAVE_OPENCV_IMGPROC) && defined(HAVE_OPENCV_VIDEO)
6345 m_w.insert(start_index, m_w_klt);
6347 start_index += m_w_klt.getRows();
6352 if (m_depthNormalUseRobust) {
6354 m_w.insert(start_index, m_w_depthNormal);
6357 start_index += m_w_depthNormal.getRows();
6362 m_w.insert(start_index, m_w_depthDense);
6368void vpMbGenericTracker::TrackerWrapper::display(
const vpImage<unsigned char> &I,
const vpHomogeneousMatrix &cMo,
6369 const vpCameraParameters &cam,
const vpColor &col,
6370 unsigned int thickness,
bool displayFullModel)
6374 for (
size_t i = 0;
i < features.size();
i++) {
6376 vpImagePoint ip(features[i][1], features[i][2]);
6377 int state =
static_cast<int>(features[
i][3]);
6405 vpImagePoint ip1(features[i][1], features[i][2]);
6408 vpImagePoint ip2(features[i][3], features[i][4]);
6409 double id = features[
i][5];
6410 std::stringstream ss;
6415 vpImagePoint im_centroid(features[i][1], features[i][2]);
6416 vpImagePoint im_extremity(features[i][3], features[i][4]);
6423 std::vector<std::vector<double> > models =
6425 for (
size_t i = 0;
i < models.size();
i++) {
6427 vpImagePoint ip1(models[i][1], models[i][2]);
6428 vpImagePoint ip2(models[i][3], models[i][4]);
6432 vpImagePoint center(models[i][1], models[i][2]);
6433 double n20 = models[
i][3];
6434 double n11 = models[
i][4];
6435 double n02 = models[
i][5];
6440#ifdef VISP_HAVE_OGRE
6442#
if defined(VISP_HAVE_MODULE_KLT) && defined(VISP_HAVE_OPENCV) && defined(HAVE_OPENCV_IMGPROC) && defined(HAVE_OPENCV_VIDEO)
6447 faces.displayOgre(cMo);
6452void vpMbGenericTracker::TrackerWrapper::display(
const vpImage<vpRGBa> &I,
const vpHomogeneousMatrix &cMo,
6453 const vpCameraParameters &cam,
const vpColor &col,
6454 unsigned int thickness,
bool displayFullModel)
6458 for (
size_t i = 0;
i < features.size();
i++) {
6460 vpImagePoint ip(features[i][1], features[i][2]);
6461 int state =
static_cast<int>(features[
i][3]);
6489 vpImagePoint ip1(features[i][1], features[i][2]);
6492 vpImagePoint ip2(features[i][3], features[i][4]);
6493 double id = features[
i][5];
6494 std::stringstream ss;
6499 vpImagePoint im_centroid(features[i][1], features[i][2]);
6500 vpImagePoint im_extremity(features[i][3], features[i][4]);
6507 std::vector<std::vector<double> > models =
6509 for (
size_t i = 0;
i < models.size();
i++) {
6511 vpImagePoint ip1(models[i][1], models[i][2]);
6512 vpImagePoint ip2(models[i][3], models[i][4]);
6516 vpImagePoint center(models[i][1], models[i][2]);
6517 double n20 = models[
i][3];
6518 double n11 = models[
i][4];
6519 double n02 = models[
i][5];
6524#ifdef VISP_HAVE_OGRE
6526#
if defined(VISP_HAVE_MODULE_KLT) && defined(VISP_HAVE_OPENCV) && defined(HAVE_OPENCV_IMGPROC) && defined(HAVE_OPENCV_VIDEO)
6531 faces.displayOgre(cMo);
6536std::vector<std::vector<double> > vpMbGenericTracker::TrackerWrapper::getFeaturesForDisplay()
6538 std::vector<std::vector<double> > features;
6542 features.insert(features.end(), m_featuresToBeDisplayedEdge.begin(), m_featuresToBeDisplayedEdge.end());
6545#if defined(VISP_HAVE_MODULE_KLT) && defined(VISP_HAVE_OPENCV) && defined(HAVE_OPENCV_IMGPROC) && defined(HAVE_OPENCV_VIDEO)
6548 features.insert(features.end(), m_featuresToBeDisplayedKlt.begin(), m_featuresToBeDisplayedKlt.end());
6554 features.insert(features.end(), m_featuresToBeDisplayedDepthNormal.begin(),
6555 m_featuresToBeDisplayedDepthNormal.end());
6561std::vector<std::vector<double> > vpMbGenericTracker::TrackerWrapper::getModelForDisplay(
unsigned int width,
6562 unsigned int height,
6563 const vpHomogeneousMatrix &cMo,
6564 const vpCameraParameters &cam,
6565 bool displayFullModel)
6567 std::vector<std::vector<double> > models;
6573#if defined(VISP_HAVE_MODULE_KLT) && defined(VISP_HAVE_OPENCV) && defined(HAVE_OPENCV_IMGPROC) && defined(HAVE_OPENCV_VIDEO)
6587 std::vector<std::vector<double> > edgeModels =
6589 models.insert(models.end(), edgeModels.begin(), edgeModels.end());
6594 std::vector<std::vector<double> > depthDenseModels =
6596 models.insert(models.end(), depthDenseModels.begin(), depthDenseModels.end());
6603void vpMbGenericTracker::TrackerWrapper::init(
const vpImage<unsigned char> &I)
6612 bool reInitialisation =
false;
6617#ifdef VISP_HAVE_OGRE
6618 if (!
faces.isOgreInitialised()) {
6640#if defined(VISP_HAVE_MODULE_KLT) && defined(VISP_HAVE_OPENCV) && defined(HAVE_OPENCV_IMGPROC) && defined(HAVE_OPENCV_VIDEO)
6661void vpMbGenericTracker::TrackerWrapper::initCircle(
const vpPoint &p1,
const vpPoint &p2,
const vpPoint &p3,
6662 double radius,
int idFace,
const std::string &name)
6667#if defined(VISP_HAVE_MODULE_KLT) && defined(VISP_HAVE_OPENCV) && defined(HAVE_OPENCV_IMGPROC) && defined(HAVE_OPENCV_VIDEO)
6673void vpMbGenericTracker::TrackerWrapper::initCylinder(
const vpPoint &p1,
const vpPoint &p2,
double radius,
int idFace,
6674 const std::string &name)
6679#if defined(VISP_HAVE_MODULE_KLT) && defined(VISP_HAVE_OPENCV) && defined(HAVE_OPENCV_IMGPROC) && defined(HAVE_OPENCV_VIDEO)
6685void vpMbGenericTracker::TrackerWrapper::initFaceFromCorners(vpMbtPolygon &polygon)
6690#if defined(VISP_HAVE_MODULE_KLT) && defined(VISP_HAVE_OPENCV) && defined(HAVE_OPENCV_IMGPROC) && defined(HAVE_OPENCV_VIDEO)
6702void vpMbGenericTracker::TrackerWrapper::initFaceFromLines(vpMbtPolygon &polygon)
6707#if defined(VISP_HAVE_MODULE_KLT) && defined(VISP_HAVE_OPENCV) && defined(HAVE_OPENCV_IMGPROC) && defined(HAVE_OPENCV_VIDEO)
6719void vpMbGenericTracker::TrackerWrapper::initMbtTracking(
const vpImage<unsigned char> *
const ptr_I)
6727void vpMbGenericTracker::TrackerWrapper::loadConfigFile(
const std::string &configFile,
bool verbose)
6729#if defined(VISP_HAVE_PUGIXML)
6734 xmlp.setVerbose(verbose);
6735 xmlp.setCameraParameters(
m_cam);
6743 xmlp.setKltMaxFeatures(10000);
6744 xmlp.setKltWindowSize(5);
6745 xmlp.setKltQuality(0.01);
6746 xmlp.setKltMinDistance(5);
6747 xmlp.setKltHarrisParam(0.01);
6748 xmlp.setKltBlockSize(3);
6749 xmlp.setKltPyramidLevels(3);
6750#if defined(VISP_HAVE_MODULE_KLT) && defined(VISP_HAVE_OPENCV) && defined(HAVE_OPENCV_IMGPROC) && defined(HAVE_OPENCV_VIDEO)
6751 xmlp.setKltMaskBorder(maskBorder);
6755 xmlp.setDepthNormalFeatureEstimationMethod(m_depthNormalFeatureEstimationMethod);
6756 xmlp.setDepthNormalPclPlaneEstimationMethod(m_depthNormalPclPlaneEstimationMethod);
6757 xmlp.setDepthNormalPclPlaneEstimationRansacMaxIter(m_depthNormalPclPlaneEstimationRansacMaxIter);
6758 xmlp.setDepthNormalPclPlaneEstimationRansacThreshold(m_depthNormalPclPlaneEstimationRansacThreshold);
6759 xmlp.setDepthNormalSamplingStepX(m_depthNormalSamplingStepX);
6760 xmlp.setDepthNormalSamplingStepY(m_depthNormalSamplingStepY);
6763 xmlp.setDepthDenseSamplingStepX(m_depthDenseSamplingStepX);
6764 xmlp.setDepthDenseSamplingStepY(m_depthDenseSamplingStepY);
6768 std::cout <<
" *********** Parsing XML for";
6771 std::vector<std::string> tracker_names;
6773 tracker_names.push_back(
"Edge");
6774#if defined(VISP_HAVE_MODULE_KLT) && defined(VISP_HAVE_OPENCV) && defined(HAVE_OPENCV_IMGPROC) && defined(HAVE_OPENCV_VIDEO)
6776 tracker_names.push_back(
"Klt");
6779 tracker_names.push_back(
"Depth Normal");
6781 tracker_names.push_back(
"Depth Dense");
6784 for (
size_t i = 0;
i < tracker_names.size();
i++) {
6785 std::cout <<
" " << tracker_names[
i];
6786 if (i == tracker_names.size() - 1) {
6791 std::cout <<
"Model-Based Tracker ************ " << std::endl;
6794 xmlp.parse(configFile);
6800 vpCameraParameters camera;
6801 xmlp.getCameraParameters(camera);
6807 if (xmlp.hasNearClippingDistance())
6810 if (xmlp.hasFarClippingDistance())
6813 if (xmlp.getFovClipping()) {
6831 xmlp.getEdgeMe(meParser);
6835#if defined(VISP_HAVE_MODULE_KLT) && defined(VISP_HAVE_OPENCV) && defined(HAVE_OPENCV_IMGPROC) && defined(HAVE_OPENCV_VIDEO)
6836 tracker.setMaxFeatures(
static_cast<int>(xmlp.getKltMaxFeatures()));
6837 tracker.setWindowSize(
static_cast<int>(xmlp.getKltWindowSize()));
6838 tracker.setQuality(xmlp.getKltQuality());
6839 tracker.setMinDistance(xmlp.getKltMinDistance());
6840 tracker.setHarrisFreeParameter(xmlp.getKltHarrisParam());
6841 tracker.setBlockSize(
static_cast<int>(xmlp.getKltBlockSize()));
6842 tracker.setPyramidLevels(
static_cast<int>(xmlp.getKltPyramidLevels()));
6843 maskBorder = xmlp.getKltMaskBorder();
6846 faces.getMbScanLineRenderer().setMaskBorder(maskBorder);
6861 throw(vpException(
vpException::ioError,
"vpMbGenericTracker::TrackerWrapper::loadConfigFile() needs pugixml built-in 3rdparty"));
6865#if defined(VISP_HAVE_PCL) && defined(VISP_HAVE_PCL_SEGMENTATION) && defined(VISP_HAVE_PCL_FILTERS) && defined(VISP_HAVE_PCL_COMMON)
6866void vpMbGenericTracker::TrackerWrapper::postTracking(
const vpImage<unsigned char> *
const ptr_I,
6867 const pcl::PointCloud<pcl::PointXYZ>::ConstPtr &point_cloud)
6869#if defined(VISP_HAVE_MODULE_KLT) && defined(VISP_HAVE_OPENCV) && defined(HAVE_OPENCV_IMGPROC) && defined(HAVE_OPENCV_VIDEO)
6880 bool newvisibleface =
false;
6911void vpMbGenericTracker::TrackerWrapper::preTracking(
const vpImage<unsigned char> *
const ptr_I,
6912 const pcl::PointCloud<pcl::PointXYZ>::ConstPtr &point_cloud)
6919 std::cerr <<
"Error in moving edge tracking" << std::endl;
6924#if defined(VISP_HAVE_MODULE_KLT) && defined(VISP_HAVE_OPENCV) && defined(HAVE_OPENCV_IMGPROC) && defined(HAVE_OPENCV_VIDEO)
6929 catch (
const vpException &e) {
6930 std::cerr <<
"Error in KLT tracking: " <<
e.what() << std::endl;
6941 std::cerr <<
"Error in Depth normal tracking" << std::endl;
6951 std::cerr <<
"Error in Depth dense tracking" << std::endl;
6958void vpMbGenericTracker::TrackerWrapper::postTracking(
const vpImage<unsigned char> *
const ptr_I,
6959 const unsigned int pointcloud_width,
6960 const unsigned int pointcloud_height)
6962#if defined(VISP_HAVE_MODULE_KLT) && defined(VISP_HAVE_OPENCV) && defined(HAVE_OPENCV_IMGPROC) && defined(HAVE_OPENCV_VIDEO)
6973 bool newvisibleface =
false;
7004void vpMbGenericTracker::TrackerWrapper::preTracking(
const vpImage<unsigned char> *
const ptr_I,
7005 const std::vector<vpColVector> *
const point_cloud,
7006 const unsigned int pointcloud_width,
7007 const unsigned int pointcloud_height)
7014 std::cerr <<
"Error in moving edge tracking" << std::endl;
7019#if defined(VISP_HAVE_MODULE_KLT) && defined(VISP_HAVE_OPENCV) && defined(HAVE_OPENCV_IMGPROC) && defined(HAVE_OPENCV_VIDEO)
7024 catch (
const vpException &e) {
7025 std::cerr <<
"Error in KLT tracking: " <<
e.what() << std::endl;
7036 std::cerr <<
"Error in Depth tracking" << std::endl;
7046 std::cerr <<
"Error in Depth dense tracking" << std::endl;
7052void vpMbGenericTracker::TrackerWrapper::preTracking(
const vpImage<unsigned char> *
const ptr_I,
7053 const vpMatrix *
const point_cloud,
7054 const unsigned int pointcloud_width,
7055 const unsigned int pointcloud_height)
7062 std::cerr <<
"Error in moving edge tracking" << std::endl;
7067#if defined(VISP_HAVE_MODULE_KLT) && defined(VISP_HAVE_OPENCV) && defined(HAVE_OPENCV_IMGPROC) && defined(HAVE_OPENCV_VIDEO)
7072 catch (
const vpException &e) {
7073 std::cerr <<
"Error in KLT tracking: " <<
e.what() << std::endl;
7084 std::cerr <<
"Error in Depth tracking" << std::endl;
7094 std::cerr <<
"Error in Depth dense tracking" << std::endl;
7100void vpMbGenericTracker::TrackerWrapper::reInitModel(
const vpImage<unsigned char> *
const I,
7101 const vpImage<vpRGBa> *
const I_color,
const std::string &cad_name,
7102 const vpHomogeneousMatrix &cMo,
bool verbose,
7103 const vpHomogeneousMatrix &T)
7108 vpMbtDistanceLine *l;
7109 vpMbtDistanceCylinder *cy;
7110 vpMbtDistanceCircle *ci;
7112 for (
unsigned int i = 0;
i < scales.size();
i++) {
7114 for (std::list<vpMbtDistanceLine *>::const_iterator it = lines[i].begin(); it != lines[
i].end(); ++it) {
7121 for (std::list<vpMbtDistanceCylinder *>::const_iterator it = cylinders[i].begin(); it != cylinders[
i].end();
7129 for (std::list<vpMbtDistanceCircle *>::const_iterator it = circles[i].begin(); it != circles[
i].end(); ++it) {
7137 cylinders[
i].clear();
7145 nbvisiblepolygone = 0;
7148#if defined(VISP_HAVE_MODULE_KLT) && defined(VISP_HAVE_OPENCV) && defined(HAVE_OPENCV_IMGPROC) && defined(HAVE_OPENCV_VIDEO)
7150 for (std::list<vpMbtDistanceKltPoints *>::const_iterator it = kltPolygons.begin(); it != kltPolygons.end(); ++it) {
7151 vpMbtDistanceKltPoints *kltpoly = *it;
7152 if (kltpoly !=
nullptr) {
7157 kltPolygons.clear();
7159 for (std::list<vpMbtDistanceKltCylinder *>::const_iterator it = kltCylinders.begin(); it != kltCylinders.end();
7161 vpMbtDistanceKltCylinder *kltPolyCylinder = *it;
7162 if (kltPolyCylinder !=
nullptr) {
7163 delete kltPolyCylinder;
7165 kltPolyCylinder =
nullptr;
7167 kltCylinders.clear();
7170 for (std::list<vpMbtDistanceCircle *>::const_iterator it = circles_disp.begin(); it != circles_disp.end(); ++it) {
7172 if (ci !=
nullptr) {
7177 circles_disp.clear();
7179 firstInitialisation =
true;
7184 for (
size_t i = 0;
i < m_depthNormalFaces.size();
i++) {
7185 delete m_depthNormalFaces[
i];
7186 m_depthNormalFaces[
i] =
nullptr;
7188 m_depthNormalFaces.clear();
7191 for (
size_t i = 0;
i < m_depthDenseFaces.size();
i++) {
7192 delete m_depthDenseFaces[
i];
7193 m_depthDenseFaces[
i] =
nullptr;
7195 m_depthDenseFaces.clear();
7208void vpMbGenericTracker::TrackerWrapper::reInitModel(
const vpImage<unsigned char> &I,
const std::string &cad_name,
7209 const vpHomogeneousMatrix &cMo,
bool verbose,
7210 const vpHomogeneousMatrix &T)
7212 reInitModel(&I,
nullptr, cad_name, cMo, verbose, T);
7215void vpMbGenericTracker::TrackerWrapper::reInitModel(
const vpImage<vpRGBa> &I_color,
const std::string &cad_name,
7216 const vpHomogeneousMatrix &cMo,
bool verbose,
7217 const vpHomogeneousMatrix &T)
7219 reInitModel(
nullptr, &I_color, cad_name, cMo, verbose, T);
7225#if defined(VISP_HAVE_MODULE_KLT) && defined(VISP_HAVE_OPENCV) && defined(HAVE_OPENCV_IMGPROC) && defined(HAVE_OPENCV_VIDEO)
7232void vpMbGenericTracker::TrackerWrapper::setCameraParameters(
const vpCameraParameters &cam)
7237#if defined(VISP_HAVE_MODULE_KLT) && defined(VISP_HAVE_OPENCV) && defined(HAVE_OPENCV_IMGPROC) && defined(HAVE_OPENCV_VIDEO)
7246void vpMbGenericTracker::TrackerWrapper::setFarClippingDistance(
const double &dist)
7251void vpMbGenericTracker::TrackerWrapper::setNearClippingDistance(
const double &dist)
7256void vpMbGenericTracker::TrackerWrapper::setOgreVisibilityTest(
const bool &v)
7259#ifdef VISP_HAVE_OGRE
7260 faces.getOgreContext()->setWindowName(
"TrackerWrapper");
7264void vpMbGenericTracker::TrackerWrapper::setPose(
const vpImage<unsigned char> *
const I,
7265 const vpImage<vpRGBa> *
const I_color,
const vpHomogeneousMatrix &cdMo)
7267 bool performKltSetPose =
false;
7272#if defined(VISP_HAVE_MODULE_KLT) && defined(VISP_HAVE_OPENCV) && defined(HAVE_OPENCV_IMGPROC) && defined(HAVE_OPENCV_VIDEO)
7274 performKltSetPose =
true;
7284 if (!performKltSetPose) {
7301 initPyramid(I, Ipyramid);
7303 unsigned int i =
static_cast<unsigned int>(scales.size());
7313 cleanPyramid(Ipyramid);
7328void vpMbGenericTracker::TrackerWrapper::setPose(
const vpImage<unsigned char> &I,
const vpHomogeneousMatrix &cdMo)
7333void vpMbGenericTracker::TrackerWrapper::setPose(
const vpImage<vpRGBa> &I_color,
const vpHomogeneousMatrix &cdMo)
7335 setPose(
nullptr, &I_color, cdMo);
7338void vpMbGenericTracker::TrackerWrapper::setProjectionErrorComputation(
const bool &flag)
7343void vpMbGenericTracker::TrackerWrapper::setScanLineVisibilityTest(
const bool &v)
7346#if defined(VISP_HAVE_MODULE_KLT) && defined(VISP_HAVE_OPENCV) && defined(HAVE_OPENCV_IMGPROC) && defined(HAVE_OPENCV_VIDEO)
7353void vpMbGenericTracker::TrackerWrapper::setTrackerType(
int type)
7356#
if defined(VISP_HAVE_MODULE_KLT) && defined(VISP_HAVE_OPENCV) && defined(HAVE_OPENCV_IMGPROC) && defined(HAVE_OPENCV_VIDEO)
7363 m_trackerType =
type;
7373void vpMbGenericTracker::TrackerWrapper::track(
const vpImage<unsigned char> &
7374#
if defined(VISP_HAVE_PCL) && defined(VISP_HAVE_PCL_SEGMENTATION) && defined(VISP_HAVE_PCL_FILTERS) && defined(VISP_HAVE_PCL_COMMON)
7380#
if defined(VISP_HAVE_MODULE_KLT) && defined(VISP_HAVE_OPENCV) && defined(HAVE_OPENCV_IMGPROC) && defined(HAVE_OPENCV_VIDEO)
7384 std::cerr <<
"Bad tracker type: " << m_trackerType << std::endl;
7388#if defined(VISP_HAVE_PCL) && defined(VISP_HAVE_PCL_SEGMENTATION) && defined(VISP_HAVE_PCL_FILTERS) && defined(VISP_HAVE_PCL_COMMON)
7393void vpMbGenericTracker::TrackerWrapper::track(
const vpImage<vpRGBa> &)
7398#if defined(VISP_HAVE_PCL) && defined(VISP_HAVE_PCL_SEGMENTATION) && defined(VISP_HAVE_PCL_FILTERS) && defined(VISP_HAVE_PCL_COMMON)
7399void vpMbGenericTracker::TrackerWrapper::track(
const vpImage<unsigned char> *
const ptr_I,
7400 const pcl::PointCloud<pcl::PointXYZ>::ConstPtr &point_cloud)
7403#
if defined(VISP_HAVE_MODULE_KLT) && defined(VISP_HAVE_OPENCV) && defined(HAVE_OPENCV_IMGPROC) && defined(HAVE_OPENCV_VIDEO)
7407 std::cerr <<
"Bad tracker type: " << m_trackerType << std::endl;
7412#
if defined(VISP_HAVE_MODULE_KLT) && defined(VISP_HAVE_OPENCV) && defined(HAVE_OPENCV_IMGPROC) && defined(HAVE_OPENCV_VIDEO)
7425 vpHomogeneousMatrix cMo_1 =
m_cMo;
7440 postTracking(ptr_I, point_cloud);
7443 catch (
const vpException &e) {
7444 std::cerr <<
"Exception: " <<
e.what() << std::endl;
Generic class defining intrinsic camera parameters.
Implementation of column vector and the associated operations.
Class to define RGB colors available for display functionalities.
static const vpColor cyan
static const vpColor blue
static const vpColor purple
static const vpColor yellow
static const vpColor green
static void displayLine(const vpImage< unsigned char > &I, const vpImagePoint &ip1, const vpImagePoint &ip2, const vpColor &color, unsigned int thickness=1, bool segment=true)
static void displayEllipse(const vpImage< unsigned char > &I, const vpImagePoint ¢er, const double &coef1, const double &coef2, const double &coef3, bool use_normalized_centered_moments, const vpColor &color, unsigned int thickness=1, bool display_center=false, bool display_arc=false)
static void displayCross(const vpImage< unsigned char > &I, const vpImagePoint &ip, unsigned int size, const vpColor &color, unsigned int thickness=1)
static void displayArrow(const vpImage< unsigned char > &I, const vpImagePoint &ip1, const vpImagePoint &ip2, const vpColor &color=vpColor::white, unsigned int w=4, unsigned int h=2, unsigned int thickness=1)
static void displayText(const vpImage< unsigned char > &I, const vpImagePoint &ip, const std::string &s, const vpColor &color)
error that can be emitted by ViSP classes.
@ badValue
Used to indicate that a value is not in the allowed range.
@ notInitialized
Used to indicate that a parameter is not initialized.
static vpHomogeneousMatrix direct(const vpColVector &v)
Implementation of an homogeneous matrix and operations on such kind of matrices.
vpHomogeneousMatrix inverse() const
static void convert(const vpImage< unsigned char > &src, vpImage< vpRGBa > &dest)
Definition of the vpImage class member functions.
unsigned int getWidth() const
unsigned int getHeight() const
Wrapper for the KLT (Kanade-Lucas-Tomasi) feature tracker implemented in OpenCV. Thus to enable this ...
static double rad(double deg)
static double sqr(double x)
static bool equal(double x, double y, double threshold=0.001)
static double deg(double rad)
Implementation of a matrix and operations on matrices.
virtual void initFaceFromLines(vpMbtPolygon &polygon) VP_OVERRIDE
virtual void initFaceFromCorners(vpMbtPolygon &polygon) VP_OVERRIDE
void segmentPointCloud(const pcl::PointCloud< pcl::PointXYZ >::ConstPtr &point_cloud)
virtual std::vector< std::vector< double > > getModelForDisplay(unsigned int width, unsigned int height, const vpHomogeneousMatrix &cMo, const vpCameraParameters &cam, bool displayFullModel=false) VP_OVERRIDE
virtual void setScanLineVisibilityTest(const bool &v) VP_OVERRIDE
void computeVisibility(unsigned int width, unsigned int height)
virtual void setCameraParameters(const vpCameraParameters &camera) VP_OVERRIDE
virtual void resetTracker() VP_OVERRIDE
virtual void testTracking() VP_OVERRIDE
virtual void computeVVSWeights()
vpColVector m_error_depthDense
(s - s*)
virtual void computeVVSInteractionMatrixAndResidu() VP_OVERRIDE
virtual void computeVVSInit() VP_OVERRIDE
vpColVector m_w_depthDense
Robust weights.
virtual void computeVVSInteractionMatrixAndResidu() VP_OVERRIDE
void segmentPointCloud(const pcl::PointCloud< pcl::PointXYZ >::ConstPtr &point_cloud)
virtual std::vector< std::vector< double > > getModelForDisplay(unsigned int width, unsigned int height, const vpHomogeneousMatrix &cMo, const vpCameraParameters &cam, bool displayFullModel=false) VP_OVERRIDE
virtual void setScanLineVisibilityTest(const bool &v) VP_OVERRIDE
virtual void resetTracker() VP_OVERRIDE
vpColVector m_w_depthNormal
Robust weights.
vpColVector m_error_depthNormal
(s - s*)
virtual void initFaceFromCorners(vpMbtPolygon &polygon) VP_OVERRIDE
virtual void setCameraParameters(const vpCameraParameters &camera) VP_OVERRIDE
virtual void initFaceFromLines(vpMbtPolygon &polygon) VP_OVERRIDE
virtual void computeVVSInit() VP_OVERRIDE
void computeVisibility(unsigned int width, unsigned int height)
void updateMovingEdgeWeights()
vpColVector m_w_edge
Robust weights.
virtual void computeVVSInteractionMatrixAndResidu() VP_OVERRIDE
virtual void setScanLineVisibilityTest(const bool &v) VP_OVERRIDE
void computeProjectionError(const vpImage< unsigned char > &_I)
virtual void testTracking() VP_OVERRIDE
virtual void setNearClippingDistance(const double &dist) VP_OVERRIDE
virtual void computeVVSWeights()
vpColVector m_error_edge
(s - s*)
virtual void computeVVSInit() VP_OVERRIDE
virtual void initFaceFromLines(vpMbtPolygon &polygon) VP_OVERRIDE
void trackMovingEdge(const vpImage< unsigned char > &I)
virtual void setFarClippingDistance(const double &dist) VP_OVERRIDE
virtual void initFaceFromCorners(vpMbtPolygon &polygon) VP_OVERRIDE
void computeVVSFirstPhaseFactor(const vpImage< unsigned char > &I, unsigned int lvl=0)
void updateMovingEdge(const vpImage< unsigned char > &I)
virtual void setClipping(const unsigned int &flags) VP_OVERRIDE
void reinitMovingEdge(const vpImage< unsigned char > &I, const vpHomogeneousMatrix &_cMo)
virtual std::vector< std::vector< double > > getModelForDisplay(unsigned int width, unsigned int height, const vpHomogeneousMatrix &cMo, const vpCameraParameters &cam, bool displayFullModel=false) VP_OVERRIDE
void resetTracker() VP_OVERRIDE
virtual void initCylinder(const vpPoint &p1, const vpPoint &p2, double radius, int idFace=0, const std::string &name="") VP_OVERRIDE
void setMovingEdge(const vpMe &me)
virtual void setCameraParameters(const vpCameraParameters &cam) VP_OVERRIDE
virtual void initCircle(const vpPoint &p1, const vpPoint &p2, const vpPoint &p3, double radius, int idFace=0, const std::string &name="") VP_OVERRIDE
vpColVector m_factor
Edge VVS variables.
void visibleFace(const vpImage< unsigned char > &_I, const vpHomogeneousMatrix &_cMo, bool &newvisibleline)
void initMovingEdge(const vpImage< unsigned char > &I, const vpHomogeneousMatrix &_cMo, const bool &useInitRange=true)
virtual void setUseKltTracking(const std::string &name, const bool &useKltTracking)
virtual std::vector< std::vector< double > > getFeaturesForDisplay()
virtual void setCameraParameters(const vpCameraParameters &camera) VP_OVERRIDE
virtual double getGoodMovingEdgesRatioThreshold() const
virtual int getTrackerType() const
virtual void setOgreVisibilityTest(const bool &v) VP_OVERRIDE
std::map< std::string, TrackerWrapper * > m_mapOfTrackers
virtual std::pair< std::vector< vpPolygon >, std::vector< std::vector< vpPoint > > > getPolygonFaces(bool orderPolygons=true, bool useVisibility=true, bool clipPolygon=false) VP_OVERRIDE
virtual void setKltMaskBorder(const unsigned int &e)
virtual void setProjectionErrorComputation(const bool &flag) VP_OVERRIDE
vpMbGenericTracker()
json namespace shortcut
virtual void setDisplayFeatures(bool displayF) VP_OVERRIDE
unsigned int m_nb_feat_edge
Number of moving-edges features.
virtual void setKltThresholdAcceptation(double th)
std::map< std::string, vpHomogeneousMatrix > m_mapOfCameraTransformationMatrix
virtual double getKltThresholdAcceptation() const
virtual double computeCurrentProjectionError(const vpImage< unsigned char > &I, const vpHomogeneousMatrix &_cMo, const vpCameraParameters &_cam) VP_OVERRIDE
virtual void getCameraParameters(vpCameraParameters &camera) const VP_OVERRIDE
virtual void getLcircle(std::list< vpMbtDistanceCircle * > &circlesList, unsigned int level=0) const
virtual void setDepthDenseFilteringMaxDistance(double maxDistance)
virtual std::list< vpMbtDistanceKltCylinder * > & getFeaturesKltCylinder()
virtual void setProjectionErrorDisplayArrowLength(unsigned int length) VP_OVERRIDE
virtual vpHomogeneousMatrix getPose() const
virtual std::vector< cv::Point2f > getKltPoints() const
virtual void initCircle(const vpPoint &p1, const vpPoint &p2, const vpPoint &p3, double radius, int idFace=0, const std::string &name="") VP_OVERRIDE
virtual void initFromPose(const vpImage< unsigned char > &I, const vpHomogeneousMatrix &cMo) VP_OVERRIDE
virtual void setGoodMovingEdgesRatioThreshold(double threshold)
virtual void initFaceFromCorners(vpMbtPolygon &polygon) VP_OVERRIDE
virtual vpMbtPolygon * getPolygon(unsigned int index) VP_OVERRIDE
friend void from_json(const nlohmann::json &j, TrackerWrapper &t)
Load configuration settings from a JSON object for a tracker wrapper.
virtual void setDepthDenseFilteringMinDistance(double minDistance)
virtual void setUseEdgeTracking(const std::string &name, const bool &useEdgeTracking)
virtual void setMinPolygonAreaThresh(double minPolygonAreaThresh, const std::string &name="") VP_OVERRIDE
virtual void setLod(bool useLod, const std::string &name="") VP_OVERRIDE
virtual void setDepthNormalSamplingStep(unsigned int stepX, unsigned int stepY)
vpColVector m_w
Robust weights.
virtual void setNbRayCastingAttemptsForVisibility(const unsigned int &attempts) VP_OVERRIDE
virtual void saveConfigFile(const std::string &settingsFile) const
virtual std::string getReferenceCameraName() const
virtual std::map< std::string, int > getCameraTrackerTypes() const
virtual void loadConfigFileJSON(const std::string &configFile, bool verbose=true)
virtual void testTracking() VP_OVERRIDE
unsigned int m_nb_feat_depthDense
Number of depth dense features.
virtual void setDepthNormalPclPlaneEstimationMethod(int method)
virtual void computeProjectionError()
virtual void reInitModel(const vpImage< unsigned char > &I, const std::string &cad_name, const vpHomogeneousMatrix &cMo, bool verbose=false, const vpHomogeneousMatrix &T=vpHomogeneousMatrix())
virtual void setUseDepthDenseTracking(const std::string &name, const bool &useDepthDenseTracking)
virtual void setMovingEdge(const vpMe &me)
virtual void setDepthNormalPclPlaneEstimationRansacMaxIter(int maxIter)
virtual void setDepthNormalPclPlaneEstimationRansacThreshold(double threshold)
virtual void setAngleDisappear(const double &a) VP_OVERRIDE
virtual void setFeatureFactors(const std::map< vpTrackerType, double > &mapOfFeatureFactors)
virtual void computeVVSInit() VP_OVERRIDE
virtual void init(const vpImage< unsigned char > &I) VP_OVERRIDE
virtual void getLcylinder(std::list< vpMbtDistanceCylinder * > &cylindersList, unsigned int level=0) const
virtual std::vector< vpImagePoint > getKltImagePoints() const
virtual void setDepthDenseSamplingStep(unsigned int stepX, unsigned int stepY)
virtual std::vector< std::string > getCameraNames() const
virtual void setDepthDenseFilteringMethod(int method)
virtual void track(const vpImage< unsigned char > &I) VP_OVERRIDE
vpColVector m_weightedError
Weighted error.
virtual std::list< vpMbtDistanceKltPoints * > & getFeaturesKlt()
virtual void loadModel(const std::string &modelFile, bool verbose=false, const vpHomogeneousMatrix &T=vpHomogeneousMatrix()) VP_OVERRIDE
vpMatrix m_L
Interaction matrix.
virtual void setKltOpencv(const vpKltOpencv &t)
virtual void setOptimizationMethod(const vpMbtOptimizationMethod &opt) VP_OVERRIDE
virtual void setDepthNormalFaceCentroidMethod(const vpMbtFaceDepthNormal::vpFaceCentroidType &method)
virtual void computeVVSWeights()
virtual void loadConfigFileXML(const std::string &configFile, bool verbose=true)
virtual void setMask(const vpImage< bool > &mask) VP_OVERRIDE
virtual void setDepthDenseFilteringOccupancyRatio(double occupancyRatio)
virtual unsigned int getKltMaskBorder() const
vpColVector m_error
(s - s*)
virtual void setReferenceCameraName(const std::string &referenceCameraName)
virtual void setMinLineLengthThresh(double minLineLengthThresh, const std::string &name="") VP_OVERRIDE
virtual void setClipping(const unsigned int &flags) VP_OVERRIDE
std::map< vpTrackerType, double > m_mapOfFeatureFactors
Ponderation between each feature type in the VVS stage.
double m_thresholdOutlier
virtual void computeVVS(std::map< std::string, const vpImage< unsigned char > * > &mapOfImages)
virtual std::list< vpMbtDistanceCircle * > & getFeaturesCircle()
virtual void getLline(std::list< vpMbtDistanceLine * > &linesList, unsigned int level=0) const
virtual void setTrackerType(int type)
virtual void computeVVSInteractionMatrixAndResidu() VP_OVERRIDE
unsigned int m_nb_feat_klt
Number of klt features.
virtual void initFromPoints(const vpImage< unsigned char > &I1, const vpImage< unsigned char > &I2, const std::string &initFile1, const std::string &initFile2)
virtual unsigned int getNbPoints(unsigned int level=0) const
virtual void initCylinder(const vpPoint &p1, const vpPoint &p2, double radius, int idFace=0, const std::string &name="") VP_OVERRIDE
virtual vpKltOpencv getKltOpencv() const
virtual void setGoodNbRayCastingAttemptsRatio(const double &ratio) VP_OVERRIDE
virtual int getKltNbPoints() const
unsigned int m_nb_feat_depthNormal
Number of depth normal features.
virtual void setOgreShowConfigDialog(bool showConfigDialog) VP_OVERRIDE
virtual void initClick(const vpImage< unsigned char > &I1, const vpImage< unsigned char > &I2, const std::string &initFile1, const std::string &initFile2, bool displayHelp=false, const vpHomogeneousMatrix &T1=vpHomogeneousMatrix(), const vpHomogeneousMatrix &T2=vpHomogeneousMatrix())
virtual vpMe getMovingEdge() const
virtual unsigned int getNbPolygon() const VP_OVERRIDE
virtual void setScanLineVisibilityTest(const bool &v) VP_OVERRIDE
virtual void resetTracker() VP_OVERRIDE
virtual void setPose(const vpImage< unsigned char > &I, const vpHomogeneousMatrix &cdMo) VP_OVERRIDE
virtual void initFaceFromLines(vpMbtPolygon &polygon) VP_OVERRIDE
virtual void preTracking(std::map< std::string, const vpImage< unsigned char > * > &mapOfImages, std::map< std::string, pcl::PointCloud< pcl::PointXYZ >::ConstPtr > &mapOfPointClouds)
virtual void setNearClippingDistance(const double &dist) VP_OVERRIDE
virtual ~vpMbGenericTracker() VP_OVERRIDE
virtual void setCameraTransformationMatrix(const std::string &cameraName, const vpHomogeneousMatrix &cameraTransformationMatrix)
virtual void setProjectionErrorDisplayArrowThickness(unsigned int thickness) VP_OVERRIDE
virtual void setUseDepthNormalTracking(const std::string &name, const bool &useDepthNormalTracking)
virtual std::vector< std::vector< double > > getModelForDisplay(unsigned int width, unsigned int height, const vpHomogeneousMatrix &cMo, const vpCameraParameters &cam, bool displayFullModel=false) VP_OVERRIDE
std::string m_referenceCameraName
Name of the reference camera.
virtual vpMbHiddenFaces< vpMbtPolygon > & getFaces() VP_OVERRIDE
virtual void setDepthNormalFeatureEstimationMethod(const vpMbtFaceDepthNormal::vpFeatureEstimationType &method)
virtual void display(const vpImage< unsigned char > &I, const vpHomogeneousMatrix &cMo, const vpCameraParameters &cam, const vpColor &col, unsigned int thickness=1, bool displayFullModel=false) VP_OVERRIDE
virtual void loadConfigFile(const std::string &configFile, bool verbose=true) VP_OVERRIDE
virtual void setProjectionErrorDisplay(bool display) VP_OVERRIDE
virtual unsigned int getClipping() const
virtual std::map< int, vpImagePoint > getKltImagePointsWithId() const
virtual void setAngleAppear(const double &a) VP_OVERRIDE
virtual void setFarClippingDistance(const double &dist) VP_OVERRIDE
Implementation of the polygons management for the model-based trackers.
vpAROgre * getOgreContext()
vpColVector m_error_klt
(s - s*)
vpHomogeneousMatrix ctTc0
virtual void setScanLineVisibilityTest(const bool &v) VP_OVERRIDE
virtual void initCircle(const vpPoint &, const vpPoint &, const vpPoint &, double, int, const std::string &name="") VP_OVERRIDE
void resetTracker() VP_OVERRIDE
virtual void computeVVSInteractionMatrixAndResidu() VP_OVERRIDE
void setCameraParameters(const vpCameraParameters &cam) VP_OVERRIDE
virtual std::vector< std::vector< double > > getModelForDisplay(unsigned int width, unsigned int height, const vpHomogeneousMatrix &cMo, const vpCameraParameters &cam, bool displayFullModel=false) VP_OVERRIDE
void preTracking(const vpImage< unsigned char > &I)
virtual void initCylinder(const vpPoint &, const vpPoint &, double, int, const std::string &name="") VP_OVERRIDE
virtual void initFaceFromCorners(vpMbtPolygon &polygon) VP_OVERRIDE
virtual void computeVVSInit() VP_OVERRIDE
bool postTracking(const vpImage< unsigned char > &I, vpColVector &w)
virtual void reinit(const vpImage< unsigned char > &I)
virtual void setPose(const vpImage< unsigned char > &I, const vpHomogeneousMatrix &cdMo) VP_OVERRIDE
vpColVector m_w_klt
Robust weights.
virtual void initFaceFromLines(vpMbtPolygon &polygon) VP_OVERRIDE
virtual double getNearClippingDistance() const
virtual void setProjectionErrorDisplayArrowLength(unsigned int length)
double m_lambda
Gain of the virtual visual servoing stage.
virtual void setMaxIter(unsigned int max)
double minLineLengthThresholdGeneral
Minimum line length threshold for LOD mode (general setting).
bool m_projectionErrorDisplay
Display gradient and model orientation for projection error computation.
virtual void setOgreShowConfigDialog(bool showConfigDialog)
virtual double getAngleAppear() const
virtual void setMask(const vpImage< bool > &mask)
virtual void getCameraParameters(vpCameraParameters &cam) const
vpImage< unsigned char > m_I
Grayscale image buffer, used when passing color images.
virtual void setDisplayFeatures(bool displayF)
virtual vpHomogeneousMatrix getPose() const
bool useLodGeneral
True if LOD mode is enabled.
double minPolygonAreaThresholdGeneral
Minimum polygon area threshold for LOD mode (general setting).
bool m_computeInteraction
vpMatrix oJo
The Degrees of Freedom to estimate.
vpMatrix covarianceMatrix
Covariance matrix.
double m_initialMu
Initial Mu for Levenberg Marquardt optimization loop.
vpHomogeneousMatrix m_cMo
The current pose.
virtual void computeVVSCheckLevenbergMarquardt(unsigned int iter, vpColVector &error, const vpColVector &m_error_prev, const vpHomogeneousMatrix &cMoPrev, double &mu, bool &reStartFromLastIncrement, vpColVector *const w=nullptr, const vpColVector *const m_w_prev=nullptr)
vpCameraParameters m_cam
The camera parameters.
double m_stopCriteriaEpsilon
Epsilon threshold to stop the VVS optimization loop.
bool useOgre
Use Ogre3d for global visibility tests.
virtual double getAngleDisappear() const
virtual void computeVVSWeights(vpRobust &robust, const vpColVector &error, vpColVector &w)
vpMbHiddenFaces< vpMbtPolygon > faces
Set of faces describing the object.
virtual void setCameraParameters(const vpCameraParameters &cam)
virtual void setAngleDisappear(const double &a)
virtual void setInitialMu(double mu)
virtual void setScanLineVisibilityTest(const bool &v)
virtual void setOgreVisibilityTest(const bool &v)
virtual void computeCovarianceMatrixVVS(const bool isoJoIdentity, const vpColVector &w_true, const vpHomogeneousMatrix &cMoPrev, const vpMatrix &L_true, const vpMatrix &LVJ_true, const vpColVector &error)
vpMbtOptimizationMethod m_optimizationMethod
Optimization method used.
virtual void computeVVSPoseEstimation(const bool isoJoIdentity, unsigned int iter, vpMatrix &L, vpMatrix <L, vpColVector &R, const vpColVector &error, vpColVector &error_prev, vpColVector <R, double &mu, vpColVector &v, const vpColVector *const w=nullptr, vpColVector *const m_w_prev=nullptr)
bool displayFeatures
If true, the features are displayed.
virtual void setProjectionErrorDisplay(bool display)
double angleDisappears
Angle used to detect a face disappearance.
virtual void setLambda(double gain)
virtual void setNearClippingDistance(const double &dist)
bool applyLodSettingInConfig
virtual void setFarClippingDistance(const double &dist)
double distFarClip
Distance for near clipping.
bool m_isoJoIdentity
Boolean to know if oJo is identity (for fast computation).
bool useScanLine
Use Scanline for global visibility tests.
virtual void setProjectionErrorComputation(const bool &flag)
virtual void setClipping(const unsigned int &flags)
double angleAppears
Angle used to detect a face appearance.
virtual void setOptimizationMethod(const vpMbtOptimizationMethod &opt)
virtual void initFromPose(const vpImage< unsigned char > &I, const std::string &initFile)
virtual void setProjectionErrorDisplayArrowThickness(unsigned int thickness)
virtual void setAngleAppear(const double &a)
bool computeCovariance
Flag used to specify if the covariance matrix has to be computed or not.
double distNearClip
Distance for near clipping.
unsigned int m_maxIter
Maximum number of iterations of the virtual visual servoing stage.
bool ogreShowConfigDialog
unsigned int clippingFlag
Flags specifying which clipping to used.
virtual double getFarClippingDistance() const
vpMbHiddenFaces< vpMbtPolygon > m_projectionErrorFaces
Set of faces describing the object, used for projection error.
virtual unsigned int getClipping() const
virtual void loadConfigFile(const std::string &configFile, bool verbose=true)
Implementation of a polygon of the model used by the model-based tracker.
@ TOO_NEAR
Point not tracked anymore, since too near from its neighbor.
@ THRESHOLD
Point not tracked due to the likelihood that is below the threshold, but retained in the ME list.
@ CONTRAST
Point not tracked due to a contrast problem, but retained in the ME list.
@ M_ESTIMATOR
Point detected as an outlier during virtual visual-servoing.
@ NO_SUPPRESSION
Point successfully tracked.
Class that defines a 3D point in the object frame and allows forward projection of a 3D point in the ...
Error that can be emitted by the vpTracker class and its derivatives.
@ notEnoughPointError
Not enough point to track.
@ initializationError
Tracker initialization error.
@ fatalError
Tracker fatal error.
vpVelocityTwistMatrix & buildFrom(const vpTranslationVector &t, const vpRotationMatrix &R)