前言

数据增强是指对训练样本数据进行某种变换操作,从而生成新数据的过程。数据增强的根本目的是得到充足的样本数据量,避免模型训练过程中产生过拟合现象。

正文

对于遥感影像来说,由于成像过程传感器对同一地物在不同角度拍摄会在影像上展现出不同的位置和形态,所以经过变换的样本可以使模型更好地学习地物的旋转不变的特征,从而更好地适应不同形态的图像。因此我们对训练数据进行几何变换(包括水平翻转、竖直翻转以及对角翻转)的数据增强操作。原图像水平翻转垂直翻转对角翻转

代码实现:

因为如果多波段的话,利用OpenCV对图像进行翻转就会报错,所以我们使用numpy进行翻转的实现。

import gdal

import numpy as np

import os

import cv2

# 读取tif数据集

def readTif(fileName, xoff = 0, yoff = 0, data_width = 0, data_height = 0):

dataset = gdal.Open(fileName)

if dataset == None:

print(fileName + "文件无法打开")

# 栅格矩阵的列数

width = dataset.RasterXSize

# 栅格矩阵的行数

height = dataset.RasterYSize

# 波段数

bands = dataset.RasterCount

# 获取数据

if(data_width == 0 and data_height == 0):

data_width = width

data_height = height

data = dataset.ReadAsArray(xoff, yoff, data_width, data_height)

# 获取仿射矩阵信息

geotrans = dataset.GetGeoTransform()

# 获取投影信息

proj = dataset.GetProjection()

return width, height, bands, data, geotrans, proj

# 保存tif文件函数

def writeTiff(im_data, im_geotrans, im_proj, path):

if 'int8' in im_data.dtype.name:

datatype = gdal.GDT_Byte

elif 'int16' in im_data.dtype.name:

datatype = gdal.GDT_UInt16

else:

datatype = gdal.GDT_Float32

if len(im_data.shape) == 3:

im_bands, im_height, im_width = im_data.shape

elif len(im_data.shape) == 2:

im_data = np.array([im_data])

im_bands, im_height, im_width = im_data.shape

#创建文件

driver = gdal.GetDriverByName("GTiff")

dataset = driver.Create(path, int(im_width), int(im_height), int(im_bands), datatype)

if(dataset!= None):

dataset.SetGeoTransform(im_geotrans) #写入仿射变换参数

dataset.SetProjection(im_proj) #写入投影

for i in range(im_bands):

dataset.GetRasterBand(i + 1).WriteArray(im_data[i])

del dataset

train_image_path = r"Data\train\image"

train_label_path = r"Data\train\label"

# 进行几何变换数据增强

imageList = os.listdir(train_image_path)

labelList = os.listdir(train_label_path)

tran_num = len(imageList) + 1

for i in range(len(imageList)):

# 图像

img_file = train_image_path + "\\" + imageList[i]

im_width, im_height, im_bands, im_data, im_geotrans, im_proj = readTif(img_file)

# 标签

label_file = train_label_path + "\\" + labelList[i]

label = cv2.imread(label_file)

# 图像水平翻转

im_data_hor = np.flip(im_data, axis = 2)

hor_path = train_image_path + "\\" + str(tran_num) + imageList[i][-4:]

writeTiff(im_data_hor, im_geotrans, im_proj, hor_path)

# 标签水平翻转

Hor = cv2.flip(label, 1)

hor_path = train_label_path + "\\" + str(tran_num) + labelList[i][-4:]

cv2.imwrite(hor_path, Hor)

tran_num += 1

# 图像垂直翻转

im_data_vec = np.flip(im_data, axis = 1)

vec_path = train_image_path + "\\" + str(tran_num) + imageList[i][-4:]

writeTiff(im_data_vec, im_geotrans, im_proj, vec_path)

# 标签垂直翻转

Vec = cv2.flip(label, 0)

vec_path = train_label_path + "\\" + str(tran_num) + labelList[i][-4:]

cv2.imwrite(vec_path, Vec)

tran_num += 1

# 图像对角镜像

im_data_dia = np.flip(im_data_vec, axis = 2)

dia_path = train_image_path + "\\" + str(tran_num) + imageList[i][-4:]

writeTiff(im_data_dia, im_geotrans, im_proj, dia_path)

# 标签对角镜像

Dia = cv2.flip(label, -1)

dia_path = train_label_path + "\\" + str(tran_num) + labelList[i][-4:]

cv2.imwrite(dia_path, Dia)

tran_num += 1

后记

有问题欢迎留言评论,觉得不错可以动动手指点个赞同&喜欢

我的其他文字:馨意:keras遥感图像Unet语义分割(支持多波段&多类)​zhuanlan.zhihu.com馨意:遥感大图像深度学习忽略边缘(划窗)预测​zhuanlan.zhihu.com

unet图片数据增强_numpy实现深度学习遥感图像语义分割数据增强(支持多波段)相关推荐

  1. 深度学习遥感图像语义分割目标检测

    深度学习遥感图像语义分割&目标检测 代码见github: WangZhenqing-RS/2021Tianchi_RSgithub.com 图标 赛题描述 本赛题基于不同地形地貌的高分辨率遥感 ...

  2. 基于深度学习的图像语义分割技术概述之背景与深度网络架构

    本文为论文阅读笔记,不当之处,敬请指正.  A Review on Deep Learning Techniques Applied to Semantic Segmentation: 原文链接 摘要 ...

  3. 汇总 | 深度学习中图像语义分割基准数据集详解

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 汇总图像语义分割那些质量最好的数据集与常用benchmark数据集 ...

  4. 基于深度学习的图像语义分割技术概述之4常用方法

    本文为论文阅读笔记,不当之处,敬请指正. A Review on Deep Learning Techniques Applied to Semantic Segmentation:原文链接 4 深度 ...

  5. 基于深度学习的遥感影像语义分割数据预处理

    基于深度学习的遥感影像语义分割数据预处理 第一次处理数据,不熟练,仅供参考 数据预处理工具:Arcgis 第一步:下载遥感影像tif数据 根据实际需求选择感兴趣的遥感影像区域 数据来源:Google卫 ...

  6. HALCON 20.11:深度学习笔记(12)---语义分割

    HALCON 20.11:深度学习笔记(12)--- 语义分割 HALCON 20.11.0.0中,实现了深度学习方法. 本章解释了如何使用基于深度学习的语义分割,包括训练和推理阶段. 通过语义分割, ...

  7. 【Keras】基于SegNet和U-Net的遥感图像语义分割

    from:[Keras]基于SegNet和U-Net的遥感图像语义分割 上两个月参加了个比赛,做的是对遥感高清图像做语义分割,美其名曰"天空之眼".这两周数据挖掘课期末projec ...

  8. Keras】基于SegNet和U-Net的遥感图像语义分割

    from:[Keras]基于SegNet和U-Net的遥感图像语义分割 上两个月参加了个比赛,做的是对遥感高清图像做语义分割,美其名曰"天空之眼".这两周数据挖掘课期末projec ...

  9. 学习笔记-基于全局和局部对比自监督学习的高分辨率遥感图像语义分割-day1

    基于全局和局部对比自监督学习的高分辨率遥感图像语义分割-day1 摘要 一. 引言 摘要 最近,监督深度学习在遥感图像(RSI)语义分割中取得了巨大成功. 然而,监督学习进行语义分割需要大量的标记样本 ...

最新文章

  1. 东南亚智能金融决策平台Silot完成A 轮融资,SBI 领投...
  2. mysql安装check requirements出错_精心整理的mysql主从监控脚本,值得收藏
  3. 【开发环境】Mac 中安装 Python3 最新版本 ( 下载 Python 最新版本 | 安装 Python3 | 验证 Python3 )
  4. mac终端编写c语言,【新手提问】有知道用mac终端编c语言的网络编程的人吗?
  5. java学习之自定义异常
  6. NDK开发基础④增量更新之客户端合并差分包
  7. java NBA2010,关于一个NBA球队连续夺冠的SQL查询问题,解法很精妙~
  8. 我想外包开发一个预约类小程序,大概需要多少钱?
  9. php json_encode不要反斜杠,【json+encode让URL内容斜杠+不转义】
  10. binomial检验_SPSS中八类常用非参数检验之二:二项分布(Binomial)检验
  11. 正则表达式网站在线测试
  12. 关于【ROM制作工具】的那点事
  13. 小米手机,xxx正在删除小米账户上的联系人
  14. RabbitMq集成SpirngBoot
  15. 15天精读掌握《高德纳:具体数学》 第3天 2019.5.29
  16. C++“多态性”的实现与详细解说(学习来源于---清华大学 郑莉老师){附源码}
  17. 12.10 Daily Scrum
  18. 新手学习MAYA,需要知道的10个技巧!
  19. php发送邮箱乱码,PHP使用STMP发送电子邮件,PHP使用STMP发送电子邮件乱码解决
  20. 网易易盾验证码的安全策略

热门文章

  1. 004-SLF4J的简单使用
  2. 二叉排序树的实现——java
  3. php+读取配置里的值,ThinkPHP 读取配置信息与动态配置(C方法)
  4. 怎么用python自制计算公式_自制计算经纬度位移 python 程序
  5. 电脑底下的任务栏不见了_拿到一台新的Windows电脑,我会做什么?
  6. 计算机组装维护的概念,实用计算机组装与维护库及概念.doc
  7. linux yun 安装 redis,Linux系统安装NoSQL(MongoDB和Redis)步骤及问题解决办法(总结篇)...
  8. 详解IIS中URL重写工具的规则条件(Rule conditions)
  9. WIN2008 R2 Active Directory 之一 部署企业中第一台Windows Ser
  10. Java虚拟机详解(四)------垃圾收集器