Обнаружение движений в шахматах по последовательным различиям изображений с помощью инструментов OpenCV - PullRequest
7 голосов
/ 06 мая 2011

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

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

спасибо

1 Ответ

3 голосов
/ 06 мая 2011

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

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

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

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

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

Обнаружение движения фигур

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

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

...