Нахождение сетки в изображении - PullRequest
2 голосов
/ 23 сентября 2011

Имея скриншот игры «match-3» (например, http://www.gameplay3.com/images/games/jewel-quest-ii-01S.jpg),, как правильно найти ограниченную рамку для сетки (таблицы с плитками)? Доска не обязательно должна быть идеальным прямоугольником(как видно на скриншоте), но каждая ячейка полностью квадратная.

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

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

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

1 Ответ

2 голосов
/ 23 сентября 2011

Я бы использовал следующий подход для скриншота:

  1. Найдите углы на изображении, используя, например, детектор краев, похожий на хитрый.
  2. Выполните грубое преобразование линии.Это должно очень хорошо работать на краевом изображении.
  3. Если у вас есть некоторая информация о размере плиток, вы можете устранить ложноположительные линии, используя некую пространственную модель сетки (например, линии, имеющие только небольшой уголна ось x / y изображения и / или расстояние / угол границ плиток.
  4. Определение границ плиток под найденными линиями неровностей путем поиска краев, найденных canny под / рядом с линиями.

Какую реализацию грубого преобразования вы использовали? Как вы обрабатывали изображение?

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

Пример детектора лица OpenCV Haar

Другой способ машинного обучения будетследовать гистограмме ориентированных градиентов (Hog) в сочетании с машиной опорных векторов (SVM).Пример находится здесь:

Пример HOG

Вы можете найти общую информацию об обнаружении HoG по адресу:

Обнаружение свиньи

...