Есть ли супер быстрый алгоритм поиска ЛИНИЙ на картинке? - PullRequest
21 голосов
/ 08 апреля 2010

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

CG сгенерированная ванная комната http://www.de -viz.ru / каталог / new2 / Holm / hvannaya.jpg

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

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

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

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

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

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

Ответы [ 4 ]

16 голосов
/ 08 апреля 2010

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

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

Минимальная сложность большинства алгоритмов обработки изображений составляет не менее 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
5 голосов
/ 08 апреля 2010

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

1 голос
/ 11 апреля 2011

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

0 голосов
/ 08 апреля 2010

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

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

...