너비와 높이가 94000x71680 인 1GB (.tif) 크기의 이미지가 있습니다. 처리 할 수 있도록이 이미지를 20000X20000 타일로 청크하고 싶습니다.
어떻게해야합니까?
너비와 높이가 94000x71680 인 1GB (.tif) 크기의 이미지가 있습니다. 처리 할 수 있도록이 이미지를 20000X20000 타일로 청크하고 싶습니다.
어떻게해야합니까?
답변:
QGIS를 사용하는 첫 번째 솔루션과 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는 큰 이미지로 표준 (때로는 고급) 이미지 처리를위한 기능을 대부분 갖추고 있습니다. 당신은 할 수 OTB 포장 파이썬이나 QGIS에서 또는 명령 줄에서 실행합니다.
분할 래스터 도구를 사용하면 각 타일 의 크기 또는 타일 수를 포함하여 몇 가지 구분 방법을 기반으로 래스터를 타일로 분할 할 수 있습니다 .
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