diff c/Motion.cpp @ 147:0089fb29cd26

added projection of points and reprojection for display
author Nicolas Saunier <nicolas.saunier@polymtl.ca>
date Tue, 30 Aug 2011 13:38:31 -0400
parents a3532db00c28
children cde87a07eb58
line wrap: on
line diff
--- a/c/Motion.cpp	Tue Aug 30 13:04:36 2011 -0400
+++ b/c/Motion.cpp	Tue Aug 30 13:38:31 2011 -0400
@@ -9,8 +9,8 @@
 using namespace std;
 using namespace cv;
 
-FeatureTrajectory::FeatureTrajectory(const int& frameNum, const cv::Point2f& p) {
-  addPoint(frameNum, p);
+FeatureTrajectory::FeatureTrajectory(const int& frameNum, const cv::Point2f& p, const Mat& homography) {
+  addPoint(frameNum, p, homography);
 }
 
 bool FeatureTrajectory::smallDisplacement(const unsigned int& nDisplacements, const float& minTotalFeatureDisplacement) const {
@@ -42,8 +42,11 @@
   return result;
 }
 
-void FeatureTrajectory::addPoint(const int& frameNum, const Point2f& p) {
-  positions.add(frameNum, p);
+void FeatureTrajectory::addPoint(const int& frameNum, const Point2f& p, const Mat& homography) {
+  Point2f pp = p;
+  if (!homography.empty())
+    pp = project(p, homography);
+  positions.add(frameNum, pp);
   computeMotionData(frameNum);
   assert(positions.size() == displacementDistances.size()+1);
   assert(positions.size() == velocities.size()+1);
@@ -62,10 +65,17 @@
 
 #ifdef USE_OPENCV
 /// \todo add option for anti-aliased drawing, thickness
-void FeatureTrajectory::draw(Mat& img, const Scalar& color) const {
-  Point2f p1 = positions[0];
+void FeatureTrajectory::draw(Mat& img, const Mat& homography, const Scalar& color) const {
+  Point2f p1, p2;
+  if (!homography.empty())
+    p1 = project(positions[0], homography);
+  else
+    p1 = positions[0];
   for (unsigned int i=1; i<positions.size(); i++) {
-    Point2f p2 = positions[i];
+    if (!homography.empty())
+      p2 = project(positions[i], homography);
+    else
+      p2 = positions[i];
     line(img, p1, p2, color, 1);
     p1 = p2;
   }