Подтвердить что ты не робот

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

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

CG generated bathroom
(источник: de-viz.ru)

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

Black & White CG generated bathroom with some red lines  between tiles
(источник: narod.ru)

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

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

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

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

4b9b3361

Ответ 1

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

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

Минимальная сложность большинства алгоритмов обработки изображений составляет не менее 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#2
  4. http://wayback.archive.org/web/20090304153603/http://hdebruijn.soo.dto.tudelft.nl/jaar2006/alders.htm

Ответ 3

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

Ответ 4

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

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