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?
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?
Yanıtlar:
İki çözüm öneriyorum: birincisi QGIS, ikincisi Python (GDAL) kullanıyor.
QGIS'te bir VRT mozaiği oluşturabilirsiniz.
Lütfen bu prosedürü izleyin (aşağıdaki resme bakın):
Save As...
;Create VRT
seçeneği;OK
.Örneğin, bu örnek taramada yukarıdaki iletişim kutusundaki parametrelerin kullanılması (ayarladığım parametreler rastgele seçilir):
4. adımda belirtilen yolda 100 kutucuk oluşturur:
Onları QGIS'e yüklüyorlar, şöyle görünürler:
@ 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).
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.
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.
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
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