小编kad*_*éem的帖子

有效地计算边界适应的邻域平均值

我有一个值为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 =方阵(圆圈表示)
  • 从那时起填充2而不是零,我无法正确分隔填充区域的零和实际栅格的零
  • countkernel =中的数量 kernel
  • n= 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)

python performance image-processing boundary filter

6
推荐指数
1
解决办法
1270
查看次数

标签 统计

boundary ×1

filter ×1

image-processing ×1

performance ×1

python ×1