【发布时间】:2019-10-07 07:52:56
【问题描述】:
我有两组点,一组来自时间 t-1 和当前时间 t。第一组是使用goodFeaturesToTrack 生成的,而后者是使用calcOpticalFlowPyrLK() 生成的。使用这两组点,然后我通过estimateAffine2DPartial() 估计一个变换矩阵,以便跟踪它的缩放和旋转。代码sn-p如下:
// Precompute image pyramids
maxLvl = cv::buildOpticalFlowPyramid(_imgPrev, imPyr1, _winSize, maxLvl, true);
maxLvl = cv::buildOpticalFlowPyramid(tmpImg, imPyr2, _winSize, maxLvl, true);
// Optical flow call for tracking pixels
cv::calcOpticalFlowPyrLK(imPyr1, imPyr2, _currentPoints, nextPts, status, err, _winSize, maxLvl, _terminationCriteria, 0, 0.000001);
// Get transformation matrix between the two data sets
cv::Mat H = cv::estimateAffinePartial2D(_currentPoints, nextPts, inlier_mask, cv::RANSAC, 10.0, 2000, 0.99);
使用 H,然后我使用 perspectiveTransform() 映射我的掩蔽点。前几十帧的结果似乎是准确的,直到我注意到当我正在跟踪的对象继续旋转时(通常当旋转变为 > M_PI)时发生了一些漂移(在旋转方面)。老实说,我不知道罪魁祸首在哪里,但我的主要怀疑可能是我的光流窗口尺寸可能太小或太大。但是,调整窗口大小似乎没有帮助,我的对象的位置仍然准确,但估计的旋转(和比例)变得更糟。任何人都可以希望对此有所了解吗?
热烈的问候和感谢。
编辑:附加图片以显示漂移问题
起始帧
前几帧——旋转OK
Z-Rotation Drift 发生 - 看到锚线已向红色矩形漂移。
【问题讨论】: