Есть ли простой способ отделить улицы от крыш? - PullRequest
0 голосов
/ 07 апреля 2020

Я работаю над извлечением крыш из спутниковых снимков. У меня проблема с отделением внутренних улиц от крыш на изображении. После работы только с ИИ (без нейронных сетей) результат всегда включает улицы и здания, и я не могу найти способ разделить их.

Это исходное изображение

image

и это изображение после обнаружения ИИ

image

Ответы [ 2 ]

0 голосов
/ 07 апреля 2020

Попробовал с помощью Dilating и Открытие вашего результирующего изображения с этим результатом (ваше будет выглядеть еще лучше с необработанными данными)

Изображение результата

Я думаю, что это «простой метод» для его решения, в противном случае вы должны использовать более точный подход ИИ. Вот код. Вы можете отображать изображения во время процесса, чтобы понять каждый шаг.

import cv2
import numpy as np

THRESHOLD = 10
DILATE_SIZE = 16
OPEN_SIZE = 47

img = cv2.imread("roofs.jpg", -1)
#using red channel - roofs ar
red_channel = img[:, :, 2]

# kernels
kernel_dil = np.ones([DILATE_SIZE,DILATE_SIZE])
kernel_er = np.ones([OPEN_SIZE,OPEN_SIZE])
# threshold
(t, img_bin) = cv2.threshold(red_channel, THRESHOLD, 255, cv2.THRESH_BINARY_INV)
img_bin = cv2.morphologyEx(img_bin,cv2.MORPH_DILATE,kernel_dil)
img_bin = cv2.morphologyEx(img_bin,cv2.MORPH_OPEN,kernel_er)
# to show result only
img_res = img
img_res[:,:,1] = img_bin[:,:]
cv2.imshow("img",img_res)
cv2.waitKey(0)
cv2.imwrite("res.jpg",img_res)

0 голосов
/ 07 апреля 2020

Как насчет изображения результата постобработки с фильтрами морфологии classi c? Дилатация и эрозия с более крупным ядром потом сработали бы очень хорошо.

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