Какой простой и эффективный метод извлечения сегментов линии из простого 2D-изображения?

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

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

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

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

Наконец, вот образец изображения:

enter image description here

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

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

5
задан zergylord 10 August 2011 в 08:49
поделиться