Надежное извлечение линий из изображения
Мне нужно извлечь ВСЕ края стены (включая пол, пересечения стен и стены, пересечения дверей) из следующего изображения. Если я использую хитрое обнаружение и грубое преобразование (вероятностное). Это дает мне много лишних и ненужных строк. Я искал, смогу ли я улучшить хитрое изображение до того, как на нем будет запущено грубое преобразование.
Входное изображение
Это следующее хитрое изображение, данное алгоритмом хитрого обнаружения
Я использую хитрые параметры как 0,20 для минимального и максимального порога. Я не могу использовать очень высокое значение для максимального порога, иначе я потеряю края стены, но градиент там будет низким по сравнению с остальной частью изображения.
Я думал об идентификации кластера точек с высокой плотностью в окне и обнулении их, если оно выше некоторого порога.
Ниже приведено хитрое изображение, полученное после этого. Вы можете увидеть края стены сохранились.
Может кто-нибудь предложить мне лучший способ решения этой проблемы? Я имею в виду уточнение хитрого изображения, чтобы я мог идентифицировать группу случайных точек и избегать их, но устанавливая их на ноль. Я думал о проверке коллинеарных точек в окне, но не знаю, насколько это будет эффективно? Любые комментарии будут приветствоваться
1 ответ
Я думаю, что вы можете отфильтровать самые длинные и почти вертикальные линии после использования грубого преобразования. Проверьте эту ссылку.
SimpleCV - это просто библиотека ярлыков, включающая функции OpenCV, вам не нужно ее использовать. Я не думаю, что вы столкнетесь с проблемами при реализации алгоритма после получения идеи.
Редактировать: Хорошо, я думал больше о вашей проблеме. Установка кластеров на ноль в качестве шага предварительной обработки на самом деле неплоха. Как насчет увеличения размера окна шаг за шагом? Я имею в виду, после получения второго изображения, примените другой кластерный фильтр с размером окна 2*, тем же порогом. Я думаю, что вы можете продолжать в том же духе, так как края стен трудно устранить.
Другой способ - использовать прямоугольное окно (ширина>= 5* высота) для кластерной фильтрации, так как вам нужны вертикальные края.
Другой способ - поиграть с эрозией и дилатацией и отфильтровать капли, имеющие большую площадь.
Еще один способ проверить верхнюю часть изображения, там только края стен и люстра. Вы можете искать белый узор по горизонтали, а затем следовать его соседям, чтобы указать длину соединенных точек. Затем отфильтруйте более длинные.