3
我使用numpy的屏蔽数组执行一些图像处理。掩模就位处理其包围图像(必要边界,因为这些都是与在无数据的像素原点地图投影图像)无数据像素。numpy.interp&掩蔽阵列
使用下面的代码块,我能够对图像执行高斯拉伸。
def gaussian_stretch(input_array, array_mean, array_standard_deviation, number_of_bins, n):
shape = input_array.shape
input_array = input_array.flatten()
#define a gaussian distribution, get binned GDF histogram
array_standard_deviation *= n
gdf = numpy.random.normal(array_mean, array_standard_deviation, 10000)
hist, bins = numpy.histogram(gdf, number_of_bins, normed=True)
cdf = hist.cumsum()
cdf = 256 * cdf/cdf[-1]
#interpolate and reshape
input_array = numpy.interp(input_array,bins[:-1],cdf)
input_array = input_array.reshape(shape)
return input_array
如果图像不包含NoData边框,则伸展按预期工作。在具有蒙版的图像上,蒙版被忽略。这是预期的行为?关于如何处理未屏蔽数据的任何想法?
我已经使用input_array.compressed()尝试,但是这仅返回未掩蔽的值的一维数组。正如所料,使用numpy.interp会失败,因为数组之间的大小不一致。
最后,据我所知,使用numpy.random.normal不会总是返回一个完美的高斯分布,一旦算法的其余部分是否正常工作,我将添加错误约束上的一些余量。