Membagi gambar .tif menjadi beberapa ubin? [Tutup]


13

Saya memiliki gambar ukuran 1GB (.tif), dengan lebar dan tinggi 94000x71680. Saya ingin memotong gambar ini menjadi ubin 20000X20000 sehingga saya dapat memprosesnya.

Bagaimana saya bisa melakukan ini?


Anup, github.com/mapbox/rasterio akan memberi Anda numpy array data input Anda. Anda dapat membaginya dengan menggunakan metode nipy o scipy dan menyimpan setiap bagian ke file baru dengan mudah. Apakah solusi seperti itu memenuhi syarat? Jika demikian, Anda perlu mengatakan bagaimana "bit yang tidak rata" (71680 tidak habis dibagi 20000) harus diperlakukan.
bugmenot123

Jawaban:


23

Saya mengusulkan dua solusi: yang pertama menggunakan QGIS, yang kedua menggunakan Python (GDAL).


Solusi menggunakan QGIS

Di QGIS Anda dapat membuat mosaik VRT.

Silakan ikuti prosedur ini (lihat gambar di bawah):

  1. Muat raster di Panel Layers ;
  2. Klik kanan padanya dan pilih Save As...;
  3. Periksa Create VRTopsi;
  4. Pilih folder tempat output Anda akan disimpan;
  5. Tetapkan batasnya (jika Anda ingin bekerja di seluruh raster, jangan modifikasi apa pun);
  6. Pilih jika menggunakan resolusi saat ini (saya sarankan untuk membiarkannya sebagai default);
  7. Tetapkan jumlah maksimum kolom dan baris (dalam kasus Anda, itu harus 20.000 kolom dan 2000 baris);
  8. Tekan OKtombolnya.

masukkan deskripsi gambar di sini

Misalnya, penggunaan parameter dalam dialog di atas pada raster sampel ini (parameter yang saya set dipilih secara acak):

masukkan deskripsi gambar di sini

akan menghasilkan 100 ubin di jalur yang ditentukan pada langkah 4:

masukkan deskripsi gambar di sini

Memuatnya di QGIS, mereka terlihat seperti ini:

masukkan deskripsi gambar di sini

Seperti @ bugmenot123 dengan benar katakan di komentar, hasilnya terlihat aneh hanya karena gaya setiap gambar cocok dengan distribusi nilai per gambar (tetapi data baik-baik saja).


Solusi menggunakan Python (GDAL)

Cara lain untuk mendapatkan hasil yang sama adalah penggunaan GDAL ( gdal_translate ).

Dengan merujuk pada contoh yang sama yang dijelaskan di atas, Anda dapat menggunakan skrip ini:

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)

Anda jelas perlu menyesuaikan nilai-nilai dengan kasus spesifik Anda.


2
Hanya komentar singkat bahwa contoh bagaimana QGIS membuat mereka terlihat aneh hanya karena gaya cocok dengan distribusi nilai per gambar . Data baik-baik saja :)
bugmenot123

Terima kasih, pertama-tama untuk jawaban Anda sangat membantu, Tetapi saya ingin mencapai hasil yang sama menggunakan python? Dapatkah Anda membantu saya mengenai hal itu juga karena lebih manual daripada diprogram begitu.
Anup Panwar

@ bugmenot123 Terima kasih, saya mengedit jawaban dengan komentar Anda yang bermanfaat.
mgri

@Anup Panwar, jika saya menemukan solusi dengan PyQGIS, saya akan mengedit jawaban saya! =)
mgri

@HowToInQGIS Terima kasih, untuk yang lain jika Anda menginginkan cara python yang juga akan membantu :)
Anup Panwar

5

Jangan berpisah

Anda gdalbuildvrt , Anda dapat membuat ubin virtual yang hanya akan menggunakan beberapa byte pada disk Anda. Kemudian Anda dapat menggunakan sebagian besar perangkat lunak yang akan mengambil vrt Anda sebagai input untuk melakukan pemrosesan Anda.

Sebagai alternatif, saya lebih suka mencari alat yang dapat bekerja dengan gambar 1Gb daripada memecah dan menggabungkan gambar. Sebagai contoh, OTB memiliki sebagian besar kemampuan untuk pemrosesan gambar standar (dan terkadang canggih) dengan gambar besar. Anda dapat membungkus OTB untuk Python atau menjalankannya dari QGIS atau dari baris perintah.


2

Menggunakan alat Split Raster , Anda dapat membagi raster menjadi ubin berdasarkan beberapa metode pembagian termasuk ukuran setiap ubin atau jumlah ubin .

Juga lihat Memisahkan Raster di ArcGIS


2

Solusi lain menggunakan GDAL adalah alat 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

Untuk Informasi lebih lanjut, lihat: http://www.gdal.org/gdal_retile.html

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.