Определение шахматных движений по последовательным различиям в изображениях с использованием инструментов OpenCV

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

Моя проблема в том, что я не могу надежно обнаружить изменения в данный момент, мой текущий конвейер выглядит следующим образом: вычесть два изображения -> гистограмму выровнять разностное изображение -> вычеркнуть и расширить разностное изображение, чтобы удалить незначительные изменения -> сделать двоичный файл скопировать и выполнить преобразование расстояния -> получить самый большой двоичный объект (соответствующий наибольшему значению после DT и заполнить этот двоичный объект заливкой) -> повторять снова, пока DT не вернет значение, достаточно малое, чтобы игнорировать изменение.

Я кодирую все это в OpenCV и C++. но моя заливка, кажется, всегда либо не заполняет капли, поэтому в большинстве случаев я просто обнаруживаю одно изменение. Я пытался также с помощью cv::inpaint но это тоже не помогло. Итак, мой вопрос: Я просто использую неправильный подход или каким-то образом Тьюринг может сделать обнаружение изменений более надежным. В первом случае люди могли бы предложить альтернативные маршруты, предпочтительно кодируемые в C++/Python и / или OpenCV в разумные сроки?

Спасибо

1 ответ

Решение

Проблема получения исправления на доске и обнаружения движения фигур может быть решена независимо, если предположить, что вы не перемещаете доску, а также перемещаете фигуры.

Несколько мыслей о том, как бы я подошел к этому:

Определение ориентации доски

Вы должны быть в состоянии обращаться с доской, которая поворачивается на месте, а также перемещается, пока поддерживается некоторый угол, который позволяет вам видеть фигуры. Было бы полезно, если бы на доске было что-то, что вы могли бы легко идентифицировать (например, маркер на каждом углу), чтобы, если вы потеряете ориентацию (например, кто-то полностью отодвигает доску от камеры), вы могли легко найти это снова.

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

Обнаружение движения частей

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

Возможно, вам не удастся распознать форму каждой фигуры, если вы предполагаете непрерывность (то есть, что вы отслеживали все движения с момента первоначального расположения доски, что хорошо известно).

Другие вопросы по тегам