遥感矢量和影像制作voc数据集的全流程及代码

今天分享一个遥感矢量和影像制作voc数据集的全流程及代码。

1

假设我现在有一个shp文件和四波段5000x5000大小的tif影像,我的需求是需要对tif进行滑窗切割,最后制作VOC格式的数据集。

首先,滑窗切割tif部分应该不难。使用GDAL库读取图像数据,然后用numpy进行切片。

步长和窗口大小可以自定义,比如常见的512x512或1024x1024窗口,步长可以是固定或者重叠的。

接下来是处理矢量数据。shp文件中的每个多边形或者其他几何形状需要被转换到对应的图像坐标系中。

这里的关键是地理坐标到像素坐标的转换,以及滑窗后的每个小图的坐标范围。需要将shp中的每个几何要素与每个切割后的小图进行空间匹配,找到在该小图中的部分,并转换为像素坐标。

这个过程可以使用fiona或者ogr读取shp文件,然后根据每个切割窗口的地理范围,使用GDAL的地理变换参数来转换坐标。

需要注意的是,滑窗切割后的每个图像块的位置和对应的地理坐标需要准确对应。因此,在切割tif的时候,必须记录每个块的地理坐标范围或者每个块的偏移量,这样在处理shp的时候可以根据这些信息来裁剪相应的矢量区域。

代码结构包括以下几个步骤:

  1. 配置路径和参数(窗口大小、步长、输出目录等)。
  2. 滑窗切割大tif为小图块,保存为JPEGImages中的jpg文件,并记录每个图块的地理信息。
  3. 为每个切割后的图像块处理对应的shp文件中的标注,转换为VOC XML。
  4. 数据集划分(train/val/test)及生成对应的txt文件。