Нужно реализовать алгоритм разбиения плоскости на области.
1) Представить стены в виде графа, где вершины - углы и пересечения стен, а ребра - самы стены.
2) Каждое ребро превратить в 2 ориентированных ребра в обе стороны. При этом надо для каждого ребра сохранить ссылку на обратное ребро.
3) В каждой вершине упорядочить все ребра по углу наклона (допустим, по часовой стрелке) и для каждого ребра хранить ссылку на следующее (зацикленно, т.е. для последнего ребра храним ссылку на первое).
4) Теперь будем выделять замкнутые области. Для этого возьмем любое необработанное пока ориентированное ребро. Потом будем от него переходить к следующему ребру в границе области. Для этого сначала получаем обратное к данному ребру. Потом переходим к следующему по углу наклона ребру, исходящему из той же вершины. Помечаем это ребро обработанным. Продалжаем, пока не вернемся к изначальному ребру (обязательно вернемся к нему). Фактически тут мы идем вдоль ребер и каждый раз в вершине максимально поворачиваем по часовой стрелке (или против, зависит от того, как сортировать ребра в вершинах).
Таким образом можно выделить все замкнутые области на картинке.
Теперь для каждого ребра мы знаем следующее в той же области. По каждой замкнутой области можно посчитать ее площадь со знаком (через векторные произведения двух соседних сторон). Для всех областей эта площадь будет одного знака, но для одной области она будет равна сумме всех осталных по модулю, но обратного знака. Эта область - это и есть внешние стены.