Sorunun 2 kısmı var. Birincisi, 16 bit'ten 8 bit'e dönüştürmek istediğinizdir ve önceki cevapta belirtildiği gibi gdal_translate'in -scale seçeneği bunu yapar.
-scale minOriginal maxOriginal minOutput maxOutput
İkinci sorun kontrast geliştirme sorunudur: yeniden ölçeklendirdiğinizde, ilgilendiğiniz pikseller için yüksek bir kontrast elde etmek istersiniz. UYARI: "Sihirli" kontrast yoktur, çünkü yeniden ölçeklendirdiğinizde genellikle bazı bilgileri kaybedersiniz : verilerin görselleştirilmesini geliştirmek için yapılır ve profesyonel yazılımlar bunu yeni bir dosya yazmadan anında yapar. Verilerinizi daha fazla işlemek istiyorsanız, "siyah" geotiffiniz jp2'nizle aynı bilgileri içerir ve işlenmeye hazırdır. Örneğin bitki örtüsü indeksini hesaplarsanız, bu yeniden ölçeklendirilmiş değerlerle değil, "orijinal" yansıtma değerleri ile yapılmalıdır. Bununla birlikte, görsel olarak geliştirilmiş 8 bitlik bir görüntü oluşturmak için bazı adımlar.
@ben, yansıtmayı 0-1'den (bu ürünle 10000 ile çarpılır) 0-255'e yeniden ölçeklendirmek için genel bir yöntem verdi. Bu güvenlidir (dışlama yoktur), ancak sadece bulutlar ve bazı çıplak toprakların gerçekten yüksek yansımaları vardır, bu nedenle karada (çıplak topraklar hariç) fazla bir şey görmezsiniz ve suda hiçbir şey görmezsiniz. Bu nedenle, görüntülere yaygın olarak uygulanan kontrast geliştirmeleri, tüm aralığın yalnızca bir alt kümesinin alınmasından oluşur. Güvenli tarafta, ortak Dünya yüzey malzemesinin maksimum yansımasının genellikle 0.5 / 0.6'nın altında olduğu bilgisini kullanabilirsiniz ( buraya bakınbazı örnekler için). Elbette bu, görüntünüzün atmosferik olarak düzeltildiğini varsayar (L2A görüntüleri). Bununla birlikte, yansıtma aralığı her spektral bantta farklılık gösterir ve ilgi alanınızda her zaman en parlak Dünya yüzeylerine sahip olmazsınız. "Güvenli" yöntem şöyle görünür (maksimum yansıtma değeri 0,4, @RoVo tarafından önerilen 4096 gibi)
Öte yandan, kontrast her bant için optimize edilebilir. Bu aralığı manuel olarak tanımlayabilirsiniz (örn. Su rengiyle ilgileniyorsunuz ve suyun beklenen maksimum yansıtma değerini biliyorsunuz) veya görüntü istatistiklerine dayanarak. Yaygın olarak kullanılan bir yöntem, değerlerin yaklaşık% 95'inin korunmasından ve geri kalanının "çok koyu -> 0 veya çok parlak -> 255), ortalama değerin +/- 1,96 * standart sapma. Tabii ki, bu sadece bir yaklaşımdır çünkü normal bir dağılım varsayar, ancak pratikte oldukça iyi çalışır (çok fazla bulutunuz olduğunda veya istatistiklerin bazı NoData değerlerini kullanması dışında).
İlk grubunuzu örnek olarak alalım:
ortalama = 320
std = 536
% 95 güven aralığı = [-731: 1372]
ancak elbette yansıma her zaman sıfırdan büyüktür, bu nedenle minimum değeri 0'a ayarlamanız gerekir.
gdal_translate -scale 0 1372 0 255 -ot Byte B01.jp2 B01-scaled.tif
Ve gdal'ın yeni bir sürümüne sahipseniz, -scale_ {band #} (0 255 varsayılan çıktıdır, bu yüzden tekrarlamıyorum) kullanabilirsiniz, böylece tek bantları bölmenize gerek kalmaz. Ayrıca ara dosya olarak tif yerine vrt kullandım (tam bir resim yazmaya gerek yok: sanal bir tane yeterlidir)
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
İstatistiklerinizin, bulutlar ve NoData gibi "yapay öğeler" den ciddi şekilde etkilendiğini unutmayın. Bir tarafta, aşırı değerleriniz olduğunda varyans fazla tahmin edilir. Öte yandan, büyük miktarda "sıfır" değer olduğunda (otomatik olarak kontrastlı görüntüyü örnekte olduğu gibi çok parlak hale getirir) olduğunda ortalamanız hafife alınır ve bulutların çoğunluğu varsa ( görüntü çok karanlık). Bu aşamada, sonuçlar elde edebileceğiniz en iyi sonuç olmayacaktır.
Otomatik bir çözüm "NODATA" olarak ayarlayın arka plan ve bulut değerlerine olmak ve (nodata olmadan istatistikleri hesaplamak görecekti Bu yayını nodata olmadan istatistikleri hesaplama ile ilgili ayrıntılar için, ve bu bir nodata için 4000 daha büyük set değerlere bir örnek için de ). Tek bir görüntü için, genellikle mümkün olan en büyük bulutsuz alt kümedeki istatistikleri hesaplarım. "NoData" (görüntünüzün sol üstünde) bulunmayan bir alt kümedeki istatistiklerle, sonuçta sonuç elde edilir. Aralığın "güvenli" aralığın yaklaşık yarısı olduğunu görebilirsiniz, bu da iki kat daha fazla kontrastınız olduğu anlamına gelir:
gdal_translate -scale_1 38 2225 -scale_2 553 1858 -scale_3 714 1745 -ot Byte stack.vrt im_rescaled.tif
Son bir açıklama olarak, gdal_constrast_stretch iyi görünüyor ama test etmedim
gdalinfo -hist merged.tif