Jump to content
Compvision.ru
fedor_malashin

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

Recommended Posts

Добрый день.

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

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

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

for compvision.mp4

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites
12 часа назад, Nuzhny сказал:

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

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

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

Share this post


Link to post
Share on other sites

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

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

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

  • Thanks 1

Share this post


Link to post
Share on other sites
В 08.11.2019 at 12:11, Smorodov сказал:

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

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

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

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

Share this post


Link to post
Share on other sites

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

 

 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now


  • Recently Browsing   0 members

    No registered users viewing this page.

×