【发布时间】:2011-08-08 19:29:59
【问题描述】:
我正在使用一个 numpy 掩码数组来执行一些图像处理。掩码用于处理图像周围的 NoData 像素(必要的边界,因为这些是地图投影图像,原点位于无数据像素中)。
使用以下代码块,我可以对图像执行高斯拉伸。
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 不会总是返回完美的高斯分布,一旦算法的其余部分运行,我将添加一些误差限制。
【问题讨论】:
标签: python arrays image-processing numpy