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

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

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

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

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

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

enter image description here

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

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

Ответы [ 2 ]

4 голосов
/ 10 августа 2011

Взгляните на алгоритм детектора сегментов линии .

Вот что они делают:

enter image description hereenter image description here

Вы можетенайдите впечатляющее видео внизу страницы.

Существует реализация C (которая работает с компиляторами C ++), которая работает "из коробки".Есть только один или два файла, и никаких дополнительных зависимостей

Но, имейте в виду, алгоритм находится под лицензией GNU Allegro GPL.

1 голос
/ 25 ноября 2013

Также ознакомьтесь с EDlines http://ceng.anadolu.edu.tr/cv/EDLines/

Очень быстрый и очень полезный вывод

...