Создать массив из изображения шахматной доски - PullRequest
0 голосов
/ 24 сентября 2019

По сути, я работаю над роботом, который будет играть в шашки.Над платой прикреплена камера, которая подает картинки (или даже видеоматериал, но я думаю, что это всего лишь серия изображений, и, поскольку шашки - это не очень быстрая игра, я могу просто делать снимок каждые несколько секунд и идти оттуда)

Мне нужно найти способ перевести визуальную доску в, например, 2-мерный массив для подачи в ИИ для вычисления перемещений роботов.

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

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

Мой вопрос: какТеперь я могу комбинировать эти вещи, которые у меня есть, и в результате получить некоторый тип массива, из которого я могу вычесть информацию, по которой в квадратах мои фигуры?Например, как мне построить массив 2d (или подключить любой массив 8x8) к изображению доски с линиями и / или масками красных / зеленых плиток?Я думаю, мне нужно сделать какой-то тип калибровки?И, во-вторых, есть ли способ как-то наложить маски, чтобы я знал, какие фигуры в каких квадратах?

Ответы [ 2 ]

1 голос
/ 24 сентября 2019

Ну, во-первых, помните, что шахматы всегда начинаются с одинаковых фигур на одних и тех же позициях, например, черный конь начинается с 8-B, который может быть [1] [7] в вашем 2D-массиве.На вашем месте я бы начал с двухмерного массива с начальными позициями всех шахматных фигур.

Относительно того, где вы знаете, какие фигуры: вам не нужно распознавать сами фигуры.Я бы на вашем месте обнаружил пустые места на шахматной доске, что на самом деле довольно просто по сравнению с распознаванием различных шахматных фигур.

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

Редактировать:

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

0 голосов
/ 25 сентября 2019

На основе либо детектора контуров, либо детектора красных / зеленых квадратов рассчитайте координаты центра каждого квадрата на игровой доске.Например, усредните x-координату левого и правого края квадрата, чтобы получить x-координату центра квадрата.Аналогично, усредните y-координату верхнего и нижнего края, чтобы получить y-координату центра.

Также возможно найти верхний, левый, нижний и правый край доски, а затем интерполировать, чтобы найти центры всех квадратов.Стороны каждого квадрата, вероятно, имеют длину более ста пикселей, поэтому вычисления не обязательно должны быть такими точными.

Чтобы определить, где фигуры, переберите список координат центра и посмотритена цвет пикселя.Если это красный или зеленый, квадрат пуст.Если это черный или белый, квадрат имеет соответствующий кусок в нем.Используйте эту информацию, чтобы заполнить массив информацией для AI.

Если изображения зашумлены, может потребоваться усреднить несколько пикселей около центра или усреднить центральный пиксель по нескольким кадрам.

Лучше всего будет работать, если камера находится над центром доски.Если он отклонен в сторону, края не будут параллельными / ортогональными на рисунке, что может усложнить вычисление центров для поиска центров.

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