複数のラスターのマージの結果がなぜそれほど大きいのですか?[閉まっている]


10

私はこのように14のgeotiffをマージしようとします:

ここに画像の説明を入力してください

各geotiffは約50Mbです。出力にgeotiffが必要です

私のワークフロー:

gdalbuildvrt -input_file_list list.txt test.vrt 

(私のリストにはtifの名前が含まれています)

次に:

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

動作しますが、結果は13,3 Gbのgeotiffです!14個のファイル(それぞれ50 Mb)について、13 Gbではなく700 Mbのgeotiffを試みました。

gdalはデフォルトでは圧縮しないことを知っているので、次のコマンドを試しました。

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

しかし、ファイルの「マージ」は、JPEG圧縮には大きすぎます。

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
...

そこで、別のワークフローを試し、すべてのtifをjpegに変換し(各14 Mb)、vrtファイルを作成して、LZW圧縮で変換しました。しかし、出力geotiffは約5 Gbです。

その仕事をするためのベストプラクティスは何ですか、そして14 * 50Mbの1つのgeotiffを取得することが可能かどうか教えてください。

私はそれを試しませんでしたが、PhotoshopでこのTIFをマージしてから、左上/右下の座標で地理参照を再作成することを考えました。このワークフローでは、14 * 50 Mbになると思いますが、よくわかりません。そして、gdalのベストプラクティスを学びたいので、今のところは試しませんでした


噛み付く:入力が8ビットのtifで、エクスポートがデフォルトで32ビットの場合、深刻な問題が発生します。そのため、バイト定義をそのまま維持するようにしてください。そして覚えておいてください:完全なtifは問題を起こします。ティフは常に長方形なので、20x 50mb

私が理解している場合、このスクリーンショットで緑色で示した数字は、左側と右側で同じである必要がありますか?

ビット

出力画像のピクセル数は入力画像の合計よりも多くなりますが、これは大きな違いを説明するものではありません。使用されている圧縮を確認し、範囲が正しいことを確認するために、gdalinfoに基づいて画像の特性を確認することをお勧めします。

50 Mbの14 tifは、もともと-co COMPRESS = JPEGを使用してgdal_translateで処理した700 Mbの14 tifでした。Mbの数を減らすためにラスターを圧縮しましたが、多分それは良い考えではありませんでしたか?

このスクリーンショットは、同じgeotiff(01.tif)の2つのgdal情報を表しています。スクリーンショットの左側は、700 Mbの非圧縮Gtiffのgdalinfoであり、COMPRESS = JPEGで同じGtiffを右に終了します。 50 Mb、緑色の差分:

01.tifファイルのgdalinfoを非圧縮および圧縮する

私によれば、qgisでは他のデータソースや衛星画像と一致するため、範囲は正しいです。

*入力画像のサイズが同じであるとすると、入力画像あたり20000 * 12000ピクセルになります。これは、50 Mbの画像では大きいため、モザイクを作成するときに座標系の範囲と交差している可能性があります。*

「範囲を超える」という意味がわかりません。しかし、私はQGISで5 Gb LZWを開こうとしましたが、他のデータソースと一致するため、範囲は良好です。

あなたの答えは私にGtiffが同じサイズではないことを理解させます、あなたはそれがマージされたときにサイズの増加の原因である可能性があると思いますか?gdalは同じサイズのファイルを好むからです。サイズを取得するために各Gtiffにgdalinfoを作成しました。Gtiffのサイズには非常に小さな違いがあります。

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

次に、画像のピクセル深度を確認する必要があります。入力がバイト単位の場合、>バイトを保持する必要があります。gdal_translate -of Gtiff -ot Byte -co COMPRESS = LZW test.vrt test.tif

私はこのコマンドを試してみましたが、gdalはtiffのサイズを超えたと教えてくれました。

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.

しかし、大きなTIFFを作成する必要がある場合、4 GBを超えるため、問題は解決しません。私の場合、ピクセル深度は重要ですか?(地図のHD写真、ジオリファレンス、DEMではない)

備考1:vrtをビルドする前に画像をjpegに変換しても効果がなく、データが失われる可能性があります。

少し情報を失ってもかまわない。もちろん、緩めたくないのですが、緩めても問題ありません。jpegを使用すると出力が軽くなると確信していましたが、結論として、出力がGtiffの場合はそうではありません。したがって、これは良い解決策ではありません。私はこの解決策をあきらめます。

>備考2:vrtを使用すると便利です:GTiffが必要ですか?

はい、Gtiffが必要です。これは、Geoiff入力を機能させる必要があるモバイルアプリケーションにインポートする必要があるためです(アプリは地理空間PDF入力も受け取ることができると思いますが、私はGtiffを使用することはなく、問題を理解したいと思います。 gdal、それが私がそれを持っているのは初めてではないので)。


私は-co tiled = yes -co bigtiff = yes -co compress = jpeg -co photometric = ycbcrを試してみました-co TILED = yes -co BLOCKXSIZE = 512 -co BLOCKYSIZE = 512

これらの2つのコマンドはうまく機能します。サイズは約700 Mbです。それはまさに私が期待したものです。

今、私は別の問題を抱えています:QGISですばやく開くことができません。15分待つ必要があります(ただし、QGISがtifを正常に開く前に終了します)。理由はわかりません。私のAndroidアプリでは機能しません(おそらく「tiled = yes」の原因です)。自分でいくつかのドキュメントを読む必要があります。


-co tiled = yes -co bigtiff = yes -co compress = jpeg -co photometric = ycbcr
user30184

回答:


2

出力画像のピクセル数は入力画像の合計よりも多くなりますが、これは大きな違いを説明するものではありません。使用されている圧縮を確認し、範囲が正しいことを確認するために、gdalinfoに基づいて画像の特性を確認することをお勧めします。(入力画像のサイズが同じであるとすると、入力画像あたり20000 * 12000ピクセルになります。これは、50 Mbの画像の場合は大きいです。モザイクを作成するときに座標系の範囲と交差している可能性があります。)次に、画像のピクセル深度を確認します。入力がバイト単位の場合は、バイトを保持する必要があります。

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

備考1:vrtをビルドする前に画像をjpegに変換しても効果がなく(次のステップの前に解凍される)、データが失われる可能性があります。

備考2:vrtを使用すると便利です:GTiffが必要ですか?

編集:画像のサイズに奇跡はありませんが、大きなデータでjpeg圧縮を使用できるように、タイル化されたtifを出力として使用する必要があります(-co TILED = yes -co BLOCKXSIZE = 512 -co BLOCKYSIZE = 512 )。それが大きすぎる場合、唯一の解決策は、gdalwarpを使用して低い解像度でリサンプリングすることです。


噛み付く:入力が8ビットのtifで、エクスポートがデフォルトで32ビットの場合、深刻な問題が発生します。そのため、バイト定義をそのまま維持するようにしてください。そして覚えておいてください:完全なtifは問題を起こします。ティフは常に長方形なので、20x 50mbです。
リカルド2014

20000 x 12000はどこから入手しましたか?疑問に示す出力は、入力画像が79841 X 59955.であることをお勧め
悪の天才

79841、59955は入力vrtのサイズです。5行4列なので、〜80000 x 4と〜60000 x 5に分割しました。前述のとおり、これは画像が同じサイズで、図のように配置されていることを前提としています。
radouxju 14

元の質問を編集して回答しました。続行しなければならないような感じです。
grimdaemon 2014
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.