У меня проблема с маскировкой значений Нет данных из статистического анализа растровых изображений.
Входной файл является трехмерным (строки, столбцы и слои) .img-файл. Он открывается с помощьюфункция gdal.Open (), а затем я хочу извлечь статистику по слоям из каждого изображения столбца строки x, которое оно содержит (layer).
Некоторые из этих изображений содержат данные дерьма (или No Data), которые имеютинициаторам набора данных было присвоено значение -0,0.Я не хочу, чтобы эти значения пикселей были включены в статистические вычисления, и мне необходимо их отсеивать.Для этого я использую функцию SetNoDataValue (), которая хорошо работает с изображениями .tif.
К сожалению, с .img, -0.0 продолжает отображаться как минимальное значение каждого слоя (оно должно быть около 270.) в переменной minCubeValues, и, как следствие, средние значения и значения стандартного отклонения являются неверными.
Когда я запускаю эту последовательность для файлов .tif, она работает нормально, но не для файлов .img, и я не могу понять, почему.Мне нужно, чтобы он работал непосредственно с файлами .img, так как большая часть данных моего изображения находится в .img и доступна как таковая.
Я подозреваю, что это сводится к структурным различиям между файлами .img и .tif, но я не могу понять, как это происходит в переменной ds2.
Кто-нибудь сталкивался с этой проблемой раньше и выяснилчто происходило?
Код выглядит следующим образом:
inputFilePathName = str("C:\\ResearchProcess\\2011sst_sstklcube20170628.img")
noDataValue = (-0.0)
ds2 = gdal.Open(inputFilePathName)
layerList = []
minCubeValues = []
maxCubeValues = []
layerMeans = []
for layer in range( ds2.RasterCount ):
layer += 1
srcLayer = ds2.GetRasterBand(layer)
srcLayer.SetNoDataValue(noDataValue) # screens out the No Data value in .tif, for .img, it doesn't :/
stats = srcLayer.ComputeStatistics( 0 )
layerList.append(layer)
minCubeValues.append(stats[0])
maxCubeValues.append(stats[1])
layerMeans.append(stats[2])
print minCubeValues
ds2 = None