将.tif图片分割成几个图块?[关闭]


13

我有一个大小为1GB(.tif),宽度和高度为94000x71680的图像。我想将此图像分成20000X20000个图块,以便我可以对其进行处理。

我怎样才能做到这一点?


Anup,github.com/mapbox/rasterio将为您提供输入数据的numpy数组。您可以使用numpy o scipy方法将其拆分,然后轻松地将每个部分保存到新文件中。这样的解决方案合格吗?如果是这样,您需要说出应如何对待“不均匀位”(71680不能被20000整除)。
bugmenot123 '16

Answers:


23

我提出了两种解决方案:第一种使用QGIS,第二种使用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如何渲染它们的示例看起来很奇怪,因为该样式适合每个图像的值分布。数据非常好:)
bugmenot123 '16

谢谢,首先对您的回答确实有帮助,但是我想使用python达到相同的结果吗?您还能帮我吗,因为它是手动的,而不是编程的。
Anup Panwar

@ bugmenot123谢谢,我用您的有用评论来编辑答案。
mgri

@Anup Panwar,如果我找到PyQGIS的解决方案,我将编辑答案!=)
mgri

@HowToInQGIS谢谢,否则,如果您想使用python方式也将有所帮助:)
Anup Panwar

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.