Mercurial Hosting > traffic-intelligence
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;