В частности, я пытаюсь извлечь все соответствующие отрезки из скриншотов игры «астероиды».Я рассмотрел различные методы обнаружения краев, но ни один из них не подходит для моей проблемы по двум причинам:
Они обнаруживают гладкие контуры, тогда как мне просто нужно обнаружить отрезки прямых линийи только в пределах определенного диапазона длины.Теперь эти ограничения должны значительно облегчить мою задачу по сравнению с обычным случаем, но я не хочу просто использовать детектор по краям с выдувными краями, а затем очищать результат изогнутых линий, поскольку это будет непомерно дорого.Скорость имеет первостепенное значение для моих целей.
Они выводят измененное изображение, где края подсвечиваются, тогда как мне нужен набор пиксельных координат, отображающих конечные точки обнаруженных сегментов линии.Альтернативно, список всех пикселей, включенных в каждый сегмент, также будет работать.
У меня есть предположение, что одно из возможных решений будет включать грубое преобразование ,но я не знаю, как использовать это, чтобы получить фактическое расположение сегментов линии (то есть конечные точки в пиксельном пространстве).Хотя, даже если бы я это сделал, я понятия не имею, будет ли это самым простым или наиболее эффективным способом ведения дел, отсюда и общая формулировка названия вопроса.
Наконец, вот пример изображения:
Обратите внимание, что все основные линии одинаковы по длине и плотности и что общий контраст изображения очень высок.Я надеюсь, что решение моей проблемы будет использовать эти функции, потому что опять-таки эффективность имеет первостепенное значение.
Одно предостережение: хотя большинство отрезков в этом контексте являются частью многоугольника, не хочу решение, которое опирается на этот факт .