数据空间变换——栅格影像值域映射到0-255范围
前一段时间把多波段影像输入到深度网络进行训练的时候,由于我的多波段影像是用arcgis的【波段合成工具】来合成的,只是把原本的RGB三个波段的影像又加入了近红外、NDVI两个波段。在使用torchvision.transforms.TOTensor()把我的影像转为Tensor(关于如何转换这部分可以移驾到我的另一篇博文),但我看了一下这个函数似乎对所有通道的数据都做了归一化处理,所以我的训练就出了问题,因为我的影像除了RGB通道的值域在【0,255】,近红外和NDVI波段的值域都不在此范围,所以这一步无法做归一化处理。
所以今天要分享的就是如何把波段转换到0-255范围
方法非常简单,和做归一化处理是一样的,只不过不是把数据映射到【0,1】之间,而是映射到【0,255】的范围。
工具
工具一:【栅格计算器】
工具二:
arcpy.ExtractByAttributes()函数、
arcpy.GetRasterProperties_management()函数、arcpy.CalculateStatistics_management()函数
流程
1.计算栅格的最大值和最小值
# -*- coding:UTF-8 -*-
import arcpy
# 路径
path = r'C:\desktop\ndvi.tif'
# 计算栅格的统计数据
arcpy.CalculateStatistics_management(path, '', '', '', '', '')
# 获得栅格的最小值和最大值
max_min = ['MAXIMUM','MINIMUM']
for i in max_min:result = arcpy.GetRasterProperties_management(path, i, 'Band_1')mean = result.getOutput(0)print mean
在结果可以看到我的ndvi.tif的最大值和最小值
2.利用【栅格计算器】把栅格的值域映射至【0,255】
先把栅格的负值去掉
去掉负值后,利用公式tif = tif * (255 / tif.max) 就可以把栅格映射到【0,255】这个范围了。
但我以为到这里就可以结束了,但是现实无情打了我的脸,再次检查数据的最大值和最小值发现,最小值变成了科学计数法,可能是因为小数点后后面的值太多了。当我处理别的波段的时候有时候会出现负值,因此,为了安全起见,我决定把栅格中的【0,255】范围的值提取出来,溢出此范围的数据就不要了。
3.按值提取(arcpy.ExtractByAttributes()函数)
# -*- coding:UTF-8 -*-
import arcpy
from arcpy import env
from arcpy.sa import *
# 工作空间位置,过程数据也会生成在这个路径
env.workspace = r"工作空间路径"
attExtract = ExtractByAttributes("DSM_transf255.tif", "VALUE >= 0")
attExtract1 = ExtractByAttributes(attExtract, "VALUE <= 255")
# 保存路径
attExtract1.save(r"C:\Users\Alai\Desktop\simple\DSM_transf255.tif")
经过这一次处理后,终于成功把栅格影像的值域映射到【0,255】这个范围。
思考
在做这一步操作的时候,我感觉我的做法不太严谨,不能把单幅栅格图的最大值作为255,而应该是以波段的范围的最大值做255做变换。
打个比方,例如近红外的波段范围是0-50,但是近红外栅格图范围是1-30,我在做变换的时候应该使用50作为最大值才符合实际。我也想这样去操作,但是我把无人机的近红外栅格图导入到arcgis去看,最大值是2万多,所以我不知道近红外的波段的最大值是多少,无法做更有价值的变换,只能出此下策。希望有懂行的小伙伴和我探讨探讨!
数据空间变换——栅格影像值域映射到0-255范围相关推荐
- python矢量裁剪栅格代码_Python中使用面状矢量裁剪栅格影像,并依据Value值更改矢量属性...
本文整体思路:在Python中使用Geopandas库,依次读取shp文件的每一个面状要素,获取其空间边界信息并裁剪对应的栅格影像,计算所裁剪影像Value值的众数,将其设置为对应面状要素的NewTY ...
- 栅格影像WGS84转CGCS2000坐标系
有一副很多副WGS84和WGS_1984_UTM_zone_51N 的影像,要把他们转为CGCS2000(4490)坐标,但是地理坐标转换怎么填,参考了博客的步骤,因为这是两个地理坐标系的互转,并且还 ...
- 【ArcGIS风暴】ArcGIS栅格影像(NDVI)归一化处理的两种方法精解
[ArcGIS遇上Python]ArcGIS批量处理栅格影像(NDVI)归一化完整案例代码 图像归一化是指对图像进行了一系列标准的处理变换,使之变换为一固定标准形式的过程,该标准图像称作归一化图像. ...
- Python批量实现栅格影像可视化
任务描述: 对栅格影像进行可视化并保存图片 数据准备: 文件夹(工作空间)内含有需要批量可视化的tif影像 工具准备: Python环境 操作: 替换代码中的路径.根据需要调整可视化图片格式 # -* ...
- 图像处理: 如何将 像素值 控制在 值域[0, 255]
概念 在做计算机视觉方向项目的时候,往往需要进行图像处理.但是在此过程中,常常会遇到 对 像素值 进行 变换计算 后,像素值 超出 值域区间 [0, 255] 的情况.再加上计算过程中各自 float ...
- 【ArcGIS风暴】ArcGIS创建栅格数据集色彩映射表案例--以GlobeLand30土地覆盖数据为例
矢量数据快速符号化,可以将常用的样式保存到样式符号库,栅格数据快速符号化,需要创建色彩映射表.本文以GlobeLand30土地覆盖数据为例,详解ArcGIS中创建与使用色彩映射表. 文章目录 一. A ...
- 【ArcGIS遇上Python】ArcGIS批量处理栅格影像(NDVI)归一化完整案例代码
文章<ArcGIS栅格影像(NDVI)归一化处理的两种方法精解>详细介绍了ArcGIS中进行NDVI影像归一化处理的两种方法,但是无法批量进行,本文就放大招用Python实现批量NDVI归 ...
- 【ArcGIS风暴】ArcGIS10.6获取栅格影像边界范围的三种方法案例详解
基于ArcGIS平台有多种办法可以提取栅格影像边界,常见的方法有3种: 栅格范围(Raster Domain) 栅格转面(Raster to Polygon) 创建轮廓(BuildFootprints ...
- 将栅格影像转换为CAD/GIS矢量的3种方法
原文发布时间:2017/11/22 12:58:11 从图像中提取矢量要素或"栅格矢量化"涉及将栅格像素组转换为多边形.这是GIS和CAD工作流程的常见场景,也是一个具有挑战性的 ...
最新文章
- C语言memset函数详解(Linux下和windows下的差异)
- 军营中重重打击之后,我变了一个人(下)--我成为程序员所经历的(四)
- 广域网域内流量工程优化—Vecloud
- 使用GBDT+LR作点击率预测
- 为阿里云服务器ECS实例安装Nodejs
- linux基础知识总结(四)
- 新装Windows 2003 + IIS 6.0的问题
- 伺服扭矩模式怎么控制_气液增压缸是怎么增压的?气液增压缸好用吗?气液增压缸的原理及其伺服控制...
- img标签过滤加fs模块实现图片文件缓存
- 需求调研报告模板_精准摸底,把握需求:名师工作室开展培训活动调研报告
- ORA-01033问题解决
- [UPC] 2021秋组队17
- jle汇编_X86汇编指令
- 涨姿势!3D游戏里的男女性角色是这样建模出来的
- 07 不同 vcf 注释结果转 maf
- Entering emergency mode. Exit the shell to continue.。。。
- JS逆向之人口流动态势
- 阿里云王牌架构师一问开发者:我需要一个高并发的架构,我的系统要改造成微服务吗
- centos7挂载磁盘分区,新增磁盘小于或大于2T
- 苹果自带的清理软件_苹果用户福利 分享一款腾讯出品的垃圾清理软件
热门文章
- 为什么选择微信小程序
- 著名的Oracle公司中文名字为什么叫“甲骨文”?
- Java实现蓝桥杯调和级数
- Calendar中 DAY_OF_MONTH, DAY_OF_YEAR, DATE 的区别
- 家暴屡教不改能判刑吗
- 魔趣刷机step by step with zuk z2 pro
- 前_Fri Jun 16 00:00:00 CST 2017_转换后2017/6/13 15:36:39_IllegalArgumentException
- 【毕业设计源码】基于微信小程序的特产商城系统设计与实现
- ZT 头文件包含其实是一想很烦琐的工作 第一个原则应该是,如果可以不包含头文件...
- springboot整合rocketMQ记录 实现发送普通消息,延时消息