Как повысить точность оценки Affine2D (или estimageRigidTransform) в OpenCV? - PullRequest
2 голосов
/ 21 мая 2019

У меня есть два набора точек, один из времени t-1 и текущего времени t.Первый набор был сгенерирован с использованием goodFeaturesToTrack, а последний с использованием calcOpticalFlowPyrLK().Используя эти два набора точек, я затем оцениваю матрицу преобразования через estimateAffine2DPartial(), чтобы отслеживать ее масштаб и вращение.Ниже приведен фрагмент кода:

// 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).Я, честно говоря, озадачен тем, где виновник, но моё главное подозрение - возможно, размер моего окна для оптического потока может быть слишком маленьким или слишком большим.Однако изменение размера окна, похоже, не помогло, положение моего объекта все еще точно, но предполагаемое вращение (и масштаб) ухудшилось.Кто-нибудь может надеяться пролить свет на это?

С уважением и благодарностью.

РЕДАКТИРОВАТЬ: Изображения, прикрепленные к проблеме дрейфа

Starting Frame

Стартовая рамка

First few frames -- Rotation OK

Первые несколько кадров - Вращение ОК

Z-Rotation Drift occurs -- See Anchor Line

Z-вращениеПроисходит дрейф - см. Линия привязки сместилась к красному прямоугольнику.

1 Ответ

0 голосов
/ 21 мая 2019

трекер Lucas Kanade нуждается в большем количестве функций. Думаю, предоставленный вами шаблон отслеживания недостаточно хорош

(1) Попробуйте с другими многофункциональными реальными изображениями? напр. Изображение шаблона отслеживания OpenCV feautre (2) исправить масштаб. Поскольку вы делаете симуляцию, вы можете сначала попытаться закрепить размер.

calcOpticalFlowPyrLK широко используется в визуальных исследованиях оценки инерционного состояния. такие как Полу прямая визуальная одометрия или VINSMONO. Вы можете попытаться найти код внутри этих проектов, чтобы увидеть, как другие люди играют с функцией и параметрами

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...