前一段时间把多波段影像输入到深度网络进行训练的时候,由于我的多波段影像是用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范围相关推荐

  1. python矢量裁剪栅格代码_Python中使用面状矢量裁剪栅格影像,并依据Value值更改矢量属性...

    本文整体思路:在Python中使用Geopandas库,依次读取shp文件的每一个面状要素,获取其空间边界信息并裁剪对应的栅格影像,计算所裁剪影像Value值的众数,将其设置为对应面状要素的NewTY ...

  2. 栅格影像WGS84转CGCS2000坐标系

    有一副很多副WGS84和WGS_1984_UTM_zone_51N 的影像,要把他们转为CGCS2000(4490)坐标,但是地理坐标转换怎么填,参考了博客的步骤,因为这是两个地理坐标系的互转,并且还 ...

  3. 【ArcGIS风暴】ArcGIS栅格影像(NDVI)归一化处理的两种方法精解

    [ArcGIS遇上Python]ArcGIS批量处理栅格影像(NDVI)归一化完整案例代码 图像归一化是指对图像进行了一系列标准的处理变换,使之变换为一固定标准形式的过程,该标准图像称作归一化图像. ...

  4. Python批量实现栅格影像可视化

    任务描述: 对栅格影像进行可视化并保存图片 数据准备: 文件夹(工作空间)内含有需要批量可视化的tif影像 工具准备: Python环境 操作: 替换代码中的路径.根据需要调整可视化图片格式 # -* ...

  5. 图像处理: 如何将 像素值 控制在 值域[0, 255]

    概念 在做计算机视觉方向项目的时候,往往需要进行图像处理.但是在此过程中,常常会遇到 对 像素值 进行 变换计算 后,像素值 超出 值域区间 [0, 255] 的情况.再加上计算过程中各自 float ...

  6. 【ArcGIS风暴】ArcGIS创建栅格数据集色彩映射表案例--以GlobeLand30土地覆盖数据为例

    矢量数据快速符号化,可以将常用的样式保存到样式符号库,栅格数据快速符号化,需要创建色彩映射表.本文以GlobeLand30土地覆盖数据为例,详解ArcGIS中创建与使用色彩映射表. 文章目录 一. A ...

  7. 【ArcGIS遇上Python】ArcGIS批量处理栅格影像(NDVI)归一化完整案例代码

    文章<ArcGIS栅格影像(NDVI)归一化处理的两种方法精解>详细介绍了ArcGIS中进行NDVI影像归一化处理的两种方法,但是无法批量进行,本文就放大招用Python实现批量NDVI归 ...

  8. 【ArcGIS风暴】ArcGIS10.6获取栅格影像边界范围的三种方法案例详解

    基于ArcGIS平台有多种办法可以提取栅格影像边界,常见的方法有3种: 栅格范围(Raster Domain) 栅格转面(Raster to Polygon) 创建轮廓(BuildFootprints ...

  9. 将栅格影像转换为CAD/GIS矢量的3种方法

    原文发布时间:2017/11/22  12:58:11 从图像中提取矢量要素或"栅格矢量化"涉及将栅格像素组转换为多边形.这是GIS和CAD工作流程的常见场景,也是一个具有挑战性的 ...

最新文章

  1. C语言memset函数详解(Linux下和windows下的差异)
  2. 军营中重重打击之后,我变了一个人(下)--我成为程序员所经历的(四)
  3. 广域网域内流量工程优化—Vecloud
  4. 使用GBDT+LR作点击率预测
  5. 为阿里云服务器ECS实例安装Nodejs
  6. linux基础知识总结(四)
  7. 新装Windows 2003 + IIS 6.0的问题
  8. 伺服扭矩模式怎么控制_气液增压缸是怎么增压的?气液增压缸好用吗?气液增压缸的原理及其伺服控制...
  9. img标签过滤加fs模块实现图片文件缓存
  10. 需求调研报告模板_精准摸底,把握需求:名师工作室开展培训活动调研报告
  11. ORA-01033问题解决
  12. [UPC] 2021秋组队17
  13. jle汇编_X86汇编指令
  14. 涨姿势!3D游戏里的男女性角色是这样建模出来的
  15. 07 不同 vcf 注释结果转 maf
  16. Entering emergency mode. Exit the shell to continue.。。。
  17. JS逆向之人口流动态势
  18. 阿里云王牌架构师一问开发者:我需要一个高并发的架构,我的系统要改造成微服务吗
  19. centos7挂载磁盘分区,新增磁盘小于或大于2T
  20. 苹果自带的清理软件_苹果用户福利 分享一款腾讯出品的垃圾清理软件

热门文章

  1. 为什么选择微信小程序
  2. 著名的Oracle公司中文名字为什么叫“甲骨文”?
  3. Java实现蓝桥杯调和级数
  4. Calendar中 DAY_OF_MONTH,  DAY_OF_YEAR,  DATE 的区别
  5. 家暴屡教不改能判刑吗
  6. 魔趣刷机step by step with zuk z2 pro
  7. 前_Fri Jun 16 00:00:00 CST 2017_转换后2017/6/13 15:36:39_IllegalArgumentException
  8. 【毕业设计源码】基于微信小程序的特产商城系统设计与实现
  9. ZT 头文件包含其实是一想很烦琐的工作 第一个原则应该是,如果可以不包含头文件...
  10. springboot整合rocketMQ记录 实现发送普通消息,延时消息