diff c/feature-based-tracking.cpp @ 933:8ac7f61c6e4f

major rework of homography calibration, no in ideal points if correcting for distortion
author Nicolas Saunier <nicolas.saunier@polymtl.ca>
date Fri, 14 Jul 2017 02:11:21 -0400
parents dbd81710d515
children 6c5ce3ec497e
line wrap: on
line diff
--- a/c/feature-based-tracking.cpp	Fri Jul 14 00:12:03 2017 -0400
+++ b/c/feature-based-tracking.cpp	Fri Jul 14 02:11:21 2017 -0400
@@ -115,7 +115,7 @@
   if (params.undistort) {
     intrinsicCameraMatrix = ::loadMat(params.intrinsicCameraFilename, " ");
     Size undistortedVideoSize = Size(static_cast<int>(round(videoSize.width*params.undistortedImageMultiplication)), static_cast<int>(round(videoSize.height*params.undistortedImageMultiplication)));
-    newIntrinsicCameraMatrix = getDefaultNewCameraMatrix(intrinsicCameraMatrix, undistortedVideoSize, true);//getOptimalNewCameraMatrix(intrinsicCameraMatrix, params.distortionCoefficients, videoSize, 1, undistortedVideoSize);//, 0, true);
+    newIntrinsicCameraMatrix = getDefaultNewCameraMatrix(intrinsicCameraMatrix, undistortedVideoSize, true);// for some reason, it's double type //getOptimalNewCameraMatrix(intrinsicCameraMatrix, params.distortionCoefficients, videoSize, 1, undistortedVideoSize);//, 0, true);
     initUndistortRectifyMap(intrinsicCameraMatrix, params.distortionCoefficients, Mat::eye(3,3, CV_32FC1) /* 0 ?*/, newIntrinsicCameraMatrix, undistortedVideoSize, CV_32FC1, map1, map2);
     
     cout << "Undistorted width=" << undistortedVideoSize.width <<
@@ -167,7 +167,7 @@
       /// \todo try calcOpticalFlowFarneback
 
       if (params.undistort)
-	undistortPoints(currPts, undistortedPts, intrinsicCameraMatrix, params.distortionCoefficients, noArray(), newIntrinsicCameraMatrix);
+	undistortPoints(currPts, undistortedPts, intrinsicCameraMatrix, params.distortionCoefficients);
       else
 	undistortedPts =currPts;
       
@@ -208,15 +208,14 @@
       currPts = trackedPts;
       assert(currPts.size() == featurePointMatches.size());
       saveFeatures(lostFeatures, *trajectoryDB, "positions", "velocities");
-	
+      
       if (params.display) {
 	if (params.undistort)
 	  remap(frame, displayFrame, map1, map2, interpolationMethod, BORDER_CONSTANT, 0.);
 	 else
 	  displayFrame = frame.clone();
-	
 	BOOST_FOREACH(FeaturePointMatch fp, featurePointMatches)
-	  fp.feature->draw(displayFrame, invHomography, Colors::red());
+	  fp.feature->draw(displayFrame, invHomography, newIntrinsicCameraMatrix, Colors::red());
       }
     }
     
@@ -228,7 +227,7 @@
 	  featureMask.at<uchar>(i,j)=0;
     goodFeaturesToTrack(currentFrameBW, newPts, params.maxNFeatures, params.featureQuality, params.minFeatureDistanceKLT, featureMask, params.blockSize, params.useHarrisDetector, params.k);
     if (params.undistort)
-      undistortPoints(newPts, undistortedPts, intrinsicCameraMatrix, params.distortionCoefficients, noArray(), newIntrinsicCameraMatrix);
+      undistortPoints(newPts, undistortedPts, intrinsicCameraMatrix, params.distortionCoefficients);
     else
       undistortedPts = newPts;