【问题标题】:3D local averages and using 3D convolution3D 局部平均值和使用 3D 卷积
【发布时间】:2018-11-12 22:49:14
【问题描述】:

我是 python 新手,对 Matlab 更熟悉。如果我的问题不适合本论坛,请随时指出。

我正在尝试以非常快的速度制作局部平均值。就像我试图通过为每个新像素平均多个像素来减少图像中的像素数量一样,除了我是在 3D 中进行的。

想象一个 1000x1000x6 的阵列。我将这个数组分成多个 10x10x3 的小数组。然后我想计算所有这些小数组的平均值并将它们重新组合在一起以构建我的数组。

我在 Matlab 上做的方式是用convn(array,seed,'valid'),这是一个多维卷积函数。

在 python 中最简单的方法是什么? 谢谢 手机版

【问题讨论】:

标签: python convolution


【解决方案1】:

我认为你能找到的最接近 convn 的是 SciPy 的 convolve。下面是例子

import numpy as np
from scipy.ndimage import convolve
M = np.random.random((1000, 1000, 6))
seed = np.ones((3, 3, 3)) * 0.1 / 27.
N = convolve(M, seed, mode='constant', cval=0)

mode='constant', cval=0 只是零填充。

不确定这是否是您需要的,但这是一个开始

文档:https://docs.scipy.org/doc/scipy-0.14.0/reference/generated/scipy.ndimage.filters.convolve.html

【讨论】:

  • 我尝试使用此功能,但我对输出有点困惑。我感兴趣,只有不触及填充的结果。意思是,如果我做那个卷积,我会期望一个 997x957x4 的数组。我感兴趣的结果会是 N[1:-1,1:-1,1:-1] 吗?
  • mode 参数的用途——它确保边缘正确卷积。如果您只想在卷积中输入valid(即不允许填充),您始终可以使用切片去除边缘的最终结果。这更像是一种黑客行为:)
  • 刚刚看到你对评论的编辑——我认为你对切片是正确的,假设你有一个 3x3 内核。如果我错了,请纠正我,但我认为预期的输出是 998x998x4,如果卷积是valid,输入是 1000x1000x6,内核是 3x3x3
猜你喜欢
  • 2018-05-06
  • 1970-01-01
  • 2019-11-20
  • 1970-01-01
  • 2019-12-01
  • 2020-05-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多