Є 2 частини проблеми. Перший полягає в тому, що ви хочете перетворити з 16 біт на 8 біт, і параметр -scale gdal_translate робить це, як зазначено в попередній відповіді.
-scale minOriginal maxOriginal minOutput maxOutput
Друга проблема - це проблема з покращенням контрасту. Коли ви повторно масштабуєте, ви хочете мати високий контраст для пікселів, які вас цікавлять. ПОПЕРЕДЖЕННЯ. Немає "магічного" контрасту, оскільки при повторному масштабі ви зазвичай втрачаєте деяку інформацію : це робиться для поліпшення візуалізації даних, а професійні програмні засоби роблять це на ходу, не записуючи новий файл. Якщо ви хочете додатково обробити ваші дані, ваш "чорний" геотиф містить ту саму інформацію, що й jp2, і він готовий до обробки. Якщо ви обчислюєте, наприклад, індекси рослинності, це слід робити з "вихідними" значеннями відбиття, а не з повторно оціненими. Однак, ось кілька кроків для створення візуально покращеного 8-бітового зображення.
@ben дав вам загальний метод змінити коефіцієнт відбиття від 0-1 (помножений на 10000 з цим продуктом) до 0-255. Це безпечно (без виключення), але тільки хмари та голі ґрунти мають дійсно високу світловідбиваючу здатність, тому на суші ви не бачите багато (крім голих ґрунтів) і нічого у воді. Тому покращення контрасту, що зазвичай застосовується до зображень, полягає у прийнятті лише підмножини повного діапазону. З безпечного боку ви можете використовувати знання про те, що максимальна відбивна здатність звичайного земного матеріалу зазвичай нижче 0,5 / 0,6 (див. Тутдля деяких прикладів). Звичайно, це передбачає, що ваше зображення було скоректовано атмосферно (зображення L2A). Однак діапазон відбиття відрізняється в кожному спектральному діапазоні, і ви не завжди маєте найяскравіші земні поверхні у вашій цікавій зоні. Ось як виглядає "безпечний" метод (з максимальним відбиттям 0,4, як 4096, запропонований @RoVo)
З іншого боку, контраст можна оптимізувати для кожного діапазону. Ви можете визначити цей діапазон вручну (наприклад, вас цікавить колір води і ви знаєте максимальне очікуване значення відбиття води) або на основі статистичних даних зображення. Загальновживаний метод полягає у збереженні приблизно 95% значень та "відхиленні" (занадто темне -> 0 або занадто яскраве -> 255) решта, що аналогічно визначенню діапазону на основі середнього значення +/- 1,96 * стандартне відхилення. Звичайно, це лише наближення, оскільки воно передбачає нормальне розповсюдження, але воно працює досить добре на практиці (за винятком випадків, коли у вас занадто багато хмар або якщо статистика використовує деякі значення NoData).
Давайте візьмемо для прикладу свою першу групу:
середній = 320
std = 536
95% довірчий інтервал = [-731: 1372]
але, звичайно, коефіцієнт відбиття завжди більший за нуль, тому потрібно встановити мінімум у 0.
gdal_translate -scale 0 1372 0 255 -ot Byte B01.jp2 B01-scaled.tif
І якщо у вас є остання версія gdal, ви можете використовувати -scale_ {band #} (0 255 - вихід за замовчуванням, тому я не повторюю його), так що вам не потрібно розділяти окремі смуги. Також я використовував vrt замість tif як проміжний файл (не потрібно писати повне зображення: достатньо віртуального)
gdalbuildvrt -separate stack.vrt B04.jp2 B03.jp2 B02.jp2
gdal_translate -scale_1 0 1372 -scale_2 0 1397 -scale_3 0 1430 -ot Byte stack.vrt im_rescaled.tif
Зауважте, що на вашу статистику сильно впливають такі "артефакти", як хмари та NoData. З одного боку, дисперсія завищена, коли у вас є екстремальні значення. З іншого боку, ваше середнє значення занижене, коли існує велика кількість "нульових" значень (що робить автоматично контрастне зображення занадто яскравим, як на прикладі), і було б завищено, якби було більшість хмар (що зробило б зображення занадто темне). На цьому етапі результати не були б найкращими, які ви могли отримати.
Автоматизоване рішення буде набір фонових і хмарних значення «NoData» і обчислити статистику без NoData (див цього поста для отримання докладної інформації про обчисленні статистики без NoData, і це один для прикладу , щоб встановити значення більше , ніж 4000 до NoData , а також ). Для одного зображення я зазвичай обчислюю статистику щодо найбільшого можливого безхмарного підмножини. Статистичні дані з підмножини, де немає "NoData" (у верхньому лівому куті зображення), це дає кінцевий результат. Ви можете бачити, що діапазон становить приблизно половину "безпечного" діапазону, це означає, що у вас вдвічі більше контрасту:
gdal_translate -scale_1 38 2225 -scale_2 553 1858 -scale_3 714 1745 -ot Byte stack.vrt im_rescaled.tif
Як останнє зауваження, gdal_constrast_stretch виглядає добре, але я не пройшов тестування
gdalinfo -hist merged.tif