Перейти к содержимому
Compvision.ru
fedor_malashin

"Дрожание" точек при поиске углов шахматной доски

Recommended Posts

Добрый день.

В программе осуществляется поиск углов шахматной доски на фотографии. Для этого используется FindChessboardCorners в C#. По найденным углам строятся линии.

Дело в том, что точки (когда вывожу их все на изображение, и когда только 4 угла), при определении "дрожат". Не знаю, с чем это связано. Пробовал разные флаги для этой функции, пробовал ставить на жесткую подставку - все равно. Есть ли какие-нибудь способы более точного определения с помощью готовых методов в OpenCV? Я пытался сделать следующим образом: Подсчитать медиану всех расстояний между точками вдоль каждой стороны, и применить ее для всех, но это работает только если камера не под наклоном. 

Файл с коротким видео, как это выглядит (я понимаю, что почти все тут это наблюдали при калибровке, но всё же).

for compvision.mp4

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Точки могут дрожать, например, из-за того, что маленькое разрешение, а угол попадает между пикселями. Можно попробовать вызывать cv::findCornersSubpix.

Я когда-то для лицевых точек прмкручивал оптический поток и Калмана.

  • Like 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
12 часа назад, Nuzhny сказал:

Точки могут дрожать, например, из-за того, что маленькое разрешение, а угол попадает между пикселями. Можно попробовать вызывать cv::findCornersSubpix.

Я когда-то для лицевых точек прмкручивал оптический поток и Калмана.

Благодарю, попробую. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Я не в курсе цели трекания шахматки в вашем случае, но если это не для калибровки, то попробуйте эту либу: http://nghiaho.com/?page_id=576

Или фильтруйте уже 6D положение доски. Там все равно решается переопределенная СЛАУ и выдается решение по методу наименьших квадратов. Если делаете сглаживание для каждой точки, выглядеть будет конечно лучше, но точности вряд ли добавит. 

Как компромисс, используйте сглаженное 6D положение и проецируйте обратно на экран измеренные по доске точки модели. 

  • Thanks 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
В 08.11.2019 at 12:11, Smorodov сказал:

Я не в курсе цели трекания шахматки в вашем случае, но если это не для калибровки, то попробуйте эту либу: http://nghiaho.com/?page_id=576

Или фильтруйте уже 6D положение доски. Там все равно решается переопределенная СЛАУ и выдается решение по методу наименьших квадратов. Если делаете сглаживание для каждой точки, выглядеть будет конечно лучше, но точности вряд ли добавит. 

Как компромисс, используйте сглаженное 6D положение и проецируйте обратно на экран измеренные по доске точки модели. 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Можно тогда еще посмотреть Aruco, она встроена в OpenCV.

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
В 07.11.2019 at 21:36, Nuzhny сказал:

Точки могут дрожать, например, из-за того, что маленькое разрешение, а угол попадает между пикселями. Можно попробовать вызывать cv::findCornersSubpix.

Я когда-то для лицевых точек прмкручивал оптический поток и Калмана.

Прошу прощения, что я не ответил в данной теме, хотя задача давно была решена. Я подумал, что будет неправильно не отписаться здесь, так как кто-то может искать решение.  Действительно, данная функция CornerSubPix, при определенных параметрах, помогла полностью устранить дрожание на камере с разрешением 2к на 1.5к. Спасибо всем. 

  • Like 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте учётную запись или войдите для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать учётную запись

Зарегистрируйтесь для создания учётной записи. Это просто!

Зарегистрировать учётную запись

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас


  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу

×