サイズが1GB(.tif)で、幅と高さが94000x71680のイメージがあります。この画像を20000X20000タイルにチャンクして、処理できるようにします。
これどうやってするの?
サイズが1GB(.tif)で、幅と高さが94000x71680のイメージがあります。この画像を20000X20000タイルにチャンクして、処理できるようにします。
これどうやってするの?
回答:
私は2つのソリューションを提案します。1つ目はQGISを使用し、2つ目はPython(GDAL)を使用します。
QGISでは、VRTモザイクを作成できます。
この手順に従ってください(下の画像を参照):
Save As...
;Create VRT
オプションを確認してください。OK
ボタンを。たとえば、このサンプルラスタの上記ダイアログでのパラメータの使用(設定したパラメータはランダムに選択されます):
手順4で指定したパスに100個のタイルを生成します。
それらをQGISにロードすると、次のようになります。
@ bugmenot123がコメントで正しく述べているように、各画像のスタイルが画像ごとの値の分布に合っているというだけで、結果は奇妙に見えます(ただし、データはまったく問題ありません)。
同じ結果を得る別の方法は、GDAL(gdal_translate)の使用です。
上記と同じ例を参照して、このスクリプトを使用できます。
import os, gdal
in_path = 'C:/Users/Marco/Desktop/'
input_filename = 'dtm_5.tif'
out_path = 'C:/Users/Marco/Desktop/output_folder/'
output_filename = 'tile_'
tile_size_x = 50
tile_size_y = 70
ds = gdal.Open(in_path + input_filename)
band = ds.GetRasterBand(1)
xsize = band.XSize
ysize = band.YSize
for i in range(0, xsize, tile_size_x):
for j in range(0, ysize, tile_size_y):
com_string = "gdal_translate -of GTIFF -srcwin " + str(i)+ ", " + str(j) + ", " + str(tile_size_x) + ", " + str(tile_size_y) + " " + str(in_path) + str(input_filename) + " " + str(out_path) + str(output_filename) + str(i) + "_" + str(j) + ".tif"
os.system(com_string)
明らかに、値を特定のケースに適合させる必要があります。
分割しないでください
あなたはgdalbuildvrtあなただけのディスクに数バイトを使用する仮想タイルを作成することができ、。次に、vrtを入力として使用して処理を実行するほとんどのソフトウェアを使用できます。
別の方法として、画像を分割してマージするよりも、1Gbの画像で動作できるツールを探します。たとえば、OTBには、大きな画像を使用した標準の(場合によっては高度な)画像処理のほとんどの機能があります。Python用のOTBをラップするか、QGISまたはコマンドラインから実行できます。
ラスタ分割ツールを使用すると、各タイルのサイズやタイルの数など、いくつかの分割方法に基づいてラスタをタイルに分割できます。
ArcGISでのラスターの分割も参照してください。
GDALを使用する別のソリューションは、gdal_retile.pyツールです。
mkdir image_tiles
gdal_retile.py -v -r bilinear -levels 1 -ps 20000 20000 -co "TILED=YES" -co "COMPRESS=JPEG" -targetDir image_tiles big_input_image.tif
詳細については、http://www.gdal.org/gdal_retile.htmlを参照してください