Распознавание кусочков тетриса в С - PullRequest
2 голосов
/ 20 мая 2009

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

Как я могу сделать что-то подобное, используя C?

Ответы [ 4 ]

1 голос
/ 21 мая 2009

Глядя на фигуры, данные для фигур тетриса в Википедии, называемые «I, J, L, O, S, T, Z», кажется, что соотношения сторон ограничительной рамки (легко найти, учитывая двоичный изображение и в) показывают, есть ли у вас I (4: 1) или O (1: 1); другие формы 2: 3.

Чтобы определить, какая из оставшихся фигур у вас есть (J, L, S, T или Z), похоже, что вы могли бы собрать длину и положение краев формы, которые падают на края ограничивающего прямоугольника. Таким образом, T будет показывать 3 и 1 по 3 сторонам и 1 и 1 по 2 сторонам. Отслеживание позиций помогает отличить J от L, S от Z.

1 голос
/ 20 мая 2009

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

1 голос
/ 20 мая 2009

Предполагая, что вы уже загрузили изображения в массивы, как насчет использования регулярных выражений? Вам не нужно точное соответствие формы, но примерно, так почему бы не попробовать!

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

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

  1. Вам нужна процедура, которая может создать новую фигуру из исходного рисунка / повернутой фигуры. (примечание: я имею в виду квадрат 4х4 - все его ячейки)
  2. Вам нужна подпрограмма, которая проверяет, соответствует ли фрагмент области из 2D-изображения в позиции x, y - область соответствия будет иметь углы (x-2, y-2, x + 1, y + 1). 1014 *
  3. Поиск выполняется путем проверки соответствия каждой позиции изображения (x, y).

Поскольку вы должны использовать параллелизм, вы можете создать 4 потока и назначить каждому потоку различный поворот для поиска.

1 голос
/ 20 мая 2009

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

...