Opencv: Лучший способ обнаружить углы на шахматной доске

ПРЕДПОСЫЛКИ

Итак, я создаю программу, которая распознает шахматные движения. До сих пор я реализовал множество алгоритмов для достижения наилучших результатов. То, что я нашел до сих пор, состоит в том, что комбинация неискаженного изображения (с использованием неискаженного), затем применение алгоритма выравнивания гистограммы и, наконец, алгоритм goodFeaturesToTrack (я считаю, что это лучше, чем обнаружение угла Harris) дает довольно приличный Результаты. Цель здесь состоит в том, чтобы каждый угол каждого квадрата учитывался точкой. Таким образом, когда я применяю обнаружение canny edge, я могу обрабатывать отдельные квадраты.

Пример

enter image description here

ЧТО Я СЧИТАЮТ

http://www.nandanbanerjee.com/index.php?option=com_content&view=article&id=71:buttercup-chess-robot&catid=78&Itemid=470

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

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

Вопрос

Как вы можете видеть, точки довольно точны на большинстве квадратов (хотя есть случайные точки, которые не делают то, что я хочу). Мой вопрос в том, как вы думаете, лучший способ найти все углы на шахматной доске (я открыт для всех идей), и вы могли бы дать мне несколько подробное описание (достаточно, чтобы направить меня в правильном направлении или больше, если вы выберете:)? Кроме того, (и это второстепенный вопрос) есть ли у вас какие-либо рекомендации относительно того, как действовать, чтобы лучше всего распознать ход? Я пытаюсь реализовать несколько способов сделать это, и я собираюсь сравнить методы для получения наилучших результатов! Спасибо.