我有一个值为0到1的图像.我喜欢做的是简单平均.
但是,更具体地说,对于图像边界处的单元格,我想计算位于图像范围内的邻域/内核部分的像素平均值.事实上,这可以归结为调整"均值公式"的分母,即将总和除以的像素数.
我设法如下所示这样做scipy.ndimage.generic_filter,但这远非节省时间.
def fnc(buffer, count):
n = float(sum(buffer < 2.0))
sum = sum(buffer) - ((count - b) * 2.0)
return (sum / n)
avg = scipy.ndimage.generic_filter(image, fnc, footprint = kernel, \
mode = 'constant', cval = 2.0, \
extra_keywords = {'count': countkernel})
Run Code Online (Sandbox Code Playgroud)
细节
kernel =方阵(圆圈表示)countkernel =中的数量 kerneln= image通过排除由值2标识的填充区域的单元而位于其中的单元的数量sum通过从原始邻域总和中减去(填充单元的数量*2.0)来校正更新)
1)用NaN填充增加了大约30%的计算:
def fnc(buffer):
return (numpy.nansum(buffer) / numpy.sum([~numpy.isnan(buffer)]))
avg = scipy.ndimage.generic_filter(image, fnc, footprint = kernel, \
mode = 'constant', cval = float(numpy.nan) …Run Code Online (Sandbox Code Playgroud)