遥感数据制作数据集预处理

  • 1 珊格数据(.pix、.lyr等)转tif
  • 2 使用gdal库实现经纬度获取
  • 3 tif 转 jpg
  • 4 jpg图像裁剪为指定分辨率
  • 5 常见的几何变换扩充数据集(opencv实现)

1 珊格数据(.pix、.lyr等)转tif

tif百科
转tif

2 使用gdal库实现经纬度获取

tif图像自带经纬度信息,因此可以使用gdal包获取经纬度信息然后对相应像素点负值操作

from osgeo import gdal
from global_land_mask import globe
from  global_land_mask.globe import is_land
from glob import *
from osgeo import osr
import os
# import numpy as np
from functools import lru_cache# -*- coding: utf-8 -*-
# /**
#  * 各地图API坐标系统比较与转换;
#  * WGS84坐标系:即地球坐标系,国际上通用的坐标系。设备一般包含GPS芯片或者北斗芯片获取的经纬度为WGS84地理坐标系,
#  * 谷歌地图采用的是WGS84地理坐标系(中国范围除外);
#  * GCJ02坐标系:即火星坐标系,是由中国国家测绘局制订的地理信息系统的坐标系统。由WGS84坐标系经加密后的坐标系。谷歌中国地图和搜搜中国地图采用的是GCJ02地理坐标系;
#  * 3BD09坐标系:即百度坐标系,GCJ02坐标系经加密后的坐标系;
#  */
import math
from decimal import *class GLM(object):def __init__(self, fileName):self.fileName_ = fileName# 读取tif数据集def readTif(self):dataset = gdal.Open(self.fileName_)if dataset is None:print(self.fileName_+"文件无法打开")return dataset# 获取仿射矩阵信息def Getgeotrans(self):dataset = self.readTif()# dataset = GLM.readTif(self)im_width = dataset.RasterXSize  # 栅格矩阵的列数im_height = dataset.RasterYSize  # 栅格矩阵的行数im_geotrans = dataset.GetGeoTransform()  # 仿射矩阵print("放射矩阵:",im_geotrans)im_proj = dataset.GetProjection()  # 地图投影信息im_data = dataset.ReadAsArray(0, 0, im_width, im_height)  # 将数据写成数组,对应栅格矩阵del datasetreturn im_proj, im_geotrans, im_data#像素坐标和地理坐标仿射变换def CoordTransf(self, Xpixel, Ypixel, GeoTransform): #wgs坐标XGeo = GeoTransform[0]+GeoTransform[1]*Xpixel+Ypixel*GeoTransform[2]YGeo = GeoTransform[3]+GeoTransform[4]*Xpixel+Ypixel*GeoTransform[5]return XGeo, YGeo# 写文件,写成tifdef write_img(self, outpath, im_proj, im_geotrans, im_data):# gdal数据类型包括# gdal.GDT_Byte,# gdal .GDT_UInt16, gdal.GDT_Int16, gdal.GDT_UInt32, gdal.GDT_Int32,# gdal.GDT_Float32, gdal.GDT_Float64# 判断栅格数据的数据类型if 'int8' in im_data.dtype.name:datatype = gdal.GDT_Byteelif 'int16' in im_data.dtype.name:datatype = gdal.GDT_UInt16else:datatype = gdal.GDT_Float32# 判读数组维数if len(im_data.shape) == 3:im_bands, im_height, im_width = im_data.shapeelse:im_bands, (im_height, im_width) = 1, im_data.shape# 创建文件driver = gdal.GetDriverByName("GTiff")  # 数据类型必须有,因为要计算需要多大内存空间dataset = driver.Create(outpath, im_width, im_height, im_bands, datatype)dataset.SetGeoTransform(im_geotrans)  # 写入仿射变换参数dataset.SetProjection(im_proj)  # 写入投影if im_bands == 1:dataset.GetRasterBand(1).WriteArray(im_data)  # 写入数组数据else:for i in range(im_bands):dataset.GetRasterBand(i + 1).WriteArray(im_data[i])del datasetif __name__ == "__main__":filelist = glob("data_tif/cut_example.tif") #tif路径# image_list = []for file in filelist:print('[INFO] {}'.format(file))glm = GLM(file)proj, geotrans, data = glm.Getgeotrans()print(data)depth,height, width= data.shapeprint("depth,height,width:",depth,height,width)for y in range(0, height):for x in range(0, width):#longitude 经度 latitude 维度lon,lat = glm.CoordTransf(y, x, geotrans)#print('lat={}, lon={} is on land:'.format(lon, lat))is_on_land=is_land(lat,lon)#print('lat={}, lon={} is on land: {}'.format(lon, lat, is_on_land))if is_on_land==False:data[:, y, x] = 0else:data[:,y,x] = 255#print(data[:, y, x])print(data)#保存路径glm.write_img("fenli_data/cut_example_out.tif", proj, geotrans,data[:, :, :])  # 写数据#glm.write_img(os.path.join(out_dir, os.path.basename(file).split('.')[0]+'.tif'), proj, geotrans, data[:, :, :])  # 写数据

结果:(1m分辨率,可以看到,误差很大,没法用)

500m分辨率 MODIS效果就好多了

经纬度1秒误差在30m左右,1度

python实现对遥感影像经纬度获取并实现海陆分离相关推荐

  1. python/gdal处理遥感影像(读取、投影转换、裁剪、建立图像金字塔等)

    python/gdal处理遥感影像(读取.投影转换.裁剪.建立图像金字塔等) gdal库简单介绍 python使用gdal 一.安装python环境 二.安装gdal库 三.使用gdal处理遥感影像 ...

  2. python可视化DEM遥感影像(tif格式)||xarray使用

    1.利用xarray导入tif格式的DEM影像,并让其可视化. 参考博客:主要文章和博客1及博客2. 代码如下: 首先导入相关的包: import numpy as np import matplot ...

  3. 多特征融合的高分辨率遥感图像海陆分离——刘思彤

    论文阅读笔记 摘要 为解决目前大多数海陆分离方法仅利用单一特征对图像进行处理,从而导致误分割或存在大量孤立区域,造成后续处理工作难度大或无法开展的问题,提出一种联合灰度.梯度和纹理等多特征的海陆分离方 ...

  4. 利用ArcGIS Python批量拼接裁剪遥感影像(arcpy batch processing)

    本篇文章将说明如何利用ArcGIS 10.1自带的Python IDLE进行遥感影像的批量拼接与裁剪. 1.运行环境:ArcGIS10.1 (安装传送门).Python IDLE 2.数据来源:地理空 ...

  5. 基于PyTorch深度学习无人机遥感影像目标检测、地物分类及语义分割

    随着无人机自动化能力的逐步升级,它被广泛的应用于多种领域,如航拍.农业.植保.灾难评估.救援.测绘.电力巡检等.但同时由于无人机飞行高度低.获取目标类型多.以及环境复杂等因素使得对无人机获取的数据处理 ...

  6. 基于PyTorch的遥感影像、无人机影像的地物分类、目标检测、语义分割和点云分类

    我国高分辨率对地观测系统重大专项已全面启动,高空间.高光谱.高时间分辨率和宽地面覆盖于一体的全球天空地一体化立体对地观测网逐步形成,将成为保障国家安全的基础性和战略性资源.随着小卫星星座的普及,对地观 ...

  7. 高分辨率光学遥感影像舰船目标检测与识别算法研究(尹莹莹)

    论文阅读笔记 摘要 本文主要研究海陆背景下的光学遥感图像舰船目标检测与识别技术,重点研究了海陆分离.舰船目标疑似区域检测技术与疑似区域目标识别技术. 海陆分离: 采用了OTSU与形态学相结合的方法实现 ...

  8. python 读取geotiff_科学网—利用python GDAL库读写geotiff格式的遥感影像方法 - 张伟的博文...

    (1)利用python GDAL库读写geotiff格式的遥感影像方法,具有很好的参考价值,不错! from osgeo import gdal import numpy as np def read ...

  9. python repair修复功能_详解Python修复遥感影像条带的两种方式

    GDAL修复Landsat ETM+影像条带 Landsat7 ETM+卫星影像由于卫星传感器故障,导致此后获取的影像出现了条带.如下图所示, 影像中均匀的布满条带. 使用GDAL修复影像条带的代码如 ...

  10. python整形怎么切片_遥感影像切分切片

    遥感影像切片 生活当中,我们可能经常遇到处理一个很大的遥感影像情况,例如做一些逐像元运算,不便于并行处理.因此制作了将影像切分成多个小片的程序,切分后保持原有的数值.数据类型.波段数.投影. 切片 用 ...

最新文章

  1. Leecode 869. 重新排序得到 2 的幂——Leecode每日一题系列
  2. linux 注销其它用户,linux下注销其它用户或者tty的命令
  3. maven 多项目搭建
  4. django 模型类的常见字段约束,以及filter 过滤和查询
  5. 读小米的《参与感》书的摘录(一),与大家分享!
  6. 视觉SLAM笔记(15) 李群与李代数
  7. IMP-00009: 导出文件异常结束 imp
  8. linux命令的-和--参数问题
  9. (C语言)字符串大小写无关查找替换
  10. 1121 - Reverse the lights 思维题
  11. C语言实现贪吃蛇(简易)
  12. 二叉树求解前序序列、中序序列、后序序列
  13. 游戏音效制作的过程中,需要研发公司怎么配合?
  14. 唐僧为什么可以领导孙悟空(项目管理)
  15. 从外观上如何识别单模和多模光纤
  16. eclipse neno高级安装
  17. java web添加背景图片_java web项目中如何插入背景图片
  18. 用flask和html制作个人相册页面,Python编程flask使用页面模版的方法
  19. 神舟战神 8/9 代同方机型黑苹果 (非本人原创) (本人已按照教程安装)
  20. echarts水波球特效(附带外边框进度条)

热门文章

  1. 服务器硬盘常用的阵列方式有几种,三种常见磁盘阵列设置
  2. android 涨潮动画加载_这是迪士尼动画片《长发公主》中王国的原型,涨潮时才浮出海面...
  3. 期权、期货及其他衍生产品 第一章 课程笔记整理
  4. 计算机固态加机械硬盘,在台式机中添加固态/机械硬盘驱动器,让我与这篇文章一起教你...
  5. 个人电脑php漏洞怎么修复,PHP版 6.0 漏洞 要怎么修复
  6. java 断点跳到注释,一个空指针异常,代码如下,打了断点,一到“TOPICID”那里(在下方注释4那里)就抛异常-_-||...
  7. Tegra3 1080p高清播放时电源管理方式和功耗分析
  8. (一)android为什么需要recovery升级?
  9. windows中动态磁盘卷种类介绍
  10. Win11文件资源管理器有明显卡顿,微软承诺在2022年提高性能