Есть ли супер быстрый алгоритм поиска ЛИНИЙ на картинке?
Итак, у меня есть изображение, как это
http://www.de-viz.ru/catalog/new2/Holm/hvannaya.jpg
Я хочу получить что-то вроде этого (я нарисовал все линии, которые хочу, но я надеюсь, что вы можете понять мою идею)
Мне нужен супер быстрый алгоритм для нахождения всех прямых линий на нем. Я хочу дать алгоритму параметры, такие как минимальная длина и максимальное искажение линии. Я хочу получить относительно координат точек изображения начала и конца линий.
Таким образом, на этой картинке, чтобы найти все линии между плитками и 2 черными линиями сверху.
Поэтому мне нужен алгоритм для супер быстрого поиска прямых линий разных цветов на картинке.
Есть ли такой алгоритм? (супер пупер быстро =)
4 ответа
Вам необходимо использовать сложные методы обработки изображений, такие как обнаружение краев Канни, обнаружение краев Марра-Хилдрета, фильтрация Гаусса и преобразование Хафа и т. Д.
Но существование "супер быстрого" метода маловероятно.
Минимальная сложность большинства алгоритмов обработки изображений составляет не менее O(N^2)
,
Под "супер быстрым" я имею в виду самое большее O(1)
;)
Некоторые ссылки, которые могут помочь:
Я думаю, что вам нужно преобразование Хафа или преобразование Радона. Прочитайте статьи, которые я связал, и не стесняйтесь задавать любые вопросы:)
Рассмотрим алгоритм контурных точек, описанный в http://outliner.codeplex.com/ Он создаст описанные вектором ребра в виде кривых Безье, организованных штрихами. Вам нужно приложить некоторые усилия, чтобы выбрать наиболее прямые удары (конечные точки готовы к использованию). Этот алгоритм довольно быстрый, но не суперский.
Я не знаю, насколько хорошо это будет работать в вашем приложении, но вы можете попробовать какой-нибудь подход к обнаружению краев. Не уверен, как преобразовать эти ребра в векторы, если это то, что вы ищете, но это может быть началом. В любом случае, некоторые из алгоритмов обнаружения ребер (например, дискретный оператор Лапласа) довольно быстро работают на модемных вычислительных архитектурах.
Да, и если вы сделаете это, вы, вероятно, захотите преобразовать изображение в YCbCr и просто использовать компонент luma (Y). Это также быстрая операция