Как найти расположение и размеры стен, колонн, балок, дверей, окон и комнат из верхней планировки этажа здания с помощью OpenCV?

Наша основная цель:

  1. использовать обработку изображений для чтения/сканирования архитектурного изображения плана этажа (экспортированного из программного обеспечения САПР)
  2. использовать обработку изображений для чтения/сканирования архитектурного изображения плана этажа (экспортированного из программного обеспечения САПР) извлекать различные линии и кривые, группировать их в структурные объекты, такие как стены, колонны, балки и т. д. – «Стена_01», «Балка_03» и т. д. на
  3. извлеките размеры каждого из этих объектов на основе масштаба и длины линий на изображении плана этажа (поскольку линии AutoCAD имеют точные размеры в соответствии с указанным масштабом)
  4. и свяжите каждую из этих структурных единиц (и их размеры) с «помещением».

У нас есть гибкость в том, что мы можем определить точные формы различных структурных объектов на изображении плана этажа (прямоугольники для дверей, прямоугольники с линиями штриховки для окон и т. д.) и экспортировать их в набор изображений для каждого структурного объекта (например, один изображение для стен, одно для колонн, одно для дверей и т. д.).

Для пункта «B» выше наш текущий подход, основанный на OpenCV, выглядит следующим образом:

  1. Экспорт каждого структурного объекта в отдельное изображение
  2. Используйте Canny и HoughLine Transform для определения линий на изображении.
  3. Сгруппируйте эти линии в отдельные структурные элементы (например, «Стена_01»).

Нам удалось обнаружить/идентифицировать сегменты линий с помощью Canny+HoughLine Transform с достаточной степенью точности.

Исходное изображение плана этажа Исходное изображение плана этажа

Индивидуальное изображение «стен»: Индивидуальное изображение «стен»»></p>

<p>Сегменты линий, определенные с помощью Canny+HoughLine: <img src=

(У меня пока недостаточно репутации для публикации изображений)

Итак, текущий вопрос: как лучше всего сгруппировать эти линии вместе в логическую структурную сущность, такую ​​​​как «Стена_01»?

Кроме того, существуют ли какие-либо конкретные методы на основе OpenCV, которые могут помочь нам сгруппировать сегменты линий в логические объекты? Правильно ли мы подходим к проблеме? Есть ли лучший способ решить проблему?


Обновление: добавление другого изображения действительного входного изображения стены. Другое допустимое входное изображение стены


person Dhawal Banker    schedule 18.06.2018    source источник
comment
Если у вас есть доступ к файлам САПР и программе САПР, которая может их читать, кажется, что вы могли бы добиться гораздо большей точности, написав макросы в своей программе САПР. Если вы делаете это в OpenCV, вы ограничены точностью пикселей растрового изображения.   -  person bfris    schedule 19.06.2018
comment
@bfris Параметры SDK для чтения файлов DWG RealDWG — единственный вариант, если мы хотим создать автономный программное обеспечение. В противном случае мы должны создать плагины AutoCAD. Лицензирование RealDWG дорого и ограничено. Распространенные проблемы с лицензированием. Проблемы пользователей и ответы Вообще Autodesk не очень отзывчив. Я попытался зарегистрироваться и выполнить поиск на портале разработчиков, и он был полон 404.   -  person Dhawal Banker    schedule 25.06.2018


Ответы (2)


Вы упомянули «экспортировано из программного обеспечения САПР». Если формат экспорта — PDF, он содержит векторные данные для всех графических элементов. Возможно, вам лучше попытаться извлечь и интерпретировать это. Кажется немного громоздким переход от векторного формата к пиксельному формату, который вы затем пытаетесь вернуть к числовой модели.

person NUMENA    schedule 26.06.2018
comment
Это хороший улов и предложение. Я собираюсь попробовать извлечь pdf это и это. Я также свяжусь с командой, если я пропустил какую-либо причину, по которой мы не обрабатываем PDF. Я также попытаюсь преобразовать его в PostScript и посмотреть, может ли это облегчить прогресс. - person Dhawal Banker; 26.06.2018

Если у вас есть четко определенные ограничения относительно того, как ваши стены, двери и т. д. будут выглядеть на вашем изображении, вы должны использовать именно их. Если вы создаете экспорт САПР самостоятельно, измените настройки, чтобы облегчить это.

Например, все двери коричневые и представляют собой закрытые фигуры.

То же самое для группировки стен. На рисунках похоже, что вы можете группировать на основе близости (т. е. все, что находится в пределах X пикселей друг от друга, является одной группой). Хотя стены справа от надписи «C7» и ниже могут группироваться в одну.


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

person Aswin B    schedule 18.06.2018
comment
Не сгруппировать близлежащие стены — основная проблема. Предположим, мы нашли соответствующие отрезки. Учитывая это, как мы можем найти, какие 3 или 4 линии являются частью одной сплошной стены? Как только мы это поймем, следующим шагом будет определение размеров каждой из этих стен. - person Dhawal Banker; 25.06.2018
comment
Хорошо, теперь, если предположить, что все соединенные черные линии гарантированно являются частью одной стены, и только одной стены, рассмотрим самую верхнюю черную линию (над текстом «C8»). Ограничена ли эта стена верхней коричневой линией или нижней? У вас есть способ отличить? Если вы этого не сделаете, и это не потому, что вам все равно, я не думаю, что вы можете решить эту проблему с помощью обработки изображений. Как предложил @bfris, вам нужно изучить сторону САПР. Если вам все равно, как насчет того, чтобы скрипт OpenCV выполнял поиск по небелым линиям от одного конца черной линии до другого? - person Aswin B; 25.06.2018
comment
Индивидуальное изображение «Стены» — это извлечение только слоя стен из исходного изображения макета. Я также обновил вопрос с другим входным изображением. Таким образом, соединенные черные линии могут быть частью одной и той же стены, а могут и не быть. - person Dhawal Banker; 25.06.2018