遥感影像数据处理-大图滑窗切分为小图

功能需求

据所周知,遥感影像的尺寸有大有小,大的达到几万x几万像素,而图像分割算法模型在训练中尺寸适中,比如256x256,512x512,1024x1024等等,如果直接将遥感影像的原图输入模型中进行训练,大概率会提示内存和显存不足,因此针对遥感影像的模型训练,一般都需要将影像裁剪为小图。裁剪后的效果图如下:


遥感影像数据处理-大图滑窗切分为小图_第1张图片

解决思路

基于上面的需求,写了一套裁剪算法流程。主要考虑的是在裁剪过程中,从左往右、从上到下依次裁剪,这里有很多参数需要设置,比如小图尺寸大小、裁剪步长、是否需要向外填充,同时,如果最后一列或一行单元块不足一个小图大小该如何处理。主要代码块如下:

def sample(self, top_x, top_y, down_x, down_y):
    xsize, ysize = self.win_size
    xpad, ypad = self.pad_size
    xmin = top_x - xpad if top_x - xpad >= 0 else 0
    ymin = top_y - ypad if top_y - ypad >= 0 else 0
    xmax = down_x + xpad if down_x + xpad <= self.width else self.width
    ymax = down_y + ypad if down_y + ypad <= self.height else self.height
    xblock, yblock = xmax - xmin, ymax - ymin
    left, top, right, bottom = 0, 0, 0, 0
    left = xpad - top_x if top_x - xpad < 0 else 0
    top = ypad - top_y if top_y - ypad < 0 else 0
    if down_x - top_x < xsize:
        right = xsize - (down_x - top_x) + xpad
    else:
        if down_x + xpad > self.width:
            right = down_x + xpad - self.width
    if down_y - top_y < ysize:
        bottom = ysize - (down_y - top_y) + ypad
    else:
        if down_y + ypad > self.height:
            bottom = down_y + ypad - self.height

当前代码可同时支持下面几个功能:

  • 小图大小自由设定
  • 滑动步长自由设定
  • 外扩填充大小自由设定
  • 是否需要不足一个尺寸大小的小图
  • 原图带地理坐标信息,裁剪后小图也带地理坐标信息

获取本博客全部代码资料或咨询交流见 博主首页→个人简介
1、本博客相关代码;
2、指导代码运行;
3、同类任务咨询交流;

你可能感兴趣的:(遥感,语义分割)