18

Так что у меня изображение как этотЕсть ли супер быстрый алгоритм поиска LINES на картинке?

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

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

Black & White CG generated bathroom with some red lines between tiles http://superior0.narod.ru/lines.jpg

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

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

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

Есть ли такой алгоритм? (super duper fast =)

+0

Не могли бы вы отметить линии, которые вы хотите найти?Что значит «dalles»? Плитки? – Jacob

+0

dalles = Плитки в моем словаре ...) да) Я хочу, например, ВСЕ прямые линии шириной менее 25 пикселей и минимальной длиной 100 пикселей. – Rella

+0

первая связь мертв. – hippietrail

ответ

14

Вы должны использовать сложные методы обработки изображений, такие как Канни Эдж Detection, обнаружение края Marr-Hildreth, гауссовой фильтрации и преобразования Хока и т.д.

Но существование «супер быстрый» метод очень вряд ли.

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

Ссылка 2 требует авторизации, а ссылка 4 - 404'd. Спасибо за других –

+1

А я вижу, что мой отец связан [4], я дам ему знать. :-) Лучшая ссылка для этого: http://www.alternatievewiskunde.nl/jaar2006/delphi.htm, где вы также можете найти исходный код и другие материалы. – atlaste

5

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

+0

Hough Transform довольно медленный ... И мне нужно работать с видео в реальном времени 2k ... Взгляд в Radon теперь ... – Rella

+0

..не, если вы настроите его на вашу конкретную проблему. Вы можете предварительно вычислить некоторые математические таблицы, чтобы повысить производительность, если немного уменьшить точность. – JBRWilkinson

0

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

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

+0

Не нужно преобразовывать в YCbCr, если все, что вам нужно, - это значение интенсивности. – ergosys

1

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

Смежные вопросы