2016-08-10 12 views
0

У меня есть два растровых изображения той же области и размеры x, y как массивы numpy. Изображение 1 представляет собой классификацию землепользования (например, с классами от 0 до 5), а изображение 2 представляет собой маску облачной тени (со значениями: 0 = без облаков, 255 = облачными областями/теневыми областями).
Я хочу объединить эти изображения. Либо возьмите/зацепите все 255 значений из изображения 2 и мозаики их на изображение 1. ИЛИ замените все значения 0 в изображении 2 на значения, найденные в определенном положении пикселя на изображении 1.Заменить области в растровом изображении со значениями из другого изображения в python

Я попытался сделать 2d массивы 1d и заменить значения 0, но затем не могли правильно преобразовать их обратно в 2d.

Что было бы самым простым или лучшим способом сделать этот растровый расчет полностью открытым исходным кодом в python ???

ответ

0

Вы можете сделать это с помощью функции буферизации numpy.

img1 = np.array([[0, 1, 0, 1],[1, 0, 1, 0]]) 
img2 = np.array([[1, 2, 3, 4],[5, 6, 7, 8]]) 
bool_arr = img1 == 0 
img1[bool_arr] = img2[bool_arr] 
print(img1) 
# outputs: [[1 1 3 1] 
#   [1 6 1 8]] 
+0

Это сработало! Большое спасибо. Что делать, если у моего img2 есть плавающие значения. У вас также есть идея, как интегрировать это? –

+0

@ChristinAbel Вы можете использовать '<, >, <=, > =' для создания булевых массивов с поплавковыми значениями, например. замените 'img1 == 0' на' img1 <2' выше. Numpy также имеет ряд других элементарных логических функций, которые вы можете прочитать здесь: http://docs.scipy.org/doc/numpy/reference/routines.logic.html –

+0

Я только что понял, что у меня сейчас есть целая другая проблема .. потому что у меня есть мои целые значения img1 - 2, 2d (x, y), но мой img2 изменился: плавающие значения, 3d (ndim, x, y). Каждое измерение массива представляет собой диапазон в моем растровом слое. ... так как img1 является облачной/теневой маской, она должна быть добавлена ​​к каждому размеру/диапазону img2. Поэтому я хочу пропустить ndim, изменить каждый (x, y) массив и сохранить его как 3D-массив в конце снова ... –