.tif遥感影像各个波段的均值和方差的计算方法 | 您所在的位置:网站首页 › r语言计算均值和方差怎么算 › .tif遥感影像各个波段的均值和方差的计算方法 |
前言
前阵子进行深度学习研究的时候,有时候要对图像去均值的操作。这时候就要获取图像各个通道的平均值(MEAN)和方差(STD)。在网上找了很多方法,但是大多数是针对.jpg,.png等格式的图像,用的库也是是PIL和CV2。但因为我要处理的图像是.tif格式的遥感影像图,所以上面两个库对我来说都不怎么友好。下面为大家介绍.tif格式图计算平均值和方差的方法。 方法一:arcgis【获取栅格属性】工具和【栅格计算器】一样,经常失灵(例如,尽管选了计算第二个波段的均值,但是结果还是第一个波段的均值),老是得到一些错误的结果,有可能是因为破解版的原因,我没用过正版的,所以没办法测试是不是破解版的才会出错。还有一个小tip,在使用这个工具之前,最好先用【计算统计数据】计算后再用【获取栅格属性】。别问为什么,问就是经验所得。 这个方法不推荐,因为经常获得错误结果,如果你是正版使用者可以试一下,测试结果可以留言告诉我一下哈哈哈…arcgis -> 数据管理工具 -> 栅格 -> 栅格属性 -> 【获取栅格属性】 arcgis -> 数据管理工具 -> 栅格 -> 栅格属性 -> 【计算统计数据】 *****五星推荐 # -*- coding:UTF-8 -*- import arcpy ''' 1、gdal 模块可以实现,但是要通过xy坐标值才能获取相应的 pixel value,过程较为麻烦 2、arcpy 模块里面有 GetRasterProperties_management方法,可以读取不同波段的不同计算方法 3、直接在arcgis -> 数据管理工具 -> 栅格 -> 栅格属性 -> 获取栅格数据 这个工具不知道为什么在桌面端里面计算的值都是一个波段的值,似乎 选择波段不起作用,可能是破解版的BUG ''' path = r'输入tif的路径' bands = 7 # 输入你影像的波段数量 # 下面函数的功能和方法一【计算统计数据】功能一样 arcpy.CalculateStatistics_management(path, '', '', '', '', '') for i in range(1, bands + 1 ): # 第二个参数输入MEAN是求平均值,STD是求方差。还有很多个功能,这时候的arcpy真香 result = arcpy.GetRasterProperties_management(path, 'MEAN', 'Band_{}'.format(i)) mean = result.getOutput(0) print mean下图为参数二的变量,功能还是很强大滴,如果看不清直接去找arcgis的帮助文档 这个方法其实我也没用过,只是在csdn有看到。有一种是通过gdal遍历所有像元及其像素值,然后再计算平均值和方差,麻烦的我直接放弃。后来又看到了类似arcpy.GetRasterProperties_management()函数,就是 dsout.GetRasterBand(i).ComputeStatistics()。这个方法我没有使用过,仅供参考。 from osgeo import gdal gdalObject = gdal.Open('路径') # i 为波段 gdalObject.GetRasterBand(i).ComputeStatistics(false, out tmpDou, out tmpDou, out tmpDou, out tmpDou, null, null)就是把所有的波段都调用一下ComputeStatistics函数即可,该函数第一个参数为Bool型,按照官网解释,如果为True,那么GDAL会尝试先从金字塔文件中去计算统计值, 第二到五个参数分别为该波段的最小值,最大值,平均值,均方差,最后两个参数是可以用来显示进度的,一般用不上。 |
CopyRight 2018-2019 实验室设备网 版权所有 |