.tif画像をいくつかのタイルに分割しますか?[閉まっている]


13

サイズが1GB(.tif)で、幅と高さが94000x71680のイメージがあります。この画像を20000X20000タイルにチャンクして、処理できるようにします。

これどうやってするの?


また、github.com / mapbox / rasterioは、入力データのnumpy配列を提供します。numpy o scipyメソッドを使用してそれを分割し、各ファイルを新しいファイルに簡単に保存できます。そのようなソリューションは資格がありますか?その場合、「不均等ビット」(71680は20000までにきれいに分割できない)をどのように処理するかを指定する必要があります。
bugmenot123

回答:


23

私は2つのソリューションを提案します。1つ目はQGISを使用し、2つ目はPython(GDAL)を使用します。


QGISを使用したソリューション

QGISでは、VRTモザイクを作成できます。

この手順に従ってください(下の画像を参照):

  1. レイヤーパネルにラスターをロードします。
  2. それを右クリックして選択しますSave As...;
  3. Create VRTオプションを確認してください。
  4. 出力を保存するフォルダーを選択します。
  5. 範囲を設定します(ラスター全体で作業する場合は、何も変更しないでください)。
  6. 現在の解像度を使用するかどうかを選択します(デフォルトのままにすることをお勧めします)。
  7. 列と行の最大数を設定します(この場合、20000列と2000行にする必要があります)。
  8. 押しOKボタンを。

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

たとえば、このサンプルラスタの上記ダイアログでのパラメータの使用(設定したパラメータはランダムに選択されます):

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

手順4で指定したパスに100個のタイルを生成します。

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

それらをQGISにロードすると、次のようになります。

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

@ bugmenot123がコメントで正しく述べているように、各画像のスタイルが画像ごとの値の分布に合っているというだけで、結果は奇妙に見えます(ただし、データはまったく問題ありません)。


Pythonを使用したソリューション(GDAL)

同じ結果を得る別の方法は、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)

明らかに、値を特定のケースに適合させる必要があります。


2
スタイルが画像ごとの値の分布に適合するという理由だけで、QGISがそれらをレンダリングする方法の例が奇妙に見えるという簡単なコメント。データはまったく問題あり
ません

おかげで、まずあなたの答えは本当に役に立ちましたが、Pythonを使用して同じ結果を達成したいですか?それについても私を助けてくれますか?それはプログラマティックではなくマニュアルだからです。
Anupパンワーゴム

@ bugmenot123ありがたいことに、あなたの役に立つコメントで答えを編集します。
mgri

@Anup Panwar、PyQGISで解決策を見つけたら、答えを編集します!=)
mgri

あなたは:)も役立つことをPythonで方法をしたい場合は、他のおかげで、@HowToInQGIS
Anupパンワーゴム

5

分割しないでください

あなたはgdalbuildvrtあなただけのディスクに数バイトを使用する仮想タイルを作成することができ、。次に、vrtを入力として使用して処理を実行するほとんどのソフトウェアを使用できます。

別の方法として、画像を分割してマージするよりも、1Gbの画像で動作できるツールを探します。たとえば、OTBには、大きな画像を使用した標準の(場合によっては高度な)画像処理のほとんどの機能があります。Python用のOTBラップするか、QGISまたはコマンドラインから実行できます。



2

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を参照してください

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