Есть ли супер быстрый алгоритм поиска ЛИНИЙ на картинке?

Итак, у меня есть изображение, как это

http://www.de-viz.ru/catalog/new2/Holm/hvannaya.jpg

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

Черно-белая компьютерная графика в ванной комнате с красными линиями между плитками http://superior0.narod.ru/lines.jpg

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

Таким образом, на этой картинке, чтобы найти все линии между плитками и 2 черными линиями сверху.

Поэтому мне нужен алгоритм для супер быстрого поиска прямых линий разных цветов на картинке.

Есть ли такой алгоритм? (супер пупер быстро =)

4 ответа

Решение

Вам необходимо использовать сложные методы обработки изображений, такие как обнаружение краев Канни, обнаружение краев Марра-Хилдрета, фильтрация Гаусса и преобразование Хафа и т. Д.

Но существование "супер быстрого" метода маловероятно.

Минимальная сложность большинства алгоритмов обработки изображений составляет не менее O(N^2),

Под "супер быстрым" я имею в виду самое большее O(1);)

Некоторые ссылки, которые могут помочь:

  1. http://www.sci.utah.edu/~cscheid/spr05/imageprocessing/project4/
  2. http://www.contrib.andrew.cmu.edu/~suppe/mobot/
  3. http://www.dunwich.org/baptiste/sic/ecms/ecpublis.html
  4. http://wayback.archive.org/web/20090304153603/http://hdebruijn.soo.dto.tudelft.nl/jaar2006/alders.htm

Я думаю, что вам нужно преобразование Хафа или преобразование Радона. Прочитайте статьи, которые я связал, и не стесняйтесь задавать любые вопросы:)

Рассмотрим алгоритм контурных точек, описанный в http://outliner.codeplex.com/ Он создаст описанные вектором ребра в виде кривых Безье, организованных штрихами. Вам нужно приложить некоторые усилия, чтобы выбрать наиболее прямые удары (конечные точки готовы к использованию). Этот алгоритм довольно быстрый, но не суперский.

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

Да, и если вы сделаете это, вы, вероятно, захотите преобразовать изображение в YCbCr и просто использовать компонент luma (Y). Это также быстрая операция

Другие вопросы по тегам