Рекомендуемая техника распознавания образов для шахматной доски

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

Может ли кто-нибудь порекомендовать мне один или несколько методов обработки изображений, которые дадут мне хороший результат?

Условия:

  • Изображение всегда четкое, без шумов, плохого освещения и т. д. (поскольку это скриншот)
  • Я ожидаю очень низкого влияния на производительность компьютера при выполнении 1 изображения в секунду.
  • I've thought of two modes to start the process:
    • Feed the piece shapes to the program (so that it knows what a queen, king etc. looks like)
    • просто дайте программе начальное изображение, содержащее начальную позицию, из которой программа может (после того, как она распознает положение доски) выбрать каждую шахматную фигуру
  • Процесс должен быть относительно простым для понимания, так как я не очень хорошо разбираюсь в методах обработки изображений (пока).
  • I'm not interested in using any specific technology, so technology-agnostic documentation would be ideal (C/C++, C#, Java examples would also be fine).

Спасибо, что нашли время, чтобы прочитать это, и я надеюсь получить некоторые хорошие ответы.


person scripni    schedule 02.07.2012    source источник
comment
Скриншоты с компа? Есть ли причина, по которой вы не просто каким-то образом взаимодействуете с шахматной программой? Это, наверное, было бы намного проще.   -  person BlueRaja - Danny Pflughoeft    schedule 03.07.2012
comment
см. ресурсы wiki.bitplan.com/index.php/PlayChessWithAWebCam/Papers. по вопросу   -  person Wolfgang Fahl    schedule 15.12.2019


Ответы (3)


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

На входных изображениях: "скриншоты" - это неопределенная категория. Можете ли вы предположить, что шахматная доска всегда будет полностью на виду? Будете ли вы иметь несколько просмотров одной и той же доски? Можете ли вы предположить, что никакие части не будут частично или полностью закрыты во всех видах?

По изображаемым объектам и системе захвата: будут ли использоваться одни и те же шахматная доска и фигуры при очень похожем освещении? Будет ли использоваться один и тот же конвейер объектива/камеры/оцифровки?

person Francesco Callari    schedule 02.07.2012
comment
Привет. Для начала я предполагаю, что шахматная доска всегда будет в поле зрения. Существует только одно 2D-представление, которое рендерит браузер/плагин/приложение, так как это снимок экрана шахматной доски, сгенерированной компьютером. Ни одна деталь никогда не будет скрыта, а «система захвата» — это мой монитор, делающий скриншоты, никаких объективов/камер и т. д. - person scripni; 03.07.2012
comment
Ух ты. Ну, а если это неестественные изображения, то проблема сильно упрощается: вероятно, они имеют небольшой и фиксированный набор цветов, поэтому их можно банально пороговать в черно-белые. Что бы я сделал, так это обрезал и проанализировал квадраты один за другим, идентифицировал и отбросил пустые очевидным образом (все их пиксели одинаковы) и сделал какое-то простое сопоставление шаблона с известными формами кусочков. Даже если внутренние изображения фрагментов не предоставляют никакой информации, вам не нужно идентифицировать края, поскольку сами 2D-формы достаточно различительны. - person Francesco Callari; 03.07.2012

Салют Андрей,

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

  1. Сделайте картинку черно-белой, так проще
  2. Возьмите изображение из 1 части и "наведите его на скриншот"
  3. Для каждой ячейки вы вычисляете количество общих пикселей в двух изображениях.
  4. Где у тебя самое большое число там у тебя и кусок

Надеюсь это поможет.

person andrei c    schedule 02.07.2012
comment
Я бы сделал то же самое, поскольку ваши объекты всегда выглядят одинаково. Сделайте снимок экрана для каждой части, жестко закодируйте шаблон (например, в виде растрового изображения), а затем выполните простую сумму ошибок. Побеждает наименьшая ошибка (в идеале она действительно должна быть 0). Должно быть очень легко (и да, черно-белое изображение, желательно без обмена, проще всего). - person SinisterMJ; 07.01.2013

Да иди с Салютом Андреем,

  1. Преобразовать изображение в оттенки серого
  2. Разрезать на 64 квадрата и хранить в массиве
  3. Использование Mat lab может легко идентифицировать части
  4. Цвет можно получить из расчета процентного соотношения количества пикселей (черных пикселей) порог = количество черных пикселей / нет. черных пикселей + нет. белых пикселей. Если значение ur выше порогового значения, то БЕЛОЕ, иначе ЧЕРНОЕ.
person user1866956    schedule 07.01.2013
comment
Это не сработает, потому что вы не будете знать цвет кусочков. - person SmallChess; 14.04.2016