Надежное извлечение линий из изображения

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

Входное изображение Входное изображение

Это следующее хитрое изображение, данное алгоритмом хитрого обнаружения
Я использую хитрые параметры как 0,20 для минимального и максимального порога. Я не могу использовать очень высокое значение для максимального порога, иначе я потеряю края стены, но градиент там будет низким по сравнению с остальной частью изображения.
Нормальное изображение Canny

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

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

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

1 ответ

Решение

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

SimpleCV - это просто библиотека ярлыков, включающая функции OpenCV, вам не нужно ее использовать. Я не думаю, что вы столкнетесь с проблемами при реализации алгоритма после получения идеи.

Редактировать: Хорошо, я думал больше о вашей проблеме. Установка кластеров на ноль в качестве шага предварительной обработки на самом деле неплоха. Как насчет увеличения размера окна шаг за шагом? Я имею в виду, после получения второго изображения, примените другой кластерный фильтр с размером окна 2*, тем же порогом. Я думаю, что вы можете продолжать в том же духе, так как края стен трудно устранить.

Другой способ - использовать прямоугольное окно (ширина>= 5* высота) для кластерной фильтрации, так как вам нужны вертикальные края.

Другой способ - поиграть с эрозией и дилатацией и отфильтровать капли, имеющие большую площадь.

Еще один способ проверить верхнюю часть изображения, там только края стен и люстра. Вы можете искать белый узор по горизонтали, а затем следовать его соседям, чтобы указать длину соединенных точек. Затем отфильтруйте более длинные.

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