Видные линии, не обнаруженные Hough Transform - PullRequest
7 голосов
/ 30 июня 2011

После запуска детектора краев Canny на изображении я получаю четкие линии.Но функция линии Hough, кажется, пропускает довольно заметные линии при запуске на изображении Canny edgemap.Я держу только вертикальные и горизонтальные линии Хафа (допуск 15 градусов).Появляется множество дополнительных линий, но четко видимые линии, ограничивающие прямоугольники, не выбираются.

Вот фрагмент:

cvCanny( img, canny, 0, 100, 3 );
lines = cvHoughLines2( canny, storage, CV_HOUGH_PROBABILISTIC, 1, CV_PI/180, 35, 20, 10 );

Основное намерение состоит в том, чтобы обнаружить прямоугольные прямоугольники,узлы связанного списка.Однако образец программы squares.c будет обнаруживать только идеальные прямоугольники, если стрелка не касается границы прямоугольника.

Не могли бы вы объяснить, как изменились функции линии Хафа, которые помогут мне получить линии, соответствующиечетко видимые линии на изображении Кэнни Край?

hough

Ответы [ 3 ]

12 голосов
/ 30 июня 2011

( Добавлено: шаг предварительной обработки, предложенный shernshiou . )

Этапы предварительной обработки:

  1. Установка порогаimage,
  2. Использовать подключенный компонент
  3. Из результатов подключенного компонента обнаруживайте и удаляйте небольшие объекты - наборы из четырех цифр ниже и в середине каждого блока.

(Примечание. Этап пороговой обработки - это просто этап предварительной обработки, требуемый подключенным компонентом.)


Если вы хотите обнаруживать только идеально горизонтальныеи вертикальные линии, я предлагаю выполнить горизонтальное и вертикальное усиление края (посредством свертки) до преобразования Хафа.

Это сделает истинные линии более вероятными для "пика" в проекции Хафа и увеличит вероятность того, что линия будет обнаружена OpenCV.

Шаги будут:

  1. Вычисление изображения Кэнни-Края из входных данных
  2. Применение горизонтальной фильтрации Собела к изображению Кэнни-Края
  3. Применение определения линии Хофа на горизонтальном изображении с усилением.
  4. Примените вертикальную фильтрацию Собеля к изображению края Кенни. (Примечание: используйте результат шага 1, а не шага 2)
  5. Применить обнаружение линии Хафа на изображении с краями с вертикальным усилением.
  6. Объедините горизонтальные и вертикальные линии и представьтерезультат.
7 голосов
/ 30 июня 2011

Вы прочитали документацию не так ли?

У меня есть несколько вариантов для вас:

  1. Линии, которые вы пропускаете (особенно самая левая вертикальная линия на крайнем правом прямоугольнике на изображении), довольно короткие.Попробуйте снизить порог (5-я входная переменная cvHoughLines2).Этот порог является просто количеством пикселей, которые должны лежать на линии.По изображению я думаю, что на пропущенных строках действительно меньше 35 пикселей.
  2. 6-я входная переменная указывает минимальную длину строки.Я предполагаю, что это в пикселях, поэтому с 5-м параметром вам нужно 35 пикселей на строке, но вы ищете строки 20 пикселей или больше.То, как вы устанавливаете эту переменную, не работает.Понизьте 5-ую переменную, поднимите эту, если вы находите много бесполезных коротких линий.
  3. Понизьте 7-й параметр, чтобы запретить большие пробелы в ваших строках.Это исключит некоторые наклонные линии.

Короче, попробуйте еще раз с другими значениями для параметров 5,6 и 7.

Я бы попробовал некоторые более низкие значения параметров5 и 7, и аналогичное или немного более высокое значение для 6. Из-за 2 выше 5 всегда должно быть меньше или равно 6, чтобы иметь эффект.7 должно как минимум равняться разнице между 5 и 6, если 5 меньше.

1 голос
/ 30 июня 2011

Обычно люди не используют прямую линию прямо из коробки. Обычная практика включает в себя предварительную обработку изображения (например, изменение яркости, изменение цвета, повышение резкости изображения ...).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...