圧縮されたGeoTIFFファイルを生成するようにGDALを設定する必要がありますか?どのアルゴリズムを使用する必要がありますか?


51

主にGeoTIFFファイルで構成されるGISデータのフォルダーがあります。全体のセットの重量は約1.2 GBです。内容をtarballにパックすると、約になり82 MBます。セットをリビジョン管理システムにチェックインして、他の人が作業できるようにします。絞り込めるスペースがあるようです。

GDAL GeoTIFF ドライバーページには、圧縮されたGeoTIFFファイルの作成に使用できるオプションが多数リストされています。また、各アルゴリズムの動作方法に影響する多くのオプションがあります。

ヘルプページは、オプションの説明に優れていますが、アルゴリズムの選択方法や、さまざまなレベルの圧縮に関連するトレードオフについて詳しく説明していません。これは、次の質問につながります。

  • 圧縮を使用する利点は、スペースを大幅に節約できることです。短所は何ですか?画像を圧縮すると情報は失われますか?

  • アルゴリズムと圧縮レベルを選択するにはどうすればよいですか。ある種の画像は特定のアルゴリズムに適していますか?

回答:


85

圧縮方法を選択するには、次のようなコマンドを使用する必要があります。

gdal_translate -co "COMPRESS=method" src_dataset dst_dataset

圧縮を使用する場合、最大のトレードオフは画像の圧縮解除に必要な余分な処理時間であり、圧縮解除後も画像は同じ量のメモリを消費します。情報の損失については、2つの基本的な圧縮タイプがあります

  • ロスレス-元のデータ値を保持します
  • 損失あり-データを劣化させてスペースをさらに節約します

DEMやラスターフィーチャなど、元のデータ値を保持する必要がある場合は、ロスレスアルゴリズムを使用します。PACKBITSDEFLATE、およびLZWなどのアルゴリズムはロスレスであり、圧縮率に応じて注文できます。

  1. LZW-最高の圧縮率、最高の処理能力
  2. 収縮
  3. PACKBITS-最低の圧縮率、最低の処理能力

圧縮率は依然としてデータに依存しています。データに類似した値が多数ある場合、PACKBITSは良い結果をもたらします。

ロスレスとは異なり、JPEGなどの損失の多いアルゴリズムを使用して、正確な値を返す必要のないラスターを圧縮します。たとえば、正射写真または衛星画像は、非可逆アルゴリズムを使用して圧縮できます。


5
素敵な答えのために+1。PACKBITSは、ランレングスエンコーディング(en.wikipedia.org/wiki/Run-length_encoding)の形式であり、隣接する同じ値が多数あるデータ(たとえば、多数のNULLまたは分類されたラスターがある場合)に適しています。 LZWは、より堅牢なアルゴリズムであり、より多くの種類のデータに効果的です。前述のように、一般的なトレードオフはスペースと速度の間で行われるため、適切なものは使用方法とデータによって異なります。また、一部のソフトウェアは特定の種類のGeoTiff圧縮をサポートしていません。
scw

3
これは良い、関連するポストであるlinfiniti.com/2011/05/...
oeon

1
良い答え、それはあなたのオプションをうまく要約しています。また、これらの圧縮方法にはそれぞれ設定可能なパラメータがあり、結果に大きな影響を与えることに注意してください。@ j03lar50n、喜んであなたは...私のブログの記事が有用であることが判明
R Thiedeを

美しい答え!とてもシンプルで正しい。
sys49152

@scwは、特定のタイプの圧縮をサポートしていないソフトウェアについて詳しく説明できますか?具体的には、lzwまたはpackbitsをサポートしないソフトウェアはありますか?それとも、あまり一般的ではないアルゴリズムについて言及していますか?
デビッドルバウアー

29

lzwし、deflate使用して圧縮-co predictor=2ではなく絶対値の画素に画素からの差分を圧縮するように滑らかに変化する画像と缶の助けをし、これらが小さくなる傾向があり、より多くのパターン(有することになるREFを)。予測のみで有用であるlzwdeflate圧縮、オプションは、他の方法と効果はありません。

gdal_translate -co compress=lzw -co predictor=2 ...

予測子の節約は劇的です。デフォルトのLZW設定で最大17GBを使用する16ビットジオティフ標高モデルのディレクトリを、predictor = 2でわずか5GBに再圧縮しました。

予測子2と3の違いと、それぞれが最適に適用されるタイミング(ref1ref2)に関して矛盾する情報があります。おそらく別の質問の燃料になります。

節約のための別の簡単なオプションは-co tiled=yesです。タイル化された画像を読み取れないソフトウェアがいくつかありますが、それらはますます少なくなり、ほとんどGISの外部にあります(現在、それらを読み取らないメインストリームGISソフトウェアは知りません)。

圧縮されたオーバービュー使用する @alfonxの答えに基づいて:これにより、データの整合性のためにベースイメージをロスレスに保存し、速度とスペースを節約するためにピラミッドを非可逆的に保存できます。それは両方の世界のほぼ最高です。gdaladdoRGB画像で可能な限り最小の概観:デフォルトの最近傍の代わりにjpeg圧縮、平均化またはガウスリサンプリング(概観を滑らかにする)、およびYCBCR測光概観を使用します。これらのオプションの詳細については、gdaladdoのリファレンスページ参照してください(ただし、フォトメトリックと何かについてはあまり言及していません)。

これは、ディレクトリ内のすべてのTIFFに外部jpeg概要を適用するために使用するWindowsバッチファイルの一部です。

set _opts= -r gauss --config PHOTOMETRIC_OVERVIEW YCBCR ^
--config COMPRESS_OVERVIEW JPEG --config JPEG_QUALITY_OVERVIEW 85

for %%a in (*.tif) do gdaladdo -ro %_opts% %%a 2 4 8 16 32 64

ノート

GDAL 1.6.0を導入しgauss、より良い結果をもたらすことができるリサンプリングaverage高いコントラストやノイズの多いパターンで鋭いエッジの場合です。2レベルの累乗(2 4 8 ...)を使用して、3x3のリサンプリングガウスカーネルを選択する必要があります。

JPEG_QUALITY_OVERVIEW 85 -指定されていない場合、デフォルトの75%が使用され、ファイルが小さくなりますが、サイズと品質のトレードオフの点で85%がより良い妥協点であることがわかります。

2015年の更新: GDAL 1.8および2.0には、ここで説明されていない多くの新しいオプションが導入されており、それらを消化する時間がありませんでした。公式のgtiff形式のページを読んでください。詳細な有用な設定が追加されているはずです


10

大きなラスターの場合、GeoTiffは、(事前)ダウンスケールされた概要を追加の画像としてGeoTiffファイルに保存する可能性を提供します。これは、gdaladdo(= GDAL ADD Overview)で実行できます。これらの概要を作成するとき、gdalにそれらを圧縮するように手動で指示できます。

gdaladdo --config COMPRESS_OVERVIEW JPEG 

サイズを大きくしすぎることなくデータの表示を高速化します。注:Geoserver、uDig、AtlasStyler、GeopublisherなどのGeotoolsアプリケーションはすべてこの機能を使用でき、概要から利益を得ることができます。



4

最終的には、おそらくさまざまなオプションを試して、ニーズを満たすものを確認する必要があります。

私は、ウェーブレットベースのフォーマットよりもJPEG圧縮されたGeoTIFFの使用を増やしています。私の結果はかなり良かった。これを行うためにGDALを使用すると、データをあまり失うことなく、ウェーブレットベースのフォーマットに匹敵する圧縮率が得られます。解凍に伴うパフォーマンスヒットは許容範囲内です。

このアプローチで最も気に入っているのは、GeoTIFFのサポートがほぼ普遍的である一方で、ウェーブレットベースのフォーマットのサポートが常に保証されているわけではなく、時々厄介なライセンスの問題が発生することです。


3

GeoTIFFとEarth Resource MappingのECW(Enhanced Compressed Wavelet)圧縮を比較した私の経験では、高解像度の航空写真を圧縮する場合、ECWは桁違いに優れています。ウェーブレットベースの圧縮のもう1つの重要な利点は、GeoTIFFなどの古い形式とは異なり、JPEG(JPEG 2000ではなく)であるため、画像の一部のみを解凍できることです[参照。1]。この利点の重要性を過小評価してはなりません。特に、「コンピューターのメモリサイズの約半分以上」で作業する場合です。

別のプロプライエタリなウェーブレットベースのファイル形式であるMrSIDも、「古い」形式や選択的解凍よりも高い圧縮率を示しているようです。

ref。1:http : //www.ifp.uni-stuttgart.de/publications/phowo01/Ueffing.pdf


1
dariapra、GeoTIFF-PackbitsまたはGeoTIFF-LZWは可逆圧縮であり、ECWとJPEGは非可逆圧縮であることを忘れないでください。将来のデータ使用量に応じて、可逆圧縮または非可逆圧縮を慎重に選択する必要があります。
markusN

1
緩い圧縮形式が常に有効なストレージ形式であると主張しているわけではありません。私が言いたかったのは、ECWのようなフォーマットを使用することが、一部の実稼働環境に適しているということです。たとえば、WMSを介してortophotoレイヤーを提供するMapServerインスタンスがある場合、ECWはGeoTIFFよりも適切な形式です。ロスレス圧縮を使用してortophotoを保存することも禁止されていません。
ダリアプラ

3

@dodobas@ matt-wilkieの回答は、画像サイズを縮小するためにGDALで圧縮およびぼかしの動作に関連するほとんどすべてをカバーしています。

次の2つを追加します。

  • GDALからのファイル形式のドキュメント:http://www.gdal.org/frmt_gtiff.html
    • -co特に、作成オプション()を参照してください。
      • COMPRESS
      • NUM_THREADS
      • PREDICTOR
      • ZLEVEL
  • また、GeoTIFFを使用するソフトウェアが次のことを確認することが不可欠です。
    • 目的の圧縮方法をサポートします。
    • 圧縮を使用することをお勧めします。

たとえば、GeoServerはGeoTIFFの圧縮を推奨していませ

最後に、Geotiffはさまざまな種類の圧縮をサポートしていますが、使用しないことをお勧めします。はるかに小さいファイルを使用できますが、解凍プロセスは高価であり、各データアクセスで実行されるため、レンダリングが大幅に遅くなります。私たちの経験では、解凍時間は純粋なディスクデータの読み取りよりも長くなります。

これは、オーバービュー、タイル、および高性能ストレージメディア(エンタープライズグレードディスクまたはSSD)を既に使用している場合に特に当てはまります。


また、gdalin Pythonでラスターを配列に変換できないため、jpegイメージを圧縮する必要があります。メモリエラーが表示され、メモリ不足の場合もあります。pythonでこの行(gdal_translate -co "COMPRESS = method" src_dataset dst_dataset)をどのように実装すればよいか誰にも分かりますか?私はgdalを使用するのが初めてです。そのため、構造を理解するのが難しい場合があります。
シウリパービン

1
@ShiuliPervin、まず、JPEGはすでに圧縮(損失)形式です。第二に、圧縮ではなくチャンクの問題があるようです。ファイルを一度にすべてではなく、タイル、ストリップ、またはチャンクで読み取ります。ファイルが圧縮されている場合でも、使用する際には圧縮を解除する必要があります(例:4GBファイルが圧縮時にディスク上で2GBを使用する場合、処理のためにすべてロードされると4GBのRAMを占有します。代替の省スペース、あなたはの書式スパースに見てみたいことがありますGeoTIFFs
ケビン・

1
@ShiuliPervin、しかし、あなたの質問を誤解しているかもしれません。多くの場合、圧縮自体は大量のメモリを使用しますが、ライブラリにバグがあるか、無効な引数が与えられない限り、システムをオーバーフローさせないでください。GeoTIFFの圧縮タイプとしてJPEGに問題がある場合は、LZMAまたはDEFLATEを試してください。
ケビン

0

新しいGDALバージョンを使用している場合は、ロスレスZStandardZSTD)圧縮(GDAL> = 2.3)および不可逆的なLimited Error Raster CompressionLERC)圧縮(GDAL> = 2.4)の選択肢もあります。

一般的に、けれども話すZSTD申し出速くデータが両方よりも速度を読んでLZWDEFLATE、ファイルを書き込むとき、それは(あなたが使用しているものの設定に応じて)多少遅くなることができますが、同様の圧縮比を持ちます。

データの精度についてそれほど混乱していない場合(たとえば、分析ではなく視覚化のみを行う場合)はLERC、適切なオプションです。MAX_Z_ERRORどれだけの精度を犠牲にするかを微調整できる設定があります。たとえば、a MAX_Z_ERROR=0.001または1mmは、1つのベンチマークで50%のスペースを節約しました(refを参照)。

最良の部分はあなたにも組み合わせることができるということですLERCZSTD使用しますCOMPRESS=LERC_ZSTD!または、使用DEFLATEしたい場合は、できますCOMPRESS=LERC_DEFLATE。公式GDAL GeoTIFFのドキュメントhttps://gdal.org/drivers/raster/gtiff.html#creation-optionsの組み合わせ/設定の完全なリストも参照してください。

詳細とベンチマークの完全な比較については、次の貴重なリファレンスをご覧ください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.