2013-12-03 1 views
1

Как подмножить изображение GeoTIFF (однополосное) (скажем, 1000 на 1000 пикселей) в обычные квадратные сетки (скажем, 50 на 50 пикселей, всего 400 объектов сетки); и вычислить среднюю широту, среднюю долготу и среднее значение DN для каждого объекта? Любые идеи будут высоко оценены.Разделите изображение GeoTIFF на регулярные сетки и средние значения вычислений

Входные данные только образы, например, как скачать с: http://eoimages.gsfc.nasa.gov/images/imagerecords/57000/57752/land_shallow_topo_2048.tif

Это может быть открыт в питоне с использованием GDAL в folows:

import gdal 
geotiff = gdal.Open ('land_shallow_topo_2048.tif') 
colum_numbers,row_numbers,band_numbers=geotiff.RasterXSize,geotiff.RasterYSize,geotiff.RasterCount 
print (colum_numbers,row_numbers,band_numbers) 
2048 1024 3 
+0

то, что вы пытались так далеко? какова ваша структура данных? – usethedeathstar

ответ

3

Существует Numpy изменения формы трюк, чтобы сделать это. Вы можете изменить исходный 2D-массив на 4D-массив, где все ячейки, которые попадают в одну сетку 50 * 50, помещаются в два уникальных размера. Вызов любой функции на этой оси даст вам агрегированный результат.

Позволяет сделать образец 2D массив:

n = 1000 
grid_size = 20 

grid = np.arange(n*n).reshape(n,n) 

затем рассчитать коэффициент агрегации и количество сеток в обоих измерениях:

factor = n/grid_size 
yblocks, xblocks = np.array(grid.shape)/factor 

Вы можете затем перекроить оригинальный grid массив в 4-х измерениях и примените mean во втором и четвертом измерениях.

grid_small = grid.reshape(yblocks, factor, xblocks, factor).mean(axis=3).mean(axis=1) 

Вы можете проверить это нарезка несколько сеток себя и применяя среднее на них:

assert(grid[:factor,:factor].mean() == grid_small[0,0]) 
assert(grid[-factor:,-factor:].mean() == grid_small[-1,-1]) 

Результаты и разница визуализированы: enter image description here

+0

@ Rutger Kassies Спасибо за ваши усилия. Ваш метод может применяться для вычисления среднего значения DN для диапазонов. Однако, как вычислить среднее значение latitutude и долготу для каждой сетки? – 2964502

+0

@ тестер3, это совершенно другой вопрос. Вы запросили среднее значение в пределах 50 * 50 блоков в 1000 * 1000 изображений. Вероятно, лучше всего просто открыть для него другой вопрос, что значительно облегчает поиск людей с тем же вопросом. –

+0

@ Rutger Kassies ok.thanks .. – 2964502

1

быстрый и удобный способ сделать это является создание целостного изображения (таблица суммарной площади AKA). Затем вы можете вычислить среднее значение в любом прямоугольном патче с четырьмя исками.

Если вы дадите более подробную информацию в своем вопросе (например, каков формат ваших данных как код Python?) Я могу дать более конкретные советы.

http://en.wikipedia.org/wiki/Summed_area_table

+0

Благодарим вас за ответ на мой вопрос. Я обновил вопрос для вас @Mr E – 2964502

Смежные вопросы