Birden fazla raster birleştirme sonucu neden bu kadar büyük? [kapalı]


10

14 geotiff'ı böyle birleştirmeye çalışıyorum:

resim açıklamasını buraya girin

Her geotiff yaklaşık 50Mb'dir. Çıktıda bir geotiff'e ihtiyacım var

İş akışım:

gdalbuildvrt -input_file_list list.txt test.vrt 

(burada listem tiflerin adını içerir)

Sonra :

gdal_translate -of Gtiff test.vrt test.tif
Input file size is 79841, 59955

Çalışıyor, ancak sonuç 13,3 Gb'lik bir geotiff! Her biri 50 Mb olan 14 dosya için, 13 Gb değil, 700 Mb geotiff denedim.

Gdal varsayılan olarak sıkıştırmaz, bu yüzden bu komutu denedim biliyorum:

gdal_translate -of Gtiff -co COMPRESS=JPEG test.vrt test_compressed.tif

Ancak dosyanın "birleştirilmesi" JPEG sıkıştırması için çok büyük:

Input file size is 79841, 59955
0ERROR 1: JPEGPreEncode:Strip/tile too large for JPEG
ERROR 1: WriteEncodedTile/Strip() failed.
ERROR 1: JPEGPreEncode:Strip/tile too large for JPEG
ERROR 1: WriteEncodedTile/Strip() failed.
ERROR 1: An error occured while writing a dirty block
...

Bu yüzden başka bir iş akışı denedim ve tüm tiflerimi jpeg'de (her biri 14 Mb) dönüştürdüm, bir vrt dosyası oluşturdum ve LZW sıkıştırmasıyla çevirdim. Ancak çıkış geotiff yaklaşık 5 Gb'dir.

İşi yapmak için en iyi uygulamanın ne olduğunu ve 14 * 50Mb'lik bir geotiff elde etmenin mümkün olup olmadığını söyleyebilir misiniz?

Denemedim, ama bu tifleri photoshop'ta birleştirmeyi, sonra sol üst / sağ alt koordinatlarla yeniden coğrafi referansı düşünmeyi düşündüm. Bu iş akışı ile bence 14 * 50 Mb olacak, ama emin değilim. Ve en iyi gdal uygulamalarını öğrenmek istiyorum, bu yüzden şu an denemedim


ısırık geliyor: eğer giriş 8bit ile tif ve ihracat varsayılan olarak 32bit ise ciddi sorun yaşayacaksınız. bu nedenle bayt tanımınızı olduğu gibi tuttuğunuzdan emin olun. Ve unutmayın: tam tif prob olacak. tiff her zaman dikdörtgen olduğu için 20x50mb var

Anlıyorsam, bu ekran görüntüsünde yeşile işaret ettiğim sayı solda ve sağda aynı mı olmalı?

bit

Çıktı görüntünüz, girdi görüntülerinizin toplamından daha fazla piksele sahip olacaktır, ancak bu büyük farkı açıklamaz. Hangi sıkıştırmanın kullanıldığını görmek ve uzantıların doğru olup olmadığını kontrol etmek için gdalinfo'ya dayalı görüntülerinizin özelliklerine bakmanızı öneririm.

50 Mb'lik 14 tif, başlangıçta -co COMPRESS = JPEG ile gdal_translate ile işlediğim 14 tif 700 Mb idi. Mb sayısını azaltmak için rasterleri sıkıştırdım, ancak belki de iyi bir fikir değildi?

Bu ekran görüntüsü aynı geotiff'in (01.tif) 2 gdal bilgisini temsil eder, ekran görüntüsünün solunda sıkıştırılmamış Gtiff'in 700 Mb'lik gdalinfo, COMPRESS = JPEG ile aynı Gtiff'i sonlandırın. 50 Mb, fark yeşil renkte:

01.tif dosyasının sıkıştırılmamış ve sıkıştırılmış gdalinfo dosyası

Bana göre, uzantılar doğru çünkü qgis'te diğer veri ve uydu görüntüleri kaynağı ile eşleşiyor.

* Giriş görüntülerinizin aynı boyutta olduğu varsayılarak, giriş resmi başına 20.000 * 12000 piksel yapar, bu da 50 Mb'lık bir görüntü için büyüktür, belki mozaiği oluştururken koordinat sisteminizin kapsamını geçiyorsunuzdur. *

Ne demek istediğinizi "kapsamı aşarak" anladığınızdan emin değilim. Ama 5 Gb LZW'mi QGIS'de açmaya çalıştım ve kapsamı iyi, çünkü diğer veri kaynaklarıyla eşleşiyor.

Cevabınız, Gtiff'in aynı boyuta sahip olmadığının farkına varıyor, birleştirildiğinde boyutun artmasının nedeni olabileceğini düşünüyor musunuz? Çünkü gdal aynı boyuttaki dosyayı tercih ediyor. Boyutunu almak için her Gtiff üzerinde bir gdalinfo yaptım, Gtiffs'in boyutu arasında çok küçük bir fark var:

02.tif Size is 19956, 11981
03.tif Size is 19959, 11993
04.tif Size is 19961, 11992
05.tif Size is 19958, 11993
06.tif Size is 19958, 11990
07.tif Size is 19956, 11984
08.tif Size is 19956, 11993
09.tif Size is 19958, 11993
10.tif Size is 19958, 11989
11.tif Size is 19958, 11985
12.tif Size is 19958, 11993
13.tif Size is 19959, 11993
14.tif Size is 19960, 11994

Sonra resimlerinizin piksel derinliğine bakmalısınız: girişiniz Bayt'ta ise,> o zaman bayt tutmalısınız. gdal_translate -of Gtiff -ot Bayt -co COMPRESS = LZW test.vrt test.tif

Bu komutu denedim ama gdal bana tiff boyutunun aşıldığını söyledi.

Input file size is 79841, 59955
0...10...20...30...40...50..ERROR 1: TIFFAppendToStrip:Maximum TIFF file size exceeded. Use BIGTIFF=YES creation option.
ERROR 1: WriteEncodedTile/Strip() failed.

Ama eğer büyük bir tiff oluşturmak zorunda kalırsam, sorunumu çözmez çünkü 4 Gb'den fazladır. Piksel derinliği benim durumumda önemli mi? (Haritaların HD fotoğrafı, daha sonra coğrafi referanslı, DEM değil)

Açıklama 1: Bir vrt oluşturmadan önce resimlerinizi jpeg'e dönüştürmek yardımcı olmaz ve verileri kaybedebilirsiniz.

Biraz bilgi kaybedersem ciddi olmaz. Elbette kaybetmemeyi tercih ederim, ama eğer zorundaysam sorun değil. Jpeg ile çalışsaydım çıktının daha hafif olacağına ikna oldum, ama sonuç olarak, çıktı Gtiff olduğunda bu doğru değil. Yani bu iyi bir çözüm değil. Bu çözümü bırakıyorum.

> Not 2: vrt kullanmak faydalıdır: GTiff'e ihtiyacınız olduğundan emin misiniz?

Evet, bir Gtiff'e ihtiyacım var, çünkü çalışmak için geotiff girişine ihtiyaç duyan bir mobil uygulamada içe aktarmak zorundayım (uygulamanın jeo-uzamsal pdf girişini de alabileceğini düşünüyorum, ancak asla onunla çalışmam ve sorunumu anlamak istiyorum gdal, çünkü ilk kez sahip değilim).


-Co döşeli = evet -co bigtiff = evet -co sıkıştır = jpeg -co fotometrik = ycbcr denedim ve -co TILED = evet -co BLOCKXSIZE = 512 -co BLOCKYSIZE = 512

Bu 2 komut iyi çalışıyor, ~ 700 Mb boyutunda. Tam olarak beklediğim bu.

Şimdi başka bir sorunum var: QGIS tarafından hızlı bir şekilde açılamıyor. 15 dakika beklemek zorundayım (ama QGIS tif'i başarıyla açmadan önce çıktım). Nedenini bilmiyorum. Ve benim android app, çalışmıyor (belki "kiremit = evet" nedeni). Kendi başıma bazı dokümanlar okumalıyım.


-Co döşeli = evet -co bigtiff = evet -co sıkıştır = jpeg -co fotometrik = ycbcr
user30184

Yanıtlar:


2

Çıktı görüntünüz, girdi görüntülerinizin toplamından daha fazla piksele sahip olacaktır, ancak bu büyük farkı açıklamaz. Hangi sıkıştırmanın kullanıldığını görmek ve uzantıların doğru olup olmadığını kontrol etmek için gdalinfo'ya dayalı görüntülerinizin özelliklerine bakmanızı öneririm. (giriş görüntülerinizin aynı boyutta olduğu varsayılarak, giriş görüntüleri başına 5000 görüntü için büyük olan 20000 * 12000 piksel yapar, belki mozaiği oluştururken koordinat sisteminizin kapsamını geçiyorsunuzdur.) O zaman resimlerinizin piksel derinliğine bakın: girişiniz Bayt'daysa, bayt tutmalısınız.

gdal_translate -of Gtiff -ot Byte -co COMPRESS=LZW test.vrt test.tif 

Açıklama 1: Bir vrt oluşturmadan önce resimlerinizi jpeg'e dönüştürmek yardımcı olmaz (bir sonraki adımdan önce sıkıştırılmayacaktır) ve verileri kaybedebilirsiniz.

Açıklama 2: vrt kullanmak yardımcı olur: GTiff'e ihtiyacınız olduğundan emin misiniz?

EDIT: Resimlerinizin boyutu ile mucize yok, ancak jpeg sıkıştırmasını büyük verilerinizle kullanabilmeniz için çıktı olarak döşenmiş bir tif kullanmalısınız (-co TILED = yes -co BLOCKXSIZE = 512 -co BLOCKYSIZE = 512 ). Çok büyük kalırsa, tek çözüm daha düşük çözünürlükte yeniden örneklemek için gdalwarp kullanmaktır.


ısırık geliyor: eğer giriş 8bit ile tif ve ihracat varsayılan olarak 32bit ise ciddi sorun yaşayacaksınız. bu nedenle bayt tanımınızı olduğu gibi tuttuğunuzdan emin olun. Ve unutmayın: tam tif prob olacak. tiff her zaman dikdörtgen olduğu için 20x50mb.
Riccardo

Nereden 20000 x 12000 aldın? Soruda gösterilen çıktı, giriş görüntüsünün 79841 x 59955 olduğunu gösterir.
Evil Genius

79841, 59955, giriş vrt boyutudur. ancak 5 satır ve 4 sütun vardır, bu yüzden ~ 80000'ü 4 ve ~ 60000'ü 5'e böldüm. Bu dediğim gibi, görüntülerin aynı boyuta sahip olduğunu ve şekilde olduğu gibi konumlandığını varsayar.
radouxju

Orijinal sorumu düzenleyerek cevap verdim, umarım devam etmek zorundayım.
grimdaemon
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.