Объединение нескольких групп вместе через GDAL ... правильно - PullRequest
0 голосов
/ 14 сентября 2018

Я использую некоторые спутниковые изображения Sentinel-2 в python.Теперь у меня нет проблем с использованием более новых (в прошлом 2016 году).Но мне нужно использовать некоторые из 2016 года. Они не обрабатываются таким же образом Европейским космическим агентством!

Обычно, когда вы загружаете плитку, вы обычно получаете файл .jp2 для каждой из полос спутников.Но в более новой версии они предварительно обрабатывают RGB-версию для вас вместе с обычными группами.Эта версия работает отлично для меня в Python.Однако, чтобы создать RGB-версию старых изображений, мне нужно объединить три полосы (4,3,2 - R, G, B) в один файл.Сначала Gdal_merge справляется с этим довольно хорошо.Когда я открываю изображение, оно выглядит великолепно!Но, прочитав его на python, я сразу заметил, что что-то не так.Изображение выглядит как чисто белое изображение с голубыми полосами на нем.Теперь я обратился к gdalinfo как с новым рабочим примером, так и со старой версией, которую я сам сшил, и это вывод.

enter image description here

Как вы можете заметитьНа первый взгляд размеры кажутся нормальными.Но полосы не имеют ни правильного типа, ни правильного цвета.Поэтому я явно делаю что-то не так, когда объединяю файлы.

Вот эта команда, которую я использую, чтобы объединить 3 полосы в 1 файл .jp2.

gdal_merge.py -o outfile.jp2 -separate B04.jp2 BO3.jp2 BO2.jp2

Теперь, как уже упоминалось.Это создает файл, и файл выглядит красиво, когда я открываю его в QGIS.Но это бесполезно для меня в python.

Вот скриншот импорта из python.

img - это предварительно обработанное изображение ESA.

img1 - мой убогий импорт gdal_merge.enter image description here

А вот изображение сбоя: p enter image description here

Теперь мне кажется, что мне не хватаетнекоторое базовое понимание такого рода манипуляций с изображениями.Итак, благодаря объединенной мудрости Stackoverflow - что я могу сделать, чтобы правильно соединить мои группы в сексуальный RGB, который может быть правильно прочитан модулем растерио.

Заранее спасибо :)

1 Ответ

0 голосов
/ 15 сентября 2018

Кажется, что происходит то, что вы создаете стек uint8 из исходных данных uint16, поэтому все ваши значения в основном превращаются в 255, максимум uint8.

Чтобы это исправить, просто добавьте -ot uint16 к вашему звонку, и все должно работать.

Что касается объединения полос, то обычно я использую gdalbuildvrt, который создает виртуальный набор данных из ваших входных файлов. Этот .vrt файл имеет размер всего пару килобайт и впоследствии может быть использован для любой дальнейшей обработки GDAL (и потенциально может считываться rasterio):

gdalbuildvrt -separate stack.vrt B04.jp2 BO3.jp2 BO2.jp2

Есть много других опций, которые вы можете указать, например, общее разрешение (скажем, вы хотите сложить 10-метровые и 20-метровые полосы), ноданные, целевой экстент и т. Д.

Если вам нужен фактический GeoTIFF, просто запустите его через gdal_translate:

gdal_translate stack.vrt stack.tif

Опять же, gdal_translate имеет массу интересных вариантов, просто взгляните на документацию .

...