.Tif görüntüsünü birkaç döşemeye bölme? [kapalı]


13

Genişliği ve yüksekliği 94000x71680 olan 1GB (.tif) boyutunda bir resmim var. Bu görüntüyü işlemek için 20000X20000 fayans içine yığınlamak istiyorum.

Bunu nasıl yapabilirim?


Anup, github.com/mapbox/rasterio size giriş verilerinizin sayısal dizisini verecektir. Bunu numpy o scipy yöntemlerini kullanarak bölebilir ve her parçayı kolayca yeni bir dosyaya kaydedebilirsiniz. Böyle bir çözüm uygun olur mu? Eğer öyleyse, "düzensiz bitlerin" (71680, 20000'e kadar temiz bir şekilde bölünemez) nasıl tedavi edilmesi gerektiğini söylemelisiniz.
bugmenot123

Yanıtlar:


23

İki çözüm öneriyorum: birincisi QGIS, ikincisi Python (GDAL) kullanıyor.


QGIS kullanarak çözüm

QGIS'te bir VRT mozaiği oluşturabilirsiniz.

Lütfen bu prosedürü izleyin (aşağıdaki resme bakın):

  1. Raster'i Katmanlar Paneline yükleyin ;
  2. Üzerine sağ tıklayın ve seçin Save As...;
  3. Kontrol Create VRTseçeneği;
  4. Çıktılarınızın kaydedileceği klasörü seçin;
  5. Kapsamı ayarlayın (tüm raster üzerinde çalışmak istiyorsanız, hiçbir şeyi değiştirmeyin);
  6. Mevcut çözünürlüğü kullanıp kullanmadığınızı seçin (varsayılan olarak bırakmanızı öneririm);
  7. Maksimum sütun ve satır sayısını ayarlayın (sizin durumunuzda, 20000 sütun ve 2000 satır olmalıdır);
  8. Düğmesine basın OK.

resim açıklamasını buraya girin

Örneğin, bu örnek taramada yukarıdaki iletişim kutusundaki parametrelerin kullanılması (ayarladığım parametreler rastgele seçilir):

resim açıklamasını buraya girin

4. adımda belirtilen yolda 100 kutucuk oluşturur:

resim açıklamasını buraya girin

Onları QGIS'e yüklüyorlar, şöyle görünürler:

resim açıklamasını buraya girin

@ Bugmenot123 yorumlarda doğru bir şekilde söylediği gibi, sonuç her bir resmin stilinin görüntü başına değer dağılımına uyması nedeniyle garip görünüyor (ancak veriler mükemmel derecede iyi).


Python (GDAL) kullanarak çözüm

Aynı sonucu elde etmenin başka bir yolu da GDAL ( gdal_translate ) kullanılmasıdır.

Yukarıda açıklanan aynı örneğe istinaden, bu komut dosyasını kullanabilirsiniz:

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)

Değerleri özel durumunuza göre uyarlamanız gerekir.


2
QGIS'in onları nasıl oluşturduğuna dair bir örnek, stilin görüntü başına değerlerin dağılımına uyması nedeniyle garip görünüyor . Veriler gayet iyi :)
bugmenot123

Teşekkürler, öncelikle cevabınız için gerçekten yararlı, Ama ben python kullanarak aynı sonucu elde etmek istiyorum? Bana bu konuda da yardım edebilir misin Çünkü programlı olmaktan çok daha manuel.
Anup Panwar

@ bugmenot123 Teşekkürler, yararlı yorumunuzla yanıtı düzenliyorum.
mgri

@Anup Panwar, PyQGIS ile bir çözüm bulursam cevabımı düzenleyeceğim! =)
mgri

@HowToInQGIS Python'da da yardımcı olacak bir yol istiyorsanız, teşekkürler
Anup Panwar

5

Bölme

Sen gdalbuildvrt yalnızca diskte birkaç bayt kullanacak sanal fayans oluşturabilir. Ardından, işleminizi gerçekleştirmek için vrt'lerinizi girdi olarak alacak çoğu yazılımı kullanabilirsiniz.

Alternatif olarak, bir görüntüyü bölmek ve birleştirmekten ziyade 1Gb görüntü ile çalışabilen bir araç arıyorum. Örneğin, OTB büyük görüntülerle standart (ve bazen gelişmiş) görüntü işleme yeteneklerinin çoğuna sahiptir. Sen edebilirsiniz OTB sarın Python için veya QGIS veya komut hatlarından çalıştırın.


2

Bölme Raster aracını kullanarak, her bir döşemenin boyutu veya döşeme sayısı dahil olmak üzere birkaç bölme yöntemine dayalı olarak bir raster döşemeye bölebilirsiniz .

Ayrıca bkz . ArcGIS'te Raster Bölme


2

Kullanılarak başka bir çözüm GDAL olan gdal_retile.py aracı:

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

Daha fazla bilgi için bkz. Http://www.gdal.org/gdal_retile.html

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.